ansible的模板template
在某些环境下可能会出现这种情况,比如主机A配置文件中的某个值为1,主机B配置文件中此值为2,现在需要将此值在现有的基础上再加上2,此时ansible的模板就发挥其作用了,template可以根据模块文件动态生成相对应的配置文件。
template的格式要求
template对文件的存放和命名有要求,template文件必须存放在templates目录下,并且以.j2后缀命名。
yaml文件需要和templates目录平级,目录结构如下。
1 2 3 4 5 6
| [root@ansible data] yaml/ ├── hello.yaml ├── httpd.yaml └── templates └── test.conf.j2
|
template的使用方法
准备环境
此处以nginx为例,编写playbook为主机列表中的主机安装nginx
1 2 3 4 5 6 7 8 9 10 11
| [root@ansible ~] ---
- hosts: webserver remote_user: root
tasks: - name: package yum: name=nginx - name: service service: name=nginx state=started enabled=yes
|
执行playbook,在hosts列表中的主机上部署nginx服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| [root@ansible ~]
PLAY [webserver] ************************************************************************************************
TASK [Gathering Facts] ****************************************************************************************** ok: [192.168.73.134] ok: [192.168.73.135]
TASK [package] ************************************************************************************************** ok: [192.168.73.135] ok: [192.168.73.134]
TASK [service] ************************************************************************************************** changed: [192.168.73.135] changed: [192.168.73.134]
PLAY RECAP ****************************************************************************************************** 192.168.73.134 : ok=3 changed=1 unreachable=0 failed=0 192.168.73.135 : ok=3 changed=1 unreachable=0 failed=0
|
template使用示例一
基础环境部署完毕,现在需要使用模板文件实现让nginx在运行时创建出cpu个数+2的进程数,模板文件的配置方法如下:
1.获取nginx的配置文件,并改名为.j2后缀的文件存放在templates目录下
2.获取cpu个数的变量
1 2
| [root@ansible data] "ansible_processor_vcpus": 1,
|
3.修改模板文件
1 2
| [root@ansible data] worker_processes {{ansible_processor_vcpus+2}};
|
4.在playbook中引用模板
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| [root@ansible yaml] ---
- hosts: webserver remote_user: root
tasks: - name: package yum: name=nginx - name: config template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf notify: restart service - name: service service: name=nginx state=started enabled=yes
handlers: - name: restart service service: name=nginx state=restarted
|
5.执行playbook
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| [root@ansible yaml]
PLAY [webserver] ************************************************************************************************
TASK [Gathering Facts] ****************************************************************************************** ok: [192.168.73.134] ok: [192.168.73.135]
TASK [package] ************************************************************************************************** ok: [192.168.73.134] ok: [192.168.73.135]
TASK [config] *************************************************************************************************** changed: [192.168.73.134] changed: [192.168.73.135]
TASK [service] ************************************************************************************************** ok: [192.168.73.134] ok: [192.168.73.135]
RUNNING HANDLER [restart service] ******************************************************************************* changed: [192.168.73.135] changed: [192.168.73.134]
PLAY RECAP ****************************************************************************************************** 192.168.73.134 : ok=5 changed=2 unreachable=0 failed=0 192.168.73.135 : ok=5 changed=2 unreachable=0 failed=0
|
验证线程个数是否改变
1 2 3 4 5 6 7 8 9 10
| [root@ansible yaml] 192.168.73.135 | CHANGED | rc=0 >> worker_processes 3; worker_connections 1024;
192.168.73.134 | CHANGED | rc=0 >> worker_processes 3; worker_connections 1024;
|
template使用实例二
配置刚才所部署的nginx服务,让192.168.73.134主机上的nginx监听在80端口,192.168.73.135主机上的nginx服务监听在8080端口上。
1.修改模板中的端口
1 2 3 4 5
| [root@ansible yaml] server { listen {{port}} default_server; 将此处的端口改为变量 listen [::]:80 default_server;
|
2.修改主机文件定义port
1 2 3 4
| [root@ansible yaml] [webserver] 192.168.73.134 port=80 192.168.73.135 port=8080
|
3.重新执行yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| [root@ansible yaml]
PLAY [webserver] ************************************************************************************************
TASK [Gathering Facts] ****************************************************************************************** ok: [192.168.73.134] ok: [192.168.73.135]
TASK [package] ************************************************************************************************** ok: [192.168.73.134] ok: [192.168.73.135]
TASK [config] *************************************************************************************************** ok: [192.168.73.134] changed: [192.168.73.135]
TASK [service] ************************************************************************************************** ok: [192.168.73.135] ok: [192.168.73.134]
RUNNING HANDLER [restart service] ******************************************************************************* changed: [192.168.73.135]
PLAY RECAP ****************************************************************************************************** 192.168.73.134 : ok=4 changed=0 unreachable=0 failed=0 192.168.73.135 : ok=5 changed=2 unreachable=0 failed=0
|
验证两台主机上nginx服务是否监听在模板中所定义的端口上
1 2 3 4 5 6 7 8
| [root@ansible yaml] 192.168.73.134 | CHANGED | rc=0 >> LISTEN 0 128 *:80 *:* LISTEN 0 128 :::80 :::*
192.168.73.135 | CHANGED | rc=0 >> LISTEN 0 128 *:8080 *:* LISTEN 0 128 :::80 :::*
|