Ansible自动化运维之Playbook详解及体验(一)

playbook-介绍:

playbooks是 一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活。简单来说,playbook是一个非常简单的配置管理和多主机部署系统,不同于任何已经存在的模式,可作为一个适合部署复杂应用程序的基础。Playbook可以定制配置,可以按照指定的操作步骤有序执行,支持同步和异步方式。值得注意的是playbook是通过YAML格式来进行描述定义的。
Playbooks结构:

1.Tasks:任务,由模板定义的操作列表
2.Variables:变量
3.Templates:模板,即使用模板语法的文件
4.Handlers:处理器 ,当某条件满足时,触发执行的操作
5.Roles:角色

hosts和users介绍:

*  playbookd 的设计目的是为了让某个或某些主机以某个用户的身份去执行相应的任务。hosts一行可以是一个主机组、主机、多个主机,中间以冒号分隔,可使用通配模式。其中remote_user表示执行的用户账号。
* vim /opt/abc.yml
- hosts: webserver       #指定主机组,可以是一个或多个组。
  remote_user: root     #指定远程主机执行的用户名

Ansible自动化运维之Playbook详解及体验(一)

*  remote_user也可以定义指定用户通过sudo的方法在被管理主机上运行命令,甚至可以在使用sudo时用sudo_user指定sudo切换的用户。
*  vim /opt/sudo.yml 
    - hosts: webserver
    remote_user: root            
    become: yes                #2.6版本以后的参数,之前是sudo,意思为切换用户运行
    become_user: yang          #指定sudo用户为yang
*ansible-playbook sudo.yml -K      #执行playbook

Ansible自动化运维之Playbook详解及体验(一)
Tasks list任务列表 和action介绍:

  • play的主体部分是task list。task list中的各任务按次序逐个在hosts中指定的所有主机上执行,即在所有主机上完成第一个任务后再开始第二个。在运行自下而下某playbook时,如果中途发生错误,所有已执行任务都可能回滚,因此,在更正playbook后重新执行一次即可。(因为具有幂等性)
  • task的目的是使用指定的参数执行模块,而在模块参数中可以使用变量。模块执行是幂等的,这意味着多次执行是安全的,因为其结果均一致。
  • 每个task都应该有其name,用于playbook的执行结果输出,建议其内容尽可能清晰地描述任务执行步骤。如果未提供name,则action的结果将用于输出。
  • 定义task的可以使用“action: module options”(这个在较新版本上才能执行)或“module: options”的格式,推荐使用后者以实现向后兼容。如果action一行的内容过多,也可以使用在行首使用几个空白字符进行换行。
tasks:
- name: make sure apache is running
  service: name=httpd state=running
  • 在众多模块中,只有command和shell模块仅需要给定一个列表而无需使用“key=value”格式,例如:
tasks:
- name: disable selinux
  command: /sbin/setenforce 0
  • 如果命令或脚本的退出码不为0,可能会阻止playbook继续往下执行可以使用如下方式替代:
tasks:
- name: run this command and ignore the result
  shell: /usr/bin/somecommand || /bin/true
  • 也就是说这个命令失败也是要继续往下走的,就是失败了但不要影响下面的操作。或者使用ignore_errors来忽略错误信息:
tasks:
- name: run this command and ignore the result
  shell: /usr/bin/somecommand
  ignore_errors: True

猜你喜欢

转载自blog.51cto.com/13721050/2310755