一、ansible-doc的局限
每次只能在被管理节点上执行简单的命令。
日常工作中,我们往往面临的是一系列的复杂操作,例如我们有可能需要安装软件、更新配置、启动服务等等一系列操作的结合。
在这种场景下,Ansible引进了 、PLAYBOOK 来帮忙我们解决这样复杂问题。
二、Playbook简介
playbook是ansible用于配置、部署和管理托管主机剧本,通过playbook的详细描述,执行其中的一些列tasks,可以让远端主机达到预期状态
Playbook 也通常被大家翻译成剧本。
可以认为它是Ansible 自定义的一门语言(可以将 Playbook比作Linux中的 shell,Ansible中的Module可以比作为 Linux 中的各种命令)
(1)playbook是对AD-Hoc的一种编排方式
(2)playbook可以持久运行,而AD-Hoc只能临时运行
(3)playbook适合复杂的任务,而AD-Hoc适合快速简单的任务
(4)playbook能控制任务执行的先后顺序
1、playbook语法格式yaml
playbook遵循yaml语法格式
(1)以#为注释符
(2)以.yml或.yaml结尾
(3)以---开始,以...结束,但是开头和结束符都是可选的
2、基本语法
(1)大小写敏感
(2)缩进 YAML使用固定的缩进风格表示层级结构,每个缩进由两个空格组成,不能使用tab
(3)冒号 以冒号结尾的除外,其他所有冒号后面所有必须有空格
(4)短横线 表示列表项,使用一个短横杠加一个空格,段哥项使用相同的缩进级别作为同一列表
3、playbook执行结果
使用ansible-playbook运行playbook文件,输出内容为json格式。由不通颜色组成便于识别
(1)绿色表示执行成功
(2)红色代表执行失败
(3)其他颜色表示系统状态发生改变
三、ansible-playbook案例
1、安装apache,端口为8080,默认主页hello world, 启动服务,设置开机自启
创建工作目录,配置主机清单
mkdir /project/apache -p
cat /project/apache/hosts
[webserver]
192.168.10.128
[dbserver]
192.168.10.130
[all:vars]
ansible_ssh_port=22
ansible_ssh_user=root
ansible_ssh_pass='123456'
配置playbook文件
cat apache.yaml
---
- hosts: webserver
remote_user: root
tasks:
- name: install the latest version of apache
yum:
name: httpd
state: latest
- lineinfile:
path: /etc/httpd/conf/httpd.conf
regexp: '^Listen '
insertafter: '^#Listen '
line: Listen 8080
- copy:
src: index.html
dest: /var/www/html/index.html
owner: apache
group: apache
mode: '0644'
- service:
name: httpd
state: started
enabled: yes
cat index.html
hello world
ansible-playbook apache.yaml -i hosts
2、给web主机添加用户l4,设置密码123
cat /project/apache/user.yaml
---
- hosts: webserver
remote_user: root
vars:
username: l4
tasks:
- name: create user "{{ username }}"
user:
name: "{{ username }}"
group: root
#password: "{{ '123'|password_hash( 'sha512' )}}"
- shell: echo 123|passwd --stdin "{{ username }}"
四、playbook语法检测
检测语法
ansible-playbook webserver --syntax-check myplaybook.yml -i hosts
如何每步跟从调试playbook
ansible-playbook webserver myplaybook.yml --step -i hosts
如何运行测试,会执行完整个playbook,但是所有Task的行为都不会在远程服务器伤执行,所有执行行为都是模拟行为
ansible-playbook webserver myplaybook.yml -i hosts -C
使用python检测yaml
python -c 'import yaml,sys; print yaml.safe_load(sys.stdin)' < myplaybook.yml