一、YAML语言
Ansible Palybook的编写是基于YAML语言的。YAML语言,即Yet Another Markup Language,是一种能被计算机直接识别的标记语言,同时也方便人的阅读,且方便和脚本语言交互。但是,YAML的配置即为严格,在配置时必须注重空格的数量。
总的来看,YAML语言特性如下:
- .可读性强
- 和脚本语言的交互性好
- 使用实现语言的数据类型
- 一致的信息模型
- 易于实现
- 可以基于流来处理
- 可扩展性强
二、Playbook组件
Ansible的Playbook有以下组件:
- Target:定义playbook的远程主机组,即被控制端设备。
- Variable:定义Playbook所使用的变量。
- Task:定义Playbook控制下游设备要执行的命令。
- Handler:定义在Palybook在Task执行完毕后要调用的任务。
三、组件参数
1、Target常用参数
- hosts:定义Ansible用户控制的下游设备
- remote_user:定义执行Ansible设置的用户
- sudo:设置为yes时,执行任务时使用root权限
- sudo_user:指定sudo的普通用户
- connection:默认基于ssh链接客户端
- gather_facts:获取远程主机facts基础信息
2、Variable常用参数
- vars:定义变量
- vars_files:指定变量文件
- vars_prompt:用户交互模式自定义变量
- setup:通过远程gather_facts获取的信息
3、Task常用参数
- name:任务的名称,在Ansible运行的过程中起到提示的作用,会打印在屏幕上
- action:Ansible控制下游设备的命令,通过Ansible的各个模块来进行控制
- template:Ansible控制下游设备的模板
- handler:定义一个调用,该调用在Handler处被定义,在所有的Task结束后被执行
4、简单示例
- 编辑csdn.yml,该playbook主要用于centos通过yum安装httpd并且启动httpd服务。
---
- hosts: user_passwd
remote_user: root
tasks:
- name: Install Httpd by YUM
yum: name=httpd state=installed
- name: Start Httpd
service: name=httpd state=started
- 格式说明
- 行号1:开头用三个短杠,这是Ansible Playbook的标准开头格式。
- 行号2:以一个短杠开头,后面跟一个空格。这个空格有且仅有一个。hosts参数后面紧跟着的是一个因为冒号,冒号后面也必须跟一个空格。这个空格和刚才相同,有且仅有一个。冒号后面接Ansible控制的主机。
- 行号3:remote_user,这个参数要和hosts严格对齐! 否则,Ansible也会报错。后面的tasks任务和name前面的短杠也要对齐。
- 执行ansible-playbook csdn.yml:
四、变量
1、变量示例
---
- hosts: user_passwd
remote_user: root
tasks:
- name: Install Httpd by YUM
yum: name={{ csdn }} state=installed
变量格式:
- 使用两个大括号括起来。
- 变量名两边都有一个空格。
2、赋值方式
- 命令调用赋值:使用-e参数进行变量赋值,将httpd值赋给playbook中的csdn。
- 在hosts文件中定义变量
查看hosts文件:
[user_passwd]
10.10.192.21
[user_passwd:vars]
csdn=httpd
3. playbook中定义变量
---
- hosts: user_passwd
vars:
csdn: httpd
remote_user: root
tasks:
- name: Install Httpd by YUM
yum: name={{ csdn }} state=installed
4. setup模块获取变量
在每次playbook的执行过程中都可以看到gathering facts的过程,这是ansible收集被控端信息的过程,ansible把被控端的一些信息收集到本地,并且以变量的形式进行保存,在编写playbook中就可以使用这些变量。
查看通过gathering facts获取的变量信息:
执行ansible -m setup,内容很多,仅截取部分:
示例:
---
- hosts: user_passwd
remote_user: root
tasks:
- name: Display vars in setup
file: name=/root/{{ ansible_all_ipv4_addresses }} state=touch
查看创建的文件信息:
5. 独立的变量文件
将变量存储成独立的变量文件,创建一个以yml结尾的变量文件,var.yml,内容如下:
csdn: httpd
修改csdn.yml:
---
- hosts: user_passwd
remote_user: root
vars_files:
- ./inventory/var.yml
tasks:
- name: Yum install
yum: name={{ csdn }} state=installed
执行结果: