Template语法
示例-1
[root@longma-node13-808 ansible]# mkdir /root/files/templates -pv
目录名templates不能错
ansible web -m setup |less
ansible 172.18.0.67 -m setup 可以收集主机的信息
左边是变量,右边是值,都可以在j2模板中去使用
ansible 172.18.0.67 -m setup |grep vcpus 查看主机是几核心的
cp /root/files/nginx.conf /root/files/templates/nginx.conf.j2
vim /root/files/templates/nginx.conf.j2
修改下面这行
worker_processes {{ ansible_processor_vcpus }};
# 支持加减乘除 worker_processes {{ ansible_processor_vcpus*2 }};
vim web2.yml
---
- hosts: web
remote_user: root
tasks:
- name: nginx conf sync
template: src=/root/files/templates/nginx.conf.j2 dest=/etc/nginx/nginx.conf
注意 template和templates的位置
示例2-使用for循环
vim /root/files/templates/nginx.conf.j2
在文件最后添加
{% for node in webs %} #webs是下面web3.yml中的变量
server {
listen 80;
server_name {{ node }} #这里是双括号
root /usr/share/nginx/html;
location / {
}
}
{% endfor %} #这里是单括号
vim web3.yml
---
- hosts: web
remote_user: root
vars:
- webs:
- node1
- node2
- node3
tasks:
- name: multi server
template: src=/root/files/templates/nginx.conf.j2 dest=/etc/nginx/nginx.conf
#效果
vim /etc/nginx/nginx.conf
server {
listen 80;
server_name node1
location / {
}
}
server {
listen 80;
server_name node2
location / {
}
}
server {
listen 80;
server_name node3
location / {
}
}
示例3 使用if语句
vim /etc/ansible/hosts
[web]
192.168.1.113 hostname=longma-node13
192.168.1.117 hostname=longma-node17 http_port=80
192.168.1.118 hostname=longma-node18 http_port=808
vim /root/files/templates/nginx.conf.j2
{% for node in webs %}
server {
{% if http_port is defined %}
listen {{ http_port }};
{% endif %} #这里是endif
server_name {{ node }}
root /usr/share/nginx/html;
location / {
}
}
{% endfor %} #这里是endfor
ansible-playbook web3.yml
示例4 一次安装多个软件
---
- hosts: web
remote_user: root
tasks:
- name: install app
yum: name={{ item }} state=installed
with_items:
- nginx
- httpd
- php
示例5 一次添加多个用户
---
- hosts: web
remote_user: root
tasks:
- name: useradd multi
user: name={{ item }}
with_items:
- user5
- user6
- user7
示例6 一次添加多个用户,且加入到不同的组
---
- hosts: web
remote_user: root
tasks:
- name: groupadd
group: name={{ item }}
with_items:
- group5
- group6
- group7
- name: useradd multi
user: name={{ item.username }} group={{ item.groupname }}
with_items:
- { username: "user5", groupname: "group5" }
- { username: "user6", groupname: "group6" }
- { username: "user7", groupname: "group7" }