1、playbook与ad-hoc相比,是一种完全不同的运用。
2、playbook是一种简单的配置管理系统与多机器部署系统的基础,且非常适合于复杂应用的部署。
3、playbook是一种简单的配置管理系统与多机器部署系统的基础,且非常适合于复杂应用的部署。
4、使用playbook可以方便的重用这些代码,可以移植到不同的机器上面,playbook才是ansible真正强大之处。
playbook由YMAL语言编写
YAML文件的格式:
1、文件的第一行应该以“---"
三个连字符开始,表明YMAL文件的开始
2、在同一行中,#
之后的内容表示注释,类似于shell,python
3、YMAL中的列表元素以”-”
开头然后紧跟着一个空格,同一个列表中的元素应该保持相同的缩进
例如:
---
# 一个美味水果的列表
- Apple
- Orange
- Mango
4、一个字典是由一个简单的 键: 值
的形式组成(这个冒号后面必须是一个空格)
例如:
---
# 一个职工的记录
name: Example Developer
job: Developer
skill: Elite
5、字典也可以使用缩进形式来表示
例如:
---
# 一个职工的记录
{name:Example Developer,job: Developer, skill: Elite}
name |
可选,建议使用,多用于说明 |
hosts |
受控主机列表 |
tasks |
任务,用于选择执行部分代码 |
1、主机与用户
---
- hosts: server2 //指定主机组,可以是一个或多个组,用逗号分隔
remote_user: root //指定远程主机执行的用户名
become: yes //切换用户运行
become_user: mysql //指定sudo用户为mysql
2、tasks列表
(1)play的主体部分是task列表,task列表中的各任务按次序逐个在hosts中指定的主机上执行,即在所有主机上完成第一个任务后再开始第二个任务。如果一个host执行task失败,整个tasks都会回滚。
(2)每一个task必须有一个名称name,这样在运行playbook时,从其输出的任务执行信息中可以很好的辨别出是属于哪一个task的。
tasks:
- name: install apache //定义任务名
(3)定义一个task,常见的格式:”module: options”
例如:
tasks:
- name: install apache
yum: name=httpd state=present
也可以写成以下格式(一般推荐这一种):
tasks:
- name: "启动apache服务"
service:
name: httpd
state: started
3、ansible的自带模块中,command
模块和shell
模块无需使用key=value
格式
tasks:
- name: disable selinux
command: /sbin/setenforce 0
使用 command
和 shell
时,我们需要关心返回码信息
tasks:
- name: run this command and ignore the result
shell: /usr/bin/somecommand
ignore_errors: True //返回值如果不为0,就会报错,tasks停止
ansible-playbook ... xxx.yml
--check|-C |
检测(预演) |
--syntax-check |
检测语法正确性 |
--list-hosts |
列出hosts |
--list-tags |
列出tag(标签) |
--list-tasks |
列出task(任务) |
--limit |
指定执行主机 |
-v -vv |
显示实现过程 |
YAML文件有严格的缩进,为编写方便,设定vim
vim ~/.vimrc
autocmd FileType yaml setlocal ai ts=2 sw=2 et
setlocal |
设定当前文件 |
ai |
自动退格对齐auto indent |
ts |
tab 键长度为2空格 tabstop=2 |
sw |
缩进长度为2 shiftwidth=2 |
et |
把tab 键变成空格 expandtab |
1、编写playbook实现远程主机apache的安装和自启动:
vim test.yml
---
- name: testplaybook
hosts: demo
tasks:
- name: install apache
yum:
name: httpd
state: present
- name: start apache
service:
name: httpd
state: started
enabled: yes
ansible-playbook --syntax-check test.yml ##语法检测
ansible-playbook -C test.yml ##检测
ansible-playbook test.yml ##执行
1、复制远程主机的httpd
配置文件到ansible目录,修改默认端口为8080
scp server2:/etc/httpd/conf/httpd.conf httpd.conf
vim httpd.conf
42 Listen 8080
2、编写playbook,为远程主机的apache编写发布文件,并修改端口为8080
vim test.yml
---
- name: testplaybook
hosts: demo
tasks:
- name: install apache
yum:
name: httpd
state: present
- name: start apache
service:
name: httpd
state: started
enabled: yes
- name: index.html ##编写发布文件
lineinfile:
path: /var/www/html/index.html
line: abcdefgh
create: yes
- name: httpd.conf ##修改配置文件
copy:
src: httpd.conf
dest: /etc/httpd/conf/httpd.conf
notify: restart apache ##与handlers对应
handlers:
- name: restart apache
service:
name: httpd
state: restarted
ansible-playbook --syntax-check test.yml
ansible-playbook test.yml
curl 172.25.36.2:8080
注:如要其他主机可以访问,需要设定server2
主机的firewalld
允许访问8080端口,添加到playbook中即可。
模块使用参考https://blog.csdn.net/S_K15/article/details/121116467?spm=1001.2014.3001.5502#t13