playbook使用空格进行缩进,来表示数据结构,空格的数量没有严格要求
play主要由三个键值组成: name hosts tasks
name:自定义描述信息 (可以不写但要注意格式)
hosts:指定在哪些主机上运行play
tasks:定义该play要执行哪些任务
简单的playbook格式如下:
当一个playbook写完后不要急着执行:
1 检测下语法是否正常
# ansible-playbook --help | grep syntax
# ansible-playbook --syntax-check xxx.yml
2 空运行(没有在控制主机上运行playbook)
# ansible-playbook --help | grep check
# ansible-playbook -C xxx.yml -C == --check
3 执行playbook
# ansible-playbook xxx.yml
显示任务执行的过程和执行时所需的配置和清单文件
# ansible-playbook xxxyml -vv (会显示详细的信息,当执行playbook报错误时加上-vv查看详细进行判断)
二 管理变量 %%
命名变量:变量要以字母开头,包含字母数字下划线等
定义变量:
1 全局范围:从命令行或ansible主配置文件中定义变量
2 play范围:在playbook中定义变量
3 主机范围:清单文件
注:如果在多个级别定义了相同名称的变量,则采用优先级最高的变量
清单定义的变量将被playbook定义的变量覆盖,后者将被命令行中定义的变量覆盖
在playbook中定义变量 (playbook中定义变量都是:)
方式一: 将变量放在playbook开头的vars块中
- hosts: all
vars:
user: job
home: /home/job
方式二:使用外部文件中定义playbook变量vars_files
- hosts: all
vars_files:
- vars/users.yml
#在users.yml中已经定义的变量
user: job
home: /home/job
在playbook中使用变量
引用变量可将变量名称放在花括号"{{ }}"内,ansible会将变量替换为其值
vars:
user: job
tasks:
- name: create the user {{ user }}
user:
name: "{{ user }}"
清单中的变量 (清单中定义的变量都是= )
# 定义demo.example.com的ansible_user主机变量 demo.example.com ansible_user=job demo.example.com ansible_ssh_pass=Admin123 # 定义servers 主机组的user组变量 [servers] demo1.example.com demo2.example.com [servers:vars] user=job
# 主机组嵌套引用变量
[servers:children]
production
backup
[servers:vars]
ansible_user=job
注: 以上写法不推荐,推荐用下面的写法
使用目录填充主机或主机组变量
host_vars
group_vars
创建 host_vars/${主机名}
$ cat host_vars/demo1.example.com
user: job
package: httpd
创建 host_vars/${组名}
$ cat group_vars/backup
user: natasha
从命令行覆盖变量
命令变量优先级最高 ---> playbook ---> 全局变量(ansible.cfg)
使用注册变量捕获命令输出
debug: 调试模块
常用参数:
msg: 调试输出消息
var: 把变量值显示出来
LAB:安装apache并配置好firewalld (用变量)
--- - name: Deplay and start Apache HTTPD service hosts: webserver vars: web_pkg: httpd firewall_pkg: firewalld web_service: httpd firewall_service: firewalld rule: http tasks: - name: install packages yum: name: - "{{ web_pkg }}" - "{{ firewall_pkg }}" state: latest - name: start service httpd service: name: "{{ web_service }}" state: started
- name: start service firewalld
service:
name: "{{ firewall_service }}"
state: started
- name: the firewall port for http is open
firewalld:
service: "{{ rule }}"
permanent: yes
immediate: yes #立即生效
state: enabled
service+loop 实现循环
加密 解密 查看 变量文件(管理机密) %%
创建加密文件
ansible-vault
vault-pass 首先将密码写进去
编辑现有的加密文件
加密现有文件
更改加密文件的密码
解密 文件
ansible 2.4之前:
ansible-playbook --ask-vault-pass package.yml
ansible 2.4之后:
ansible-playbook --vault-id @密码文件 package.yml
注: 用于加密一些敏感信息如密码文件等,然后通过 变量调区文件中的内容