Ansbile-playbook是一个系统的可翻译命令的集合,用yaml语言编写并运行。ansbile-playbook命令从上到下依次执行。与此同时,playbook还创建了许多功能,允许您将命令的状态转换为以下指令。例如,您可以从一台机器的文件中获取内容并将其作为变量附加,然后在另一台机器中使用它,这使您能够实现一些复杂的部署机制,而ansible命令无法实现这些机制。
playbook由ansible-playbook命令使用,其参数类似ansible命令,如-k(–ask-pass)和-k(–ask-sudo)询问ssh密码和sudo密码,-u指定用户,这些指令也可以通过指定的单元写入playbook。使用ansible-playbook的简单方法:ansible-playbook示例-play.yml。
首先,一个简单的例子
下面是一个简单的可翻译的剧本例子来理解它的组成。
# cat user.yml
-名称:createuser
主机:所有
用户:root
收集事实:错误
vars:
-用户:“测试”
任务:
-名称:createuser
用户:name= "{{ user }} "
上述行动手册实现的功能是添加新用户:
name参数给出了playbook实现的函数的概述,name变量值会在后面的执行过程中打印出来;
hosts参数指定要参与的主机;
用户参数指定哪个用户用于登录远程主机;
collect _ facts参数指定在部分执行以下任务之前是否执行设置模块以获取主机相关信息,当设置模块获取的信息将被以下任务使用时,将使用该参数;
Vars参数指定了一个变量,这里指的是一个用户变量,它的值是test。应该注意的是,变量值必须被引用;
Task指定一个任务,它下面的name参数也是任务的描述,在执行的时候会打印出来。用户调用用户模块,名称是用户模块中的一个参数,添加的用户名调用上述用户变量的值。具体实施结果如下:
[root @ 361 way playbooks]# ansi ble-playbook user . yml
PLAY[create user]* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
任务:[创建用户]* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
已更改:[10.212.52.252]
已更改:[10.212.52.14]
已更改:[10.212.52.16]
播放摘要* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
10.212.52.14 : ok=1已更改=1不可访问=0失败=0
10.212.52.16 : ok=1已更改=1不可访问=0失败=0
10.212.52.252 : ok=1已更改=1不可访问=0失败=0
同样,如果您想删除该新用户,只需用以下行替换剧本文件的最后一行,然后执行相应的剧本:
用户:name = " { { user } } " state = note remove = yes
第二,一键修复bash shellcode示例
然后给出了一个稍微复杂一点的例子,其中bash shellcode的漏洞可以通过ansible-playbook同时为N个主机打补丁。应该注意的是,在现有的网络主机中可能分布着不同的系统版本。这里假设现有网络同时有centos5和6个版本,具体剧本内容如下:
# cat update_bash.yml
-主持人:所有
远程用户:root
收集事实:正确
任务:
-名称:updatebash inredhat 6version
yum:name = http://mirrors.aliyun.com/centos/ 6.6/OS/x86 _ 64/Packages/bash-4 . 1 . 2-29 . el6 . x86 _ 64 . rpm . rpm状态= present
when:ansi ble _ OS _ family = = " RedHat " and able _ distribution _ version | int & gt;= 6
-名称:updatebash inredhat 5version
yum:name = http://mirrors.hustunique.com/centos/ 5/updates/x86 _ 64/RPMS/bash-3.2-33 . el5 . 1 . x86 _ 64 . rpm state = present
when:ansi ble _ OS _ family = = " RedHat " and able _ distribution _ version | int & lt;= 5
上面使用了when语句,同时也启动了collect _ facts设置模块。这里的ansible_os_family变量和ansible_distribution_version变量是由直接使用的设置模块获得的信息。
如果主机数量较多,运行时只需添加-f,选择合适数量的并发主机即可。我在这里使用这个,快速升级bash。
第三,剧本的构成
剧本是由一个或多个“剧本”组成的列表。游戏的主要功能是将预先分组的主持人打扮成任务中预先定义的角色。从根本上说,所谓的任务无非是调用一个ansible的模块。在一个剧本里组织多个剧本,可以让他们按照预先安排好的机制联合起来唱一个大戏。它主要由以下四个部分组成
行动手册的组成:
Target section: 定义将要执行 playbook 的远程主机组Variable section: 定义 playbook 运行时需要使用的变量Task section: 定义将要在远程主机上执行的任务列表Handler section: 定义 task 执行完成以后需要调用的任务有五个相应的目录层,如下所示:
一般需要的目录层有:(可根据情况更改)
vars 变量层tasks 任务层handlers 触发条件files 文件template 模板以下描述剧本的四层结构。
1.主机和用户
剧本中每出戏的目的都是让一个或几个主持人以指定用户的身份执行任务。
主机用于指定执行指定任务的主机。它可以是一个或多个用冒号分隔的主机组。
Remote_user用于指定在远程主机上执行任务的用户。
但是,remote_user也可以用于每个任务。您还可以通过指定远程主机为sudo来执行任务,sudo可用于播放全局或任务。
此外,您甚至可以在sudo期间使用sudo_user来指定sudo期间要切换的用户。
示例:
-主机:webnodes
任务:
-名称:测试ping连接:
remote_user: test
苏多:是的
2.任务列表和操作
游戏的主要部分是任务列表。
任务列表中的每个任务在主机中指定的所有主机上依次执行,即第一个任务在第二个任务开始之前在所有主机上完成。如果在从下到上运行一个剧本的过程中出现错误,所有执行的任务都会回滚,所以纠正剧本后再执行就足够了。
任务的目的是执行带有指定参数的模块,模块参数中可以使用变量。模块执行是幂等的,这意味着多次执行是安全的,因为结果是一致的。每个任务都要有名字,用来输出剧本的执行结果。建议其内容尽可能清晰地描述任务执行步骤。如果没有提供名称,操作的结果将用于输出。
定义任务的格式可以使用“动作:模块选项”或“模块:选项”,为了向后兼容,建议使用后者。如果动作行内容太多,也用来在行首换行几个空白字。
任务:
-名称:确保apache正在运行
服务:名称=httpd状态=正在运行
在许多模块中,只有命令和外壳模块只需要给出一个列表而不使用“key=value”格式,例如,
任务:
-名称:禁用selinux
命令:/sbin/setenforce 0如果命令或脚本的退出代码不为零,可以用以下方法替换
任务:
- name:运行此命令并忽略结果
shell:/usr/bin/some command | |/bin/true
或者使用ignore_errors忽略错误消息
任务:
- name:运行此命令并忽略结果
shell: /usr/bin/somecommand
忽略错误:真
3、经手人
用于在相关资源发生变化时采取某些措施。
“notify”的动作可以在每次播放结束时触发,这样可以避免每次修改较多时都执行指定的操作,而不是在所有修改完成后才执行一次指定的操作。
notify中列出的操作称为处理程序,即处理程序中定义的操作在notify中调用。
注意:notify中定义的内容必须与tasks中定义的-name内容相同,才能达到触发效果,否则不会生效。
-名称:模板配置文件
template:src = template . J2 dest =/etc/foo . conf
通知:
-重新启动memcached
-重启apache
处理程序是一个任务列表。这些任务与前述任务没有本质上的不同。
处理程序:
-名称:重新启动memcached
服务:name = memcached state =已重新启动
-名称:重启apache
服务:名称=apache状态=重新启动
4、标签
标签用于让用户选择运行或跳过剧本中的一些代码。Ansible是幂等的,所以会自动跳过不变的部分。即便如此,有些代码要经过非常长的时间才能测试出它们没有改变。
此时,如果您确定它没有改变,您可以通过标记跳过这些代码片段。
5.例子
下面是安装httpd web服务的另一个示例:
# cat/etc/ansi ble/playbook/install _ web . yml
-主机:网络服务器
远程用户:root
聚集_fasks: False
vars:
包:httpd
任务:
-名称:Installhttpd
yum:name = { { packages } } state = present
-名称:Cofiguration httpd
副本:src =/root/httpd . conf dest =/etc/httpd/conf/httpd . conf
标签:httpd_conf
通知:
-重启httpd
-名称:Starthttpd
服务:name = httpd state = started enabled = no
标签:开始
-名称:Addcentos用户
用户:名称={{ item }}状态=缺席
标签:adduser
with_items:
centos
-管理员
处理程序:
-名称:重新启动httpd
服务:名称=httpd状态=重新启动
注意:以上代码没有考虑ubuntu平台,只考虑centos/redhat平台。
1.《playbook ansible用法之ansible-playbook简单使用》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《playbook ansible用法之ansible-playbook简单使用》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/tiyu/1442047.html