ansible playbooks 是使用ansible简单的配置管理部署系统的基础,使用YAML语法格式的配置文件。每一个playbook中包含一系列的任务。使用ansible playbook可以更方便的管理、维护多态主机。
1、yaml语法
yaml是”YAML Ain't a Markup Language”的缩写,即不是一种标记性语言,它是一种直观的能够被电脑识别的数据序列化格式,是一个可读性高并且容易被人类阅读,容易和脚本语言交互,用来表达资料序列的编程语言。
yaml编写playbook配置文件的规范:
(1)首行以”---”(3个减号)开始,且需顶行首写。
(2)使用#号注释代码。
(3)缩进必须是统一的,不能空格和tab混用
(4)缩进的级别也必须是一致的,同样的缩进代表同样的级别,程序判别配置的级别是通过缩进结合换行来实现的。
(5)YAML文件内容和Linux系统大小写判断方式保持一致,是区别大小写的,k/v的值均需大小写敏感。
(6)k/v的值可同行写也可换行写。同行使用:分隔,换行写需要以”-”分隔。
(7)一个完整的代码块功能需最少元素需包括 name: task。
(8)一个name只能包括一个task
设置设置在.yml文件中Tab键为两个空格
[ansible@server1 ~]$ vim .vimrc
[ansible@server1 ~]$ cat .vimrc
autocmd filetype yaml setlocal ai ts=2 sw=2 et
(1)Playbook的主要组成元素
Hosts: 运行指定任务的目标主机,可以是主机,也可以是主机组,支持正则表达式。
Tasks: 任务列表,一个playbook配置文件中只能有一个tasks,一个tasks下可以编排多个任务。
Varniables: 变量
Templates: 模板,使用templates可以针对不同的主机定制不同参数。
Handlers: 由特定条件触发的任务,监控资源改变时才会触发,需要配合notify使用。
Roles: Playbook的按固定目录结构组成
(2)执行playbook
playbook执行时使用”ansible-playbook”命令后跟写好的yaml格式的playbook文件即可,
但在执行前最好检查下playbook文件语法是否正确 -C
(3)playbook在执行时还可以跟其他的一些选项:
1)指定执行的主机或主机组:
playbook在执行时默认会在据配置文件在”hosts”中定义的主机及主机组上去执行,如果不想在配置文件中指定的主机上去执行,可以使用”--limit”指定主机。
2)指定执行playbook的用户
playbook在执行时默认会使用配置文件中”remote_user”指定的用户去执行,如果想使用别的用户去执行,可以使用参数”--remote-user”指定用户去执行。如果使用参数指定的用户没有做ssh安全认证,则可以使用参数”--ask-sudo-pass”在执行命令时根据提示输入密码即可正常执行。
3)执行playbook时传入变量
执行playbook时,如果在”hosts”配置文件中及playbook中定义了变量并在执行时参入变量,则优先使用执行时用参数传入的变量,其次使用playbook中的变量,最后使用”inventory”文件中定义的变量。
在执行playbook时可以使用”-e”选项后跟”key1=value1,key2=value2”的方式传入变量。
)其他可使用的选项
-i(--inventory=PATH):指定inventory文件,默认文件是/etc/ansible/hosts
-v(--verbose):显示详细的输出,也可使用-vvvv显示精确到每分钟的输出
-f(--forks=NUM):指定并发执行的任务数,默认为5,可根据服务器的性能进行调节
-C(--check):检测模式,playbook中定义的所有任务将在每台远程主机上进行检测,但不执行。
使用ansible playbook安装启动httpd服务
编写playbook.yml文件
---
- hosts: db
tasks:
- name: install httpd
yum:
name: httpd
state: present
- name: copy index.html
copy:
src: files/index.html
dest: /var/www/html/index.html
- name: configure httpd
copy:
src: files/httpd.conf
dest: /etc/httpd/conf/httpd.conf
owner: root
group: root
mode: 644
notify: restart httpd
- name: start httpd and firewalld
service:
name: "{{ item }}"
state: started
loop:
- httpd
- firewalld
- name: configure firewalld
firewalld:
service: httpd
permanent: yes
immediate: yes
state: enabled
handlers:
- name: restart httpd
service:
name: httpd
state: restarted
复制httpd配置文件模板
写入发布页面
检测文件 并 运行
server3服务开启
80端口开启
修改files中的配置文件模板端口
重新运行后,server3 端口变为8080