写点什么

Ansible Playbook - 02

用户头像
耳东
关注
发布于: 1 小时前

Playbook 任务列表

每个 Playbook 都包含一个任务列表,在继续执行下一个任务之前,与主机模式匹配的所有机器将按顺序一次执行一个任务。重要的是要理解,在一个剧本中,所有主机都将获得相同的任务指令。


当从上到下运行 playbook 时,带有失败任务的主机将从整个 playbook 的轮转中删除。如果失败,只需纠正 playbook 文件并重新运行。


每个任务的目标都是执行一个具有非常特定参数的模块。如上所述,变量可以用于模块的参数中。


模块应该是幂等的,也就是说,在一个序列中运行一个模块多次应该与只运行一次具有相同的效果。实现等幂性的一种方法是让模块检查其所需的最终状态是否已经实现,如果已经实现,则退出而不执行任何操作。如果 playbook 使用的所有模块都是幂等的,那么 playbook 本身很可能也是幂等的,因此重新运行 playbook 应该是安全的。


每个任务都应该有一个 name,它包含在运行 playbook 的输出中。这是一个人类可读的输出,因此提供每个任务步骤的良好描述非常有用。但是,如果没有提供名称,则将使用提供给action 的字符串作为输出。


任务可能使用一些旧的格式,action: module options,但是建议使用格式 module: options 。这种推荐格式在整个文档中都使用,但是您可能会在一些 Playbook 中遇到更旧的格式。


一个基本的格式就像这样,和大多数模块一样,service 模块也是 key=value 参数


tasks:  - name: make sure apache is running    service:      name: httpd      state: started
复制代码


commandshell 两个模块会取一些参数列表,而不是使用 key=value 参数,简单使用如下:


tasks:  - name: enable selinux    command: /sbin/setenforce 1
复制代码


commandshell 两个模块会关心返回码,所有如果你有一个命令执行成功的返回码不为零,那么你可以这样做。


tasks:  - name: run this command and ignore the result    shell: /usr/bin/somecommand || /bin/true
复制代码


或者这样


tasks:  - name: run this command and ignore the result    shell: /usr/bin/somecommand    ignore_errors: True
复制代码


如果 action 的行太长了,你可以用空格来打断他,并且在任何有缩进的地方继续


tasks:  - name: Copy ansible inventory file to client    copy: src=/etc/ansible/hosts dest=/etc/ansible/hosts            owner=root group=root mode=0644
复制代码


变量也可以被使用在 action 行,例如在下面的例子里定义了 vhost 这个变量


tasks:  - name: create a virtual host file for {{ vhost }}    template:      src: somefile.j2      dest: /etc/httpd/conf.d/{{ vhost }}
复制代码

Action

Ansible 更喜欢这样的格式


template:    src: templates/foo.j2    dest: /etc/foo.conf
复制代码


早期的版本是这样,现在也还可以工作,但是更推荐上一种。


action: template src=templates/foo.j2 dest=/etc/foo.conf
复制代码


发布于: 1 小时前阅读数: 3
用户头像

耳东

关注

还未添加个人签名 2020.05.24 加入

主要研究分享运维技术,专注于监控、CICD、操作系统、云原生领域,公众号【耳东学堂】,知识星球同名,坚持原创,希望能和大家在运维路上结伴而行 邮箱:erdong@mail.erdong.site

评论

发布
暂无评论
Ansible Playbook - 02