Ansible的Playbook使用YAML编写,YAML的语法规则如下:
- YAML文件中的第一行为“---”,表示这是一个YAML文件;
- YAML中的字段大小写敏感;
- YAML与Python一样,使用缩进表示层级关系;
- YAML的缩进不允许使用Tab键,只允许使用空格,且空格的数目不重要,只要相同层级的元素左侧对齐即可;
- “#”表示注释,从这个字符一直到行尾都会被解析器忽略。
YAML支持三种格式的数据,分别是:
- 对象:键值对的集合,又称为映射,类似于Python中的字典;
- 数组:一组按次序排列的值,又称为序列(sequence),类似于Python中的列表;
- 纯量(scalars):单个的、不可再分的值,如字符串、布尔值与数字。
Playbook示例一:
针对centos6系统安装mysql-server,使用shell模块启动mysql服务;
centos7系统安装mariadb-server,使用yum模块启动mariadb服务;
--- - hosts: web # gather_facts: True tasks: - name: install mariadb in centos7 yum: name=mariadb-server state=present when: ansible_distribution_major_version == "7" - name: start mariadb in centos7 service: name=mariadb state=started enabled=yes when: ansible_distribution_major_version == "7" - name: install mysql in centos6 yum: name=mysql-server state=present when: ansible_distribution_major_version == "6" - name: start mysql-server in centos6 shell: /etc/init.d/mysqld start when: ansible_distribution_major_version == "6" |
- hosts: 需要对哪些远程服务器执行操作(此处为默认inventory hosts文件/etc/ansible/hosts定义的主机组web,含两台机器,一台centos7,一台centos6)
- tasks: 需要在这些服务器上执行的任务列表
- name: 下面执行的操作任务名称(自定义),playbook执行时显示
- yum: 调用yum模块执行任务,name为服务名称,state为软件包状态,present为安装此软件包
- when: 为判断条件,判断主机系统是否为6或7系统,ansible_distribution_major_version为ansible内部变量,直接使用,具体内部有哪些变量可执行ansible web -m setup来查看输出信息
- service: 调用service模块执行任务,name为服务名称,state为服务状态,started为启动此服务,enabled为yes代表开机自启
- shell: 调用shell模块执行此任务,后接shell命令即可