自动化运维工具ansible Playbook介绍

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化运维工具ansible Playbook介绍相关的知识,希望对你有一定的参考价值。

一.playbook介绍
playbook是由一个或多个"play"组成的列表。play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上来讲所谓task无非是调用ansible的一个module。将多个play组织在一个playbook中即可以让它们联同起来按事先编排的机制同唱一台大戏。其主要有以下四部分构成:

playbooks组成:
Target section: 定义将要执行 playbook 的远程主机组
Variable section: 定义 playbook 运行时需要使用的变量
Task section: 定义将要在远程主机上执行的任务列表
Handler section: 定义 task 执行完成以后需要调用的任务
而其对应的目录层为五个,如下:

一般所需的目录层有:(视情况可变化)
vars 变量层
tasks 任务层
handlers 触发条件
files 文件
template 模板

二.每一部分介绍
1.Hosts和Users
playbook中的每一个play的目的都是为了让某个或某些主机以某个指定的用户身份执行任务。

hosts:用于指定要执行指定任务的主机其可以是一个或多个由冒号分隔主机组。

remote_user :用于指定远程主机上的执行任务的用户。不过remote_user也可用于各task中。也可以通过指定其通过sudo的方式在远程主机上执行任务其可用于play全局或某任务。此外甚至可以在sudo时使用sudo_user指定sudo时切换的用户。

user:于remote_user相同

sudo:如果设置为yes,执行该任务组的用户在执行任务的时候,获取root权限

sudo_user:如果设置user为breeze,sudo为yes,sudo_user为bernie时,则breeze用户在执行任务时会获得bernie用户的权限

connection:通过什么方式连接到远程主机,默认为ssh

gather_facts:除非明确说明不需要在远程主机上执行setup模块,否则默认自动执行。如果确实不需要setup模块传递过来的变量,则可以将该选项设置为False

2.变量模块
vars

  • 名称:‘值‘
    vars_file

vars_prompt

3.任务列表和action
play的主体部分是任务列表。

任务列表中的各任务按次序逐个在hosts中指定的所有主机上执行即在所有主机上完成第一个任务后再开始第二个。在自上而下运行某playbook时如果中途发生错误,所有已执行任务都将回滚因此在更正playbook后重新执行一次即可。 

task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量。模块执行是幂等的,这意味着多次执行是安全的,因为其结果均一致。每个task都应该有其name用于            playbook的执行结果输出,建议其内容尽可能清晰地描述任务执行步骤。如果未提供name则action的结果将用于输出。 

定义task的可以使用"action: module options"或"module: options"的格式,推荐使用后者以实现向后兼容。如果action一行的内容过多也可使用在行首使用几个空白字符进行换行。

4.handlers
用于当关注的资源发生变化时采取一定的操作。
"notify"这个action可用于在每个play的最后被触发,这样可以避免多次有改变发生时每次都执行指定的操作,取而代之仅在所有的变化发生完成后一次性地执行指定操作。
在notify中列出的操作称为handler也即notify中调用handler中定义的操作。

注意:在notify中定义内容一定要和tasks中定义的 - name 内容一样,这样才能达到触发的效果,否则会不生效。

三.Playbook常用模块
1.template
在实际应用中,我们的配置文件有些地方可能会根据远程主机的配置的不同而有稍许的不同,template可以使用变量来接收远程主机上setup收集到的facts信息,针对不同配置的主机,定制配置文件。用法大致与copy模块相同。

常用参数:

backup:如果原目标文件存在,则先备份目标文件

dest:目标文件路径

force:是否强制覆盖,默认为yes

group:目标文件属组

mode:目标文件的权限

owner:目标文件属主

src:源模板文件路径

validate:在复制之前通过命令验证目标文件,如果验证通过则复制

以下例子区分template和copy的区别

技术分享图片

以dns配置文件为例,配置文件中有很多变量

[[email protected] ansible]# cd test/
[[email protected] test]# ls
files template.retry template.yml
[[email protected] test]# vim files/named.conf.j2

options {

listen-on port 53 {

127.0.0.1;

{% for ip in ansible_all_ipv4_addresses %}

{{ ip }};

{% endfor %}

};

listen-on-v6 port 53 { ::1; };

directory "/var/named";

dump-file "/var/named/data/cache_dump.db";

statistics-file "/var/named/data/named_stats.txt";

memstatistics-file "/var/named/data/named_mem_stats.txt";

};

zone "." IN {

type hint;

file "named.ca";

};

include "/etc/named.rfc1912.zones";

include "/etc/named.root.key";

{# Variables for zone config #}

{% if ‘authorativenames‘ in group_names %}

{% set zone_type = ‘master‘ %}

{% set zone_dir = ‘data‘ %}

{% else %}

{% set zone_type = ‘slave‘ %}

{% set zone_dir = ‘slaves‘ %}

Playbook文件,传一份template任务文件和copy任务文件
[[email protected] test]# ls
files template.retry template.yml
[[email protected] test]# vim template.yml
[[email protected] test]# cat template.yml

  • hosts: web_nginx

    tasks:

    • template: src=files/named.conf.j2 dest=/etc/named.conf
    • copy: src=files/named.conf.j2 dest=/etc/named.conf2

执行
[[email protected] test]# ansible-playbook template.yml
查看两种模块传过来的文件
技术分享图片

技术分享图片

可以看出template将变量已经替换,copy原封不动的把文件复制过来
其中的变量由setup模块取出来的

以上是关于自动化运维工具ansible Playbook介绍的主要内容,如果未能解决你的问题,请参考以下文章

ansible自动运维工具之ansible-playbook详解

自动化运维工具 Ansible ——playbook 剧本详解及简易案例

自动化运维工具Ansible-playbook详解和案例实战

自动化运维管理工具 Ansible的详细解读之inventory 主机清单和playbook剧本

自动化运维-Ansible (第三部:Playbook 介绍)

自动化运维工具ansible 角色Roles介绍