一、ansible模块(yum、pip、service、conr、user、group)

上篇中我们已经学了ansible 的几个模块, 接下来再来学习几个, 那么你是否知道ansible 一共有多少模块呢? 可以用一下命令查看

[root@localhost ~]# ansible-doc -l|wc -l         # 统计ansible有多少模块
2080

1、yum模块

请先自行回顾以下yum是什么?yum和rpm(redhat package manager)的区别是什么?

yum源配置文件中部分内容

[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch # 名字
baseurl=http://mirrors.aliyun.com/epel/7/$basearch # rpm源的地址,可以写http,https,ftp,Samba,file:
failovermethod=priority
enabled=1 # 是否开启,1代表开启,0表示关闭
gpgcheck=0 # 是否校验签名,1代表校验,0表示不校验
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

回顾yum相关知识:

yum list                    # 查看所有已经安装和可以安装的程序包
yum list|grep pip # 查看 pip 相关程序包
yum grouplist # 查看包组信息,包含已经安装和未安装的包组信息
yum groupinstall "包组名" # 安装包组
rpm -q 包名 # 查看是否已经安装了某包,如wget

查看ansible提供的yum模块的帮助信息:

[root@localhost ~]# ansible-doc -s yum     # 查看帮助信息,部分参数如下
disablerepo # 禁用源
enablerepo # 启用源
name # 包名
state # Whether to install (`present' or `installed', `latest'), or remove (`absent' or `removed') a package.

示例:

ansible web -m yum  -a 'name=wget'             # 安装wget
ansible web -m yum -a 'name=python2-pip' # 安装python2-pip
ansible web -m yum -a 'name=wget state=absent' # 卸载软件包
ansible web -m yum -a 'name="@Development Tools"' # 安装包组,注意带“@”符号

2、pip模块

回顾pip相关知识:

pip install 包名                       # 安装python包,如flask
pip freeze > requirements.txt # 将python的环境打包到文件中
pip install -r requirements.txt # 安装文件中的包
pip list # 查看所有的已安装成功的包

查看ansible提供的pip模块的帮助信息:

[root@localhost ~]# ansible-doc -s pip   # 查看帮助信息,部分参数如下:
chdir
name # 包名
requirements # 指定文件,安装文件中所有的包
virtualenv

示例:

ansible web -m pip -a 'name=flask'    # 安装flask模块

3、service模块

  回顾linux关于查看进程和端口号、开启服务等相关知识:

ps -ef|grep nginx              # 查看nginx进程
ss -tnlp # 查看端口信息
systemctl start nginx # centos7 设置开机自启动nginx
service nginx start # centos6 设置开机自启动nginx
systemctl enabled nginx # centos7 开机自启动nginx
chkconfig nginx on # centos6开机自启动nginx

查看ansible提供的service模块帮助文档:

root@localhost ~]# ansible-doc -s service         # 查看service模块帮助文档,部分参数如下:
name # 服务名
state # 状态,有started,stopped,restarted,reloaded<br>enabled # 设置开机自启动
ansible web -m service -a 'name=nginx state=started'         # 启动nginx
ansible web -m service -a 'name=nginx state=stopped' # 关闭nginx

4、cron模块

回顾linux定时任务相关知识:

*  *  *  *  *  job
分 时 日 月 周 任务
0 */2 * * * job # 每隔两个小时
0 12,13 * * * job # 12点和13点
0 12-17 * * * job # 12点到17点
0 12-17/2 * * 1,3,6,0 # 周1,周3,周6,周7 的 12点到17点每隔两个小时,注意:0和7都代表周日
crontab -e # 编辑计划任务,进入编辑模式
crontab -l # 查看计划任务
crontab -r # 删除计划任务

查看ansible的cron模块帮助文档:

[root@localhost ~]# ansible-doc -s cron          # 查看cron模块,部分参数如下:
day # 天
disabled # 禁用
hour # 小时
job # 任务
minute # 分钟
month # 月
name # 任务名字
weekday # 周

示例:

ansible db -m cron -a 'minute=26 job="touch  /tmp/xzmly.txt"  name=touchfile'  # 新建一个计划任务
ansible db -m cron -a "name=touchfile state=absent" # 删除一个计划任务
ansible db -m cron -a 'minute=26 job="touch /tmp/xzmly.txt" name=touchfile disabled=yes' # 禁用计划任务, 以# 开始表示禁用

5、user模块

  回顾linux用户和用户组的相关知识:

用户:
管理员 root 0
普通用户
系统用户 不能登录 1-999 centos7 1-499 centos6
登录用户 可以登录 1000-65535 centos7 500-65535 centos6
用户组:
管理员组 root 0
系统用户组 1-999 centos7 1-499 centos6
登录用户组 1000-65535 centos7 500-65535 centos6 -d 指定用户的家目录
-g 指定用户的组
-G 执行用户的附加组
-s 指定登录后使用的shell
-r 创建一个系统组
useradd -r wusir # 创建系统用户,从999开始倒序
useradd -s /sbin/nologin alexsb # 创建的是普通用户,从1000开始升序
useradd -d /opt/alexsb2 alexsb2 # 创建用户时指定用户的家目录
useradd -u 3000 alexsb6 # 创建用户并指定用户的uid
userdel alex # 删除用户
userdel -r alexsb2 # 删除用户并删除用户的家目录 groupadd yuchao # 创建用户组
groupdel yuchao # 删除用户组

  查看ansible的user模块帮助文档:

[root@localhost ~]# ansible-doc -s user        # 查看user模块的帮助文档,部分参数如下:
group # 组
groups # 附加组
home # 家目录
name # 用户名
password # 密码
remove # This only affects `state=absent', it attempts to remove directories associated with. 即仅当state=absent时有影响,删除用户的同时删除用户家目录
shell # 用户登录后使用的shell
system # 创建一个系统用户
uid # 用来指定用户的id
state # 状态

示例:

ansible db -m user -a 'name=wulaoshi uid=4000 home=/opt/wulaoshi groups=root shell=/sbin/nologin'    # 创建一个用户, 并指定用户的id , 用户的家目录, 用户的附加组, 用户的shell
ansible db -m user -a 'name=wulaoshi state=absent' # 删除用户但是不删除用户的家目录
ansible db -m user -a 'name=wulaoshi3 state=absent remove=yes' # 删除用户并删除用户的家目录

6、group模块

  查看ansible的group模块帮助文档:

[root@localhost ~]# ansible-doc -s group             # 查看group的帮助文档,部分参数如下:
gid # 组的id
name # 组名
system # 系统组
state # 状态

示例:

ansible db -m group -a 'name=wulaoshi system=yes'      #创建系统组
ansible db -m group -a 'name=wulaoshi state=absent' # 删除组

二、ansible剧本

首先用我们现有的ansible知识解决如下需求:

管控机通过ansible为web组的被管控机作如下操作:
创建一个用户组alex10
创建一个用户wusir10
把/etc/fstab文件复制到远程主机(即被管控机)上/tmp/f
安装nginx,并启动,设置开机自启动

解决办法:

ansible web -m group -a 'name=alex10'
ansible web -m user -a 'name=wusir10'
ansible web -m copy -a 'src=/etc/fstab dest=/tmp/f'
ansible web -m yum -a 'name=nginx'
ansible web -m service -a 'name=nginx enabled=yes'

思考:观察上面的解决方法,你有没有发现什么问题?如何解决?

没错,就是有很多重复的部分,而且想要再执行一遍就要再运行一遍命令!那么我们是不是可以写一个脚本来一次性执行,且想要什么时候执行就什么时候执行,问题又来了,如何写?用什么语言写?答案就是用yaml语言来写!

1、yaml

我们见过的用来写配置文件的语言有xml,还有uwsgi的配置文件后缀是.ini,而接下来要学习使用的一种编程语言是yaml,它可以用来写配置文件。语法格式如下:

  字典: key: value

  列表: [] -

  后缀名:.yaml 或者 .yml

  注意:它的语法格式非常严格,冒号后边必须有空格,等号后边一定不能有空格,等等,自己去尝试一下!

yaml书写注意

  • 冒泡后面必须是空格

  • 等号后面不能有空格

  • -后面也要有空格

  • 严格对齐

2、ansible-playbook命令格式

[root@localhost ~]# ansible-playbook -h          # 查看ansible-playbook的命令格式,ansible-playbook [options] playbook.yml [playbook2 ...]  ,部分参数如下:
-C, --check # 检查,白跑,干跑
-f FORKS, --forks=FORKS # 用来做并发
--list-hosts # 列出主机列表
--syntax-check # 语法检查

示例:使用yaml编写配置文件的方式解决上面问题

[root@localhost ~]# mkdir yaml          # 创建yaml目录,并进入该目录
[root@localhost yaml]# vi p1.yml # 创建配置文件p1.yml,写入如下内容,严格安装下面格式
- hosts: web
tasks:
- name: creategroup
group: name=sb
- name: createuser
user: name=alex
[root@localhost yaml]# ansible-playbook p1.yml

执行顺序:从上往下

特性:幂等性,即不管执行多少遍,结果都是一样的

3、传参

[root@localhost yaml]#  vi  p2.yml     #创建配置文件p2.yml  写入如下内容  注意有参数
- host: db
tasks:
- name: create{{ user }}
user: name={{ user }}

分析:上面的配置文件中含有参数,那么我们该如何传参?有以下五种方法:

  第一种:命令的方式,即使用参数 "-e"

ansible-playbook -e  'user=alexsb10'  p2.yml

  第二种:yml文件中vars的方式

- hosts: db
vars:
- user: alexsb14
tasks:
- name: create{{ user }}
user: name={{ user }}

  第三种:ansible的hosts文件之一

[db]
192.168.107.132 user=alexsb11
192.168.107.133 user=alexsb12

  第四种:ansible的hosts文件之二

[db.vars]     #表示组的参数
user=alexsb13

  第五种:yml文件中注册的方式

- hosts: db
tasks:
- name: sum
shell: echo 7+8|bc # 这个是linux中计算
register: user
- name: createuser
user: name={{ user.stdout }}

总结:传参方式之间有优先级:-e > playbook vars > hosts文件

4、补充:linux中计算

echo  3+4|bc   # linux计算

ansible初识二的更多相关文章

  1. ansible之二:模块用法

    一:ansible远程执行命令 [root@ansible ~]# ansible test -m shell -a "date" >> 2016年 08月 02日 星 ...

  2. ansible入门二(Ansible常见模块介绍)

    本节内容: ansible命令基础 常见模块举例 一.ansible命令基础 语法: ansible <host-pattern> [-f forks] [-m module_name] ...

  3. ansible初识三

    一.setup模块 ansible的 setup模块主要用来收集信息, 查看参数: [root@localhost ~]# ansible-doc -s setup # 查看参数,部分参数如下: fi ...

  4. 001_记一次ansible api二次开发遇到的小问题

    在某次关于发布系统的项目中,需要调用ansible来发布任务,其中一段代码是初始化ansible的连接,并传入一个source(目标机器)的值,代码段如下: from .ansible_api imp ...

  5. Ansible系列(二):选项和常用模块

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...

  6. ansible初识

    ansible: 运维自动化的工具, 基本功能, 基于ssh远程连接, 连接验证(ssh-keygen ssh-copy-id  ip) 下载: 1. 安装epel源 wget -O /etc/yum ...

  7. Python函数初识二

    一.变量的作用域LEGB 1.1.变量的作用域 在Python中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的.变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名 ...

  8. JQuery初识(二)

    一丶链式编程 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  9. JavaScript初识(二)

    接上一篇: 九丶伪数组 arguments arguments代表的是实参.有个讲究的地方是:arguments只在函数中使用 (1)返回函数实参的个数:arguments.length fn(2,4 ...

随机推荐

  1. HTML5移动Web开发指南-学习笔记(一)

    一,浏览器引擎    浏览器的内核引擎,基本上是四分天下: Trident: IE 以Trident 作为内核引擎; Gecko: Firefox 是基于 Gecko 开发; WebKit: Safa ...

  2. Tomcat 运行 idea 编译好的 .class JavaWeb 项目

    对于新手来说,对于项目部署,有时候就是以为拷贝在idea控制台里面跑的项目放到tomcat里面的webapps里面跑就可以了,这仅仅限于静态项目..... 他不像PHP , 修改源码直接可以跑, 而J ...

  3. 【angularJS】定义模块angular.module

    模块定义了一个应用程序.控制器通常属于一个模块. JavaScript 中应避免使用全局函数.因为他们很容易被其他脚本文件覆盖. AngularJS 模块让所有函数的作用域在该模块下,避免了该问题. ...

  4. 网络赛牡丹江赛区E ZOJ3813(线段树)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5345 给定序列P,定义序列S为P反复重复得到的一个无穷长的序列: if P = ...

  5. 使用vigil 监控微服务系统包含可视化界面

    1. 安装 a. rust cargo cargo install vigil-server b. docker docker pull valeriansaliou/vigil:v1.3.0 2. ...

  6. 将 PCB 文件转换为可读的文本

    将 PCB 文件转换为可读的文本 将元件转成列表. 坐标也放到列表中. 以元件号为排序. 使用 json 格式,并格式,方便对比. 元件网络转成单独文件. 特殊说明生成单独文件.

  7. centos 限制只能访问某个目录的php文件

    vi /etc/php.ini #编辑 open_basedir = .:/tmp/ #在380行 设置表示允许访问当前目录(即PHP脚本文件所在之目录)和/tmp/目录,可以防止php木马跨站,如果 ...

  8. 生产环境LNMP (果图片)

    一. 下载一键安装包 LNMP   官方地址为:http://lnmp.org/ 登陆后运行:screen -S lnmp cd /usr/local/src wget -c http://soft. ...

  9. 【转】活用软件测试工具之Jmeter活用

    软件测试工具不光能测试用,拿Jmeter来说,使用它可以进行web性能测试. 简单说一下大概使用: 如果要测试某个网页内的功能,首先要录制Jmeter脚本,脚本的录制与运行过程,也就是打开网页,执行被 ...

  10. Sentinel限流示例:编码和注解限流

    一.Sentinel 是什么? 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel 以流量为切入点,从流量控制.熔断降级.系统负载保护等多个维度保护服务的稳定性. Sentine ...