博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
96.ansible安装包和管理 playbook相关
阅读量:6643 次
发布时间:2019-06-25

本文共 7495 字,大约阅读时间需要 24 分钟。

hot3.png

24.21 ansible安装包和管理服务

24.22 使用ansible playbook

24.23 playbook里的变量

24.24 playbook里的循环

24.25 playbook里的条件判断

24.26 playbook中的handlers

 

 

 

 

24.21 ansible安装包和管理服务

 

 

 

1.ansible testhost -m yum -a "name=httpd"

#yum模块

在name后面还可以加上state=installed(安装,可以不加,默认就是安装)/removed (卸载)

2.ansible testhost -m service -a "name=httpd state=started enabled=yes"

#运行httpd并开机启动

这里的name是centos系统里的服务名,可以通过chkconfig --list查到。

3.Ansible文档的使用 #如果忘记选项可以查询

ansible-doc -l   列出所有的模块

ansible-doc cron  查看指定模块的文档

 

 

实例:

[root@axinlinux-01 ~]# ansible axinlinux-02 -m yum -a "name=httpd"

axinlinux-02 | SUCCESS => {

"ansible_facts": {

"pkg_mgr": "yum"

},

"changed": false,

"msg": "",

"rc": 0,

"results": [

"httpd-2.4.6-88.el7.centos.x86_64 providing httpd is already installed"

]

}

[root@axinlinux-01 ~]# ansible axinlinux-02 -m yum -a "name=httpd state=removed" #卸载httpd

[root@axinlinux-02 ~]# rpm -qa httpd #02上看一下就没有了

[root@axinlinux-01 ~]# ansible axinlinux-02 -m service -a "name=httpd state=started enabled=no" #开启httpd并不开启启动

[root@axinlinux-02 ~]# ps aux |grep httpd #查看是否启动

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

24.22 使用ansible playbook

 

 

就是把所有的配置搞到一个配置文件里去,这样直接执行配置文件就行了。而不是用命令行一行一行的去执行。就像以上几节,执行命令要敲很长的命令,很麻烦

 

1.相当于把模块写入到配置文件里面,例:

vi  /etc/ansible/test.yml //加入如下内容 #后缀名是.yml的

--- #固定格式,表示开头(顶格)

- hosts: aming-02 #针对那些机器去操作(也是顶格),也可以写主机组,如testhost

remote_user: root #用哪个用户的身份去做

tasks: #具体的任务是什么

- name: test_playbook #注意空格(四个)

shell: touch /tmp/lishiming.txt #用到的shell模块

说明: 第一行需要有三个杠,hosts参数指定了对哪些主机进行参作,如果是多台机器可以用逗号作为分隔,也可以使用主机组,在/etc/ansible/hosts里定义;

user参数指定了使用什么用户登录远程主机操作;

tasks指定了一个任务,其下面的name参数同样是对任务的描述,在执行过程中会打印出来,shell是ansible模块名字

2.执行:ansible-playbook test.yml

 

 

 

实例:

[root@axinlinux-01 ~]# cd /etc/ansible/

[root@axinlinux-01 ansible]# vim test.yml

---

- hosts: axinlinux-02

remote_user: root

tasks:

- name: test_playbook

shell: touch /tmp/lishiming.txt

[root@axinlinux-01 ansible]# ansible-playbook test.yml #执行这个文件就可以了

[root@axinlinux-02 ~]# ls -l /tmp/lishiming.txt #查看一下

-rw-r--r-- 1 root root 0 12月 10 15:04 /tmp/lishiming.txt

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

24.23 playbook里的变量

 

 

 

再来一个创建用户的例子:

vi /etc/ansible/create_user.yml //加入如下内容

---

- name: create_user

hosts: aming-02

user: root

gather_facts: false #负责收集客户机的属性,类似于saltstack的grains(ip、版本等等)

vars: #变量

- user: "test" #user变量的值是test

tasks:

- name: create user

user: name="{

{ user }}" #user模块,相当于直接创建用户。user等于test,在这引用他

说明:name参数对该playbook实现的功能做一个概述,后面执行过程中,会打印 name变量的值 ,可以省略;gather_facts参数指定了在以下任务部分执行前,是否先执行setup模块获取主机相关信息,这在后面的task会使用到setup获取的信息时用到;vars参数,指定了变量,这里指字一个user变量,其值为test ,需要注意的是,变量值一定要用引号引住;user提定了调用user模块,name是user模块里的一个参数,而增加的用户名字调用了上面user变量的值。

 

 

 

实例:

[root@axinlinux-01 ansible]# vim create_user.yml

---

- name: create_user

hosts: axinlinux-02

user: root

gather_facts: false

vars:

- user: "test"

tasks:

- name: create user

user: name="{

{ user }}"

[root@axinlinux-01 ansible]# ansible-playbook create_user.yml

[root@axinlinux-02 ~]# id test

uid=1003(test) gid=1003(test) 组=1003(test)

[root@axinlinux-01 ansible]# ansible-playbook create_user.yml

axinlinux-02 : ok=1 changed=0 unreachable=0 failed=0 #再次执行就代表有这个用户了,就会提示changed=0,没有改变

 

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

24.24 playbook里的循环

 

 

 

vi /etc/ansible/while.yml //加入如下内容

---

- hosts: testhost

user: root

tasks:

- name: change mode for files

file: path=/tmp/{

{ item }} mode=600 #files模块。变量item,包含1、2、3.txt。相当于循环了三次,把这个三个文件改成600

with_items: #先写上面的变量{

{ item }} ,再在这些with_items:,也就是这个变量是什么。注意空格

- 1.txt

- 2.txt

- 3.txt

说明: with_items为循环的对象

因为他回去收集其他机器的属性,如果机器很多的情况下,可以加一行gather_facts: false,把它禁掉就可以了

执行 ansible-playbook while.yml

 

 

实例:

[root@axinlinux-01 ansible]# vim while.yml

---

- hosts: axinlinux-02

user: root

tasks:

- name: change mode for files

file: path=/tmp/{

{ item }} state=touch mode=600 #因为02机器上没有这三个文件,所以加了state=touch创建

with_items:

- 1.txt

- 2.txt

- 3.txt

[root@axinlinux-01 ansible]# ansible-playbook while.yml #执行这个文件就可以了

[root@axinlinux-02 ~]# ls -l /tmp/*.txt #检查一下

-rw------- 1 root root 2374 12月 10 16:03 /tmp/1.txt

-rw------- 1 root root 0 12月 10 16:03 /tmp/2.txt

-rw------- 1 root root 0 12月 10 16:03 /tmp/3.txt

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

24.25 playbook里的条件判断

 

 

 

当出现什么情况的时候,才会怎么样

vi /etc/ansible/when.yml //加入如下内容

---

- hosts: testhost #这里为testhost,因为下面判断语句,要在所有的机器里去判断是否符合

user: root

gather_facts: True #True表示要去收集信息。当然默认就是收集,也可以删掉这行

tasks:

- name: use when

shell: touch /tmp/when.txt #创建这个文件。也就是当下面一行的条件成立的时候,才回去创建

when: ansible_ens33.ipv4.address == "192,168,208.130"

#条件判断。实例中讲解

说明:ansible aming-02 -m setup 可以查看到所有的facter信息 #上面为True,所收集到的什么信息。我们上面用ip作为判断,都是在这里面找的

when判断不仅仅针对gather_facts,也可针对其他的。比如这个机器上的文件或目录是否存在、文件属性等等

 

 

 

实例:

[root@axinlinux-01 ansible]# vim when.yml

---

- hosts: axinlinux-02

user: root

gather_facts: True

tasks:

- name: use when

shell: touch /tmp/when.txt

when: ansible_ens33.ipv4.address == "192,168,208.130"

 

 

[root@axinlinux-01 ansible]# ansible -m setup axinlinux-02 #查看02机器的gather_facts内容,因为我们的判断条件就在这里面判断的。用到了setup模块

"ansible_ens33": { #判断语句的最上一级

"active": true,

"device": "ens33",

"features": {

!!!中间的数据省略了!!!

},

"hw_timestamp_filters": [],

"ipv4": { #判断语句的下一级

"address": "192.168.208.130", #判断语句的在下一级。只能这样一级一级的写才能得出这个ip

"broadcast": "192.168.208.255",

"netmask": "255.255.255.0",

"network": "192.168.208.0"

},

条件判断中,when: ansible_ens33.ipv4.address == "192,168,208.130" ,ansible_ens33为一级。而后面的ipv4为一级,address为一级。也就是ansible_ens33的下面是是ipv4,在下面是address。所以我们想要得出这个ip,就要这么写。这是分级的,用 点 (.)来分隔。

因为我们使用这个ip来作为判断的。然后用其他的作为判断,比如"active": true, 就得这样写when:ansible_ens33.active。判断他是不是分级的,看他的空格是不是在上一级的后面!!

[root@axinlinux-01 ansible]# ansible-playbook when.yml #运行

[root@axinlinux-02 ~]# ls -l /tmp/*.txt

-rw-r--r-- 1 root root 0 12月 10 16:52 /tmp/when.txt

 

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

24.26 playbook中的handlers

 

 

 

 

相当于shell里面的&&。执行成功以后在执行下一个命令

应用场景:可以使用在修改nginx等配置文件,然后重启或加载的时候

以下就是,当tasks执行成功以后再去执行handlers。用notify,将他们关联起来!!!

执行task之后,服务器发生变化之后要执行的一些操作,比如我们修改了配置文件后,需要重启一下服务 vi /etc/ansible/handlers.yml//加入如下内容

---

- name: handlers test

hosts: aming-02

user: root

tasks:

- name: copy file

copy: src=/etc/passwd dest=/tmp/aaa.txt #用到的copy模块。来源地址和目标地址

notify: test handlers #就是copy模块执行成功以后,我要在运行一个handlers,可以多个handlers

handlers:

- name: test handlers #这里的名字就是上面notify定义的名字

shell: echo "111111" >> /tmp/aaa.txt #用到的shell模块

说明,只有copy模块真正执行后,才会去调用下面的handlers相关的操作。也就是说如果1.txt和2.txt内容是一样的,并不会去执行handlers里面的shell相关命令。 这种比较适合配置文件发生更改后,重启服务的操作。

 

 

 

 

实例:

[root@axinlinux-01 ansible]# vim handlers.yml

---

- name: handlers test

hosts: axinlinux-02

user: root

tasks:

- name: copy file

copy: src=/etc/passwd dest=/tmp/aaa.txt

notify: test handlers

handlers:

- name: test handlers

shell: echo "111111" >> /tmp/aaa.txt

[root@axinlinux-01 ansible]# ansible-playbook handlers.yml

[root@axinlinux-02 ~]# tail /tmp/aaa.txt

mongod:x:993:989:mongod:/var/lib/mongo:/bin/false

gitlab-www:x:992:988::/var/opt/gitlab/nginx:/bin/false

git:x:991:987::/var/opt/gitlab:/bin/sh

gitlab-redis:x:990:986::/var/opt/gitlab/redis:/bin/false

gitlab-psql:x:989:985::/var/opt/gitlab/postgresql:/bin/sh

gitlab-prometheus:x:988:984::/var/opt/gitlab/prometheus:/bin/sh

zhangsan:x:1011:1011::/home/jail/./home/zhangsan:/usr/sbin/jk_chrootsh

redis:x:987:983:Redis Database Server:/var/lib/redis:/sbin/nologin

dockerroot:x:986:982:Docker User:/var/lib/docker:/sbin/nologin

111111

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/3866149/blog/3054538

你可能感兴趣的文章
应用模型
查看>>
开源项目与许可证
查看>>
深入浅出JSON
查看>>
Servlet的声明周期里究竟怎么做的?
查看>>
有关性能测试协议选择问题
查看>>
JMeter学习笔记01-安装环境
查看>>
php二次开发以及垃圾回收机制
查看>>
转载《Data Guard Broker基础》
查看>>
Redhat openstack6.0的安装
查看>>
交换机套装书获京东网双重重磅推荐
查看>>
演示:设置密码长度限制、密码加强
查看>>
Hadoop系列之三:函数式编程语言和MapReduce
查看>>
模版(Template)在框架API设计之妙用
查看>>
IP数据包经由路由转发的时候,源ip和目的IP是否改变
查看>>
Open-E DSS V7 应用系列之七 卷组和卷的管理
查看>>
Installing Oracle Database 18c Using RPM Packages
查看>>
AD恢复(3)使用AD回收站
查看>>
C++static成员函数和static成员的学习
查看>>
openvswitch在rhel61+kvm环境中的使用
查看>>
***S 2012 参数化报表 -- 利用拼接字符串来取代查询参数
查看>>