1.使用以下命令给客户端安装httpd服务:

[root@server ~]# ansible testhost -m yum -a "name=httpd"
192.168.77.128 | SUCCESS => {"changed": true, "msg": "", "rc": 0, "results": ["Loaded plugins: fastestmirror, langpacks\nLoading mirror speeds from cached hostfile\n * base: mirrors.cn99.com\n * epel: mirrors.tongji.edu.cn\n * extras: mirrors.aliyun.com\n * updates: mirrors.163.com\nResolving Dependencies\n--> Running transaction check\n---> Package httpd.x86_64 0:2.4.6-67.el7.centos.6 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package      Arch          Version                        Repository      Size\n================================================================================\nInstalling:\n httpd        x86_64        2.4.6-67.el7.centos.6          updates        2.7 M\n\nTransaction Summary\n================================================================================\nInstall  1 Package\n\nTotal download size: 2.7 M\nInstalled size: 9.4 M\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Installing : httpd-2.4.6-67.el7.centos.6.x86_64                           1/1 \n  Verifying  : httpd-2.4.6-67.el7.centos.6.x86_64                           1/1 \n\nInstalled:\n  httpd.x86_64 0:2.4.6-67.el7.centos.6                                          \n\nComplete!\n"]
}

2.执行以下命令启动httpd服务:

[root@server ~]# ansible testhost -m service -a "name=httpd state=started enabled=yes"## 然后会输出一堆状态信息,只要第一句为SUCCESS则代表启动成功

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

其他控制服务的命令:

# 停止服务
[root@server ~]# ansible testhost -m service -a "name=httpd state=stopped"
# 重新启动服务
[root@server ~]# ansible testhost -m service -a "name=httpd state=restarted"
# 重载服务
[root@server ~]# ansible testhost -m service -a "name=httpd state=reloaded"

3.在name后面还可以加上state=installed或removed,加上removed的话,表示卸载这个服务,如果不指定state的值默认是installed:

[root@server ~]# ansible testhost -m yum -a "name=httpd state=removed"
192.168.77.128 | SUCCESS => {"changed": true, "msg": "", "rc": 0, "results": ["Loaded plugins: fastestmirror, langpacks\nResolving Dependencies\n--> Running transaction check\n---> Package httpd.x86_64 0:2.4.6-67.el7.centos.6 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package      Arch          Version                       Repository       Size\n================================================================================\nRemoving:\n httpd        x86_64        2.4.6-67.el7.centos.6         @updates        9.4 M\n\nTransaction Summary\n================================================================================\nRemove  1 Package\n\nInstalled size: 9.4 M\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n  Erasing    : httpd-2.4.6-67.el7.centos.6.x86_64                           1/1 \n  Verifying  : httpd-2.4.6-67.el7.centos.6.x86_64                           1/1 \n\nRemoved:\n  httpd.x86_64 0:2.4.6-67.el7.centos.6                                          \n\nComplete!\n"]
}
[root@server ~]# 

然后到客户端上通过rpm -qa httpd命令查看是否已卸载成功:

[root@client ~]# rpm -qa httpd
[root@client ~]# 

Ansible文档的使用:

1.列出所有可用的模块命令:

ansible-doc -l

2.查看指定模块的文档,例如我要查看cron模块的文档,可使用以下命令:

ansible-doc cron

ansible-doc后面跟模块名就可以查看该模块的文档。


24.22 使用ansible playbook

playbook相当于可以把模块命令都写入到配置文件里面,这样就可以直接执行配置文件了,有点脚本的意思:

[root@server ~]# vim /etc/ansible/test.yml
---
- hosts: testhostremote_user: roottasks:- name: test_playbookshell: touch /tmp/test.txt

文件格式说明:

  • 第一行需要有三个杠,hosts参数指定了对哪些主机进行参作,如果是多台机器可以用逗号作为分隔,也可以使用主机组,在/etc/ansible/hosts里定义;
  • user参数指定了使用什么用户登录远程主机操作;
  • tasks指定了一个任务,其下面的name参数同样是对任务的描述,在执行过程中会打印出来,shell是ansible模块名字

编辑完成之后,使用ansible-playbook命令执行该文件:

[root@server ~]# ansible-playbook /etc/ansible/test.ymlPLAY [testhost] ***********************************************************************************************************TASK [Gathering Facts] ****************************************************************************************************
ok: [192.168.77.128]TASK [test_playbook] ******************************************************************************************************[WARNING]: Consider using file module with state=touch rather than running touchchanged: [192.168.77.128]PLAY RECAP ****************************************************************************************************************
192.168.77.128             : ok=2    changed=1    unreachable=0    failed=0   [root@server ~]# 

然后到客户端上看看是否有创建test.txt文件:

[root@client ~]# ls -l /tmp/test.txt
-rw-r--r-- 1 root root 0 1月  30 11:58 /tmp/test.txt
[root@client ~]# 

如上,代表执行成功。


24.23 playbook里的变量

我们通过一个创建用户的例子,来演示一下playbook里的变量使用方式:

[root@server ~]# vim /etc/ansible/create_user.yml  # 编辑内容如下
---
- name: create_userhosts: testhostuser: rootgather_facts: falsevars:- user: "test"tasks:- name: create useruser: name="{{ user }}"

说明:

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

执行该文件:

[root@server ~]# ansible-playbook /etc/ansible/create_user.ymlPLAY [create_user] ********************************************************************************************************TASK [create user] ********************************************************************************************************
changed: [192.168.77.128]PLAY RECAP ****************************************************************************************************************
192.168.77.128             : ok=1    changed=1    unreachable=0    failed=0   [root@server ~]# 

到客户端上看看用户是否已创建:

[root@client ~]# id test
uid=1003(test) gid=1003(test) 组=1003(test)
[root@client ~]# 

24.24 playbook里的循环

playbook除了有变量,还有循环语句,以下通过一个简单的例子来演示一下循环的使用方式:

[root@server ~]# vim /etc/ansible/while.yml
---
- hosts: testhostuser: roottasks:- name: change mode for filesfile: path=/tmp/{{ item }} state=touch mode=600with_items:- 1.txt- 2.txt- 3.txt

说明:

  • file模块可以对文件进行相关的操作,例如创建文件或者更改文件权限等,具体可以查看该模块的文档
  • with_items为循环的对象,相当于是一个数组或集合,写在下面的1.txt、2.txt以及3.txt是该集合的元素。而item则表示的是遍历出来的元素,也就是说item指代的是1.txt、2.txt以及3.txt。
  • state的值设置为touch表示如果该文件不存在就进行创建
  • path表示文件的路径
  • mode设置权限

执行该文件:

[root@server ~]# ansible-playbook /etc/ansible/while.yml PLAY [testhost] ***********************************************************************************************************TASK [Gathering Facts] ****************************************************************************************************
ok: [192.168.77.128]TASK [change mode for files] **********************************************************************************************
changed: [192.168.77.128] => (item=1.txt)
changed: [192.168.77.128] => (item=2.txt)
changed: [192.168.77.128] => (item=3.txt)PLAY RECAP ****************************************************************************************************************
192.168.77.128             : ok=2    changed=1    unreachable=0    failed=0   [root@server ~]# 

到客户端上看看文件是否已创建:

[root@client ~]# ll /tmp/*.txt
-rw------- 1 root root  0 1月  30 15:54 /tmp/1.txt
-rw------- 1 root root  0 1月  30 15:54 /tmp/2.txt
-rw------- 1 root root  0 1月  30 15:54 /tmp/3.txt
[root@client ~]# 

24.25 playbook里的条件判断

我们都知道在脚本中循环和条件判断是必不可少的语句,所以在playbook里这两种语句也是有的,循环我们已经介绍完了,接下来我们通过一个简单的创建文件的例子演示一下条件判断语句的使用方式。

我们一般以setup模块收集到的主机信息,来作为判断条件。所以在编写代码之前,我们需要先获取相应的信息,例如我要以ip地址来作为判断条件,那么我就得先从setup里获取主机ip的相关信息。

执行以下命令可以查看到setup收集到的所有的facter信息,输出的信息是JSON格式的:

ansible testhost -m setup

编写文件内容如下:

[root@server ~]# vim /etc/ansible/when.yml
---
- hosts: testhostuser: rootgather_facts: Truetasks:- name: use whenshell: touch /tmp/when.txtwhen: ansible_eno16777736.ipv4.address == "192.168.77.128"

说明:

  • ansible_eno16777736是一个数组存储着网卡相关信息,ipv4属于该数组的子元素,但是ipv4也是一个数组,而address则是ipv4数组的子元素。我们需要使用address 来作为判断条件。
  • 所以要访问address就需要使用这样的格式:ansible_eno16777736.ipv4.address,address表示的是键,而"192.168.77.128"则是值,when为判断语句相当于if,所以其判断条件为:该键的值为"192.168.77.128"时就执行shell模块里定义的语句。

执行该文件:

[root@server ~]# ansible-playbook /etc/ansible/when.yml PLAY [testhost] ***********************************************************************************************************TASK [Gathering Facts] ****************************************************************************************************
ok: [192.168.77.128]TASK [use when] ***********************************************************************************************************[WARNING]: Consider using file module with state=touch rather than running touchchanged: [192.168.77.128]PLAY RECAP ****************************************************************************************************************
192.168.77.128             : ok=2    changed=1    unreachable=0    failed=0   [root@server ~]# 

到客户端上看看文件是否已创建:

[root@client ~]# ll /tmp/when.txt
-rw-r--r-- 1 root root 0 1月  30 16:33 /tmp/when.txt
[root@client ~]#

24.26 playbook中的handlers

有一种情况就是执行了tasks里面的内容之后,服务器发生了变化,这时我们可能需要执行一些相关的操作。例如我们修改了某个服务的配置文件后,则需要重启一下服务。而handlers就是完成这样的事情的,它相当于编程中的回调函数,当tasks里的内容执行成功后,就会执行handlers里定义的内容。也类似于shell脚本中的&&符号,例如 cat 1.txt && rm -f 1.txt ,当cat 1.txt命令执行成功之后就会执行rm -f 1.txt命令,否则不执行。

下面用一个简单的例子来演示一下handlers的使用方式:

[root@server ~]# vim /etc/ansible/handlers.yml
---
- name: handlers testhosts: testhostuser: roottasks:- name: copy filecopy: src=/etc/passwd dest=/tmp/test_passwd.txtnotify: test handlershandlers:- name: test handlersshell: echo "This is a test string" >> /tmp/test_passwd.txt

说明:

  • 只有copy模块执行成功后,才会去调用下面的handlers里定义的内容。也就是说如果/etc/passwd和/tmp/test_passwd.txt内容是一样的话,就不会去执行handlers里面的shell相关命令,因为copy没有被执行。 这种比较适合配置文件发生更改后,重启服务的操作。
  • notify用于指定handlers的name参数的值,因为handlers可以定义多个,所以需要使用notify来进行指定调用哪一个。

执行该文件:

[root@server ~]# ansible-playbook /etc/ansible/handlers.yml PLAY [handlers test] ******************************************************************************************************TASK [Gathering Facts] ****************************************************************************************************
ok: [192.168.77.128]TASK [copy file] **********************************************************************************************************
changed: [192.168.77.128]RUNNING HANDLER [test handlers] *******************************************************************************************
changed: [192.168.77.128]PLAY RECAP ****************************************************************************************************************
192.168.77.128             : ok=3    changed=2    unreachable=0    failed=0   [root@server ~]# 

到客户端上看看文件末尾的那一行是否是我们echo进去的那一行内容:

[root@client ~]# tail -n1 /tmp/test_passwd.txt
This is a test string

[root@client ~]#




本文转自 ZeroOne01 51CTO博客,原文链接:http://blog.51cto.com/zero01/2066913,如需转载请自行联系原作者

简单使用ansible-playbook相关推荐

  1. Ansible playbook

    1.什么是playbook playbook :定义一个文本文件,以yml为后缀结尾,那playbook组成如下. play:定义的是主机的角色 task: 定义的是具体执行的任务 总结:playbo ...

  2. Ansible 学习总结(2)—— Ansible playbook 入门详解

    一.Ansible playbook 简单概述 playbook 是 ansible 用于配置,部署,和管理被控节点的剧本.通过 playbook 的详细描述,执行其中的一系列 tasks ,可以让远 ...

  3. Ansible playbook

    一.Ansible playbook 简介和使用场景 1.简介 playbook 是 ansible 用于配置,部署,和管理被控节点的剧本. 通过 playbook 的详细描述,执行其中的一系列 ta ...

  4. ansible playbook详细教程(笔记)

    ctrl F  执行playbook命令   ansible ­playbook -­i "inventory文件名" playbook.yml ­f 10 (并行级别10) 加参 ...

  5. Seventh5: YAML syntax Ansible Playbook Ansible variables summaries and QQS | Cloud computing

    云计算专题目录 Catalogue | Cloud computing Seventh5: YAML syntax & Ansible Playbook & Ansible varia ...

  6. ansible——playbook剧本的讲解与应用

    目录 一.playbook  概述 1.1  playbook  介绍 1.2  Ansible playbook 使用场景 1.3 yaml基本语法规则 1.4 yaml支持的数据结构 1.3  示 ...

  7. 37: sudo提权 、 Ansible配置 、 Ansible Playbook 、 Ansible进阶 、 总结和答疑

    Top NSD AUTOMATION DAY02 案例1:配置sudo权限 案例2:修改Ansible配置 案例3:Playbook应用案例 案例4:Playbook应用案例 1 案例1:配置sudo ...

  8. CHAPTER 5 Ansible playbook(二)

    ansible-playbook 5.1 任务控制 5.1.1 Ansible任务控制基本介绍 5.1.2 条件判断(when) 5.1.3 循环控制(with_items) 5.1.3.1 标准lo ...

  9. 自动化运维工具-----Ansible playbook详解

    目录 一.Ansible playbook简介 二.Ansible playbook使用场景 三.Ansible playbook格式 格式简介 核心元素 基本组件 variables变量 模板tem ...

  10. ansible playbook的使用

    一.playbook的使用 1.ansible的playbook与临时命令 ​ 临时命令可以对一组目标主机进行一项简单的任务.要发挥ansible的真正力量,还需要了解如何使用playbook轻松的对 ...

最新文章

  1. Java线程---休眠问题来看并发执行
  2. 使用SecureCRT设置linux系统登录的ssh公钥认证
  3. Linux环境下使用dosemu写汇编
  4. caffe特征提取/C++数据格式转换
  5. 我的世界服务器拔刀修复,我的世界拔刀剑怎么修复
  6. Linux开机启动过程(2):内核启动的第一步
  7. mysql数据库管理指导_mysql学习笔记一(数据库管理控制)
  8. python和matlab矩阵运算效率_如何写出比 MATLAB 更快的矩阵运算程序?
  9. html算命源码,index.html
  10. java 嗅探器_网页资源嗅探器(ESFSoft URL Sniffer)
  11. Xp3下VMWare中Ubuntu12.04 联网
  12. WiFi各协议理论速度计算
  13. 电子计算机与媒体阅读答案,电子计算机与多媒体课课练.docx
  14. Oracle官网下载各版本JDK+查看各版本的API文档
  15. 一朵花的组成结构图_请问一朵完整的花由哪几部分组成
  16. html5 pc端 客户端 web端的区别,wap版、手机版以及web的区别
  17. ubuntu安装pr_[原创]Dapr入门教程之二:Dapr的安装
  18. ENVI5.3安装或卸载时提示错误1628代码
  19. PyQt开发实战: 利用QToolBox开发的桌面工具箱
  20. SDUST 实验+ 作业

热门文章

  1. 链表的代码实现【数据结构F】
  2. CSDN写博客(字体颜色、大小)
  3. 算法入门篇八 贪心算法
  4. Android设计模式之——模板方法模式
  5. 中国历史上影响最大的10首诗
  6. x264函数调用关系图
  7. Vue.js 极简小例:读值、样式调用、if判断、a 标签、点击事件、管道
  8. docker build Dockfile ---- RUN 中 cd 切换路径失败 的原因、解决
  9. Docker 概念解析
  10. 日期格式不符合要求:Unparseable date: quot;3e8a4d83533744c698216535a65850c0quot;