ansible初识二

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

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

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

一、yum模块

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

yum源配置文件中部份内容nginx

[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相关知识:web

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

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

[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"'      # 安装包组,注意带“@”符号

二、pip模块

回顾pip相关知识:flask

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

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

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

示例:并发

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

三、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

 

四、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'     # 禁用计划任务,  以# 开始表示禁用

五、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'        # 删除用户并删除用户的家目录

六、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'   # 删除组

 

2、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语言来写!

一、yaml

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

  字典: key: value

  列表: [] -

  后缀名:.yaml 或者 .yml

  注意:它的语法格式很是严格,冒号后边必须有空格,等号后边必定不能有空格,等等,本身去尝试一下!

yaml书写注意

  • 冒泡后面必须是空格

  • 等号后面不能有空格

  • -后面也要有空格

  • 严格对齐

 二、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

执行顺序:从上往下

特性:幂等性,即无论执行多少遍,结果都是同样的

三、传参

[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文件

四、补充:linux中计算

echo  3+4|bc   # linux计算

相关文章
相关标签/搜索