Ansible-Playbook-template算数运算以及流程控制
生活随笔
收集整理的這篇文章主要介紹了
Ansible-Playbook-template算数运算以及流程控制
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
template中使用流程控制 for 和 if
template中也可以使用流程控制 for 循環和 if 條件判斷,實現動態生成文件功能
范例
#temlnginx2.yml --- - hosts: websrvsremote_user: rootvars:nginx_vhosts:- 81- 82- 83tasks:- name: template configtemplate: src=nginx.conf.j2 dest=/data/nginx.conf#templates/nginx.conf2.j2 {% for vhost in nginx_vhosts %} server {listen {{ vhost }} } {% endfor %}ansible-playbook -C templnginx2.yml --limit 10.0.0.8#生成的結果: server {listen 81 } server {listen 82 } server {listen 83 }YAML
范例:
#temlnginx3.yml --- - hosts: websrvsremote_user: rootvars:nginx_vhosts:- listen: 8080tasks:- name: config filetemplate: src=nginx.conf3.j2 dest=/data/nginx3.conf#templates/nginx.conf3.j2 {% for vhost in nginx_vhosts %} server {listen {{ vhost.listen }} } {% endfor %}ansible-playbook templnginx3.yml --limit 10.0.0.8#生成的結果 server {listen 8080 }范例:
#templnginx4.yml - hosts: websrvsremote_user: rootvars:nginx_vhosts:- listen: 8080server_name: "web1.magedu.com"root: "/var/www/nginx/web1/"- listen: 8081server_name: "web2.magedu.com"root: "/var/www/nginx/web2/"- {listen: 8082, server_name: "web3.magedu.com", root: "/var/www/nginx/web3/"}tasks:- name: template config template: src=nginx.conf4.j2 dest=/data/nginx4.conf# templates/nginx.conf4.j2 {% for vhost in nginx_vhosts %} server {listen {{ vhost.listen }}server_name {{ vhost.server_name }}root {{ vhost.root }} } {% endfor %}ansible-playbook templnginx4.yml --limit 10.0.0.8#生成結果: server {listen 8080server_name web1.magedu.comroot /var/www/nginx/web1/ } server {listen 8081server_name web2.magedu.comroot /var/www/nginx/web2/ } server {listen 8082server_name web3.magedu.comroot /var/www/nginx/web3/ }YAML
在模版文件中還可以使用 if條件判斷,決定是否生成相關的配置信息
范例:
#templnginx5.yml - hosts: websrvsremote_user: rootvars:nginx_vhosts:- web1:listen: 8080root: "/var/www/nginx/web1/"- web2:listen: 8080server_name: "web2.magedu.com"root: "/var/www/nginx/web2/"- web3:listen: 8080server_name: "web3.magedu.com"root: "/var/www/nginx/web3/"tasks:- name: template config to template: src=nginx.conf5.j2 dest=/data/nginx5.conf#templates/nginx.conf5.j2 {% for vhost in nginx_vhosts %} server {listen {{ vhost.listen }}{% if vhost.server_name is defined %} server_name {{ vhost.server_name }}{% endif %} root {{ vhost.root }} } {% endfor %}#生成的結果 server {listen 8080root /var/www/nginx/web1/ } server {listen 8080server_name web2.magedu.comroot /var/www/nginx/web2/ } server {listen 8080server_name web3.magedu.comroot /var/www/nginx/web3/ }YAML
playbook使用 when
when語句,可以實現條件測試。如果需要根據變量、facts或此前任務的執行結果來做為某task執行與否的前提時要用到條件測試,通過在task后添加when子句即可使用條件測試,jinja2的語法格式
范例:
--- - hosts: websrvsremote_user: roottasks:- name: "shutdown RedHat flavored systems"command: /sbin/shutdown -h nowwhen: ansible_os_family == "RedHat"YAML
范例:
--- - hosts: websrvsremote_user: roottasks:- name: add group nginxtags: useruser: name=nginx state=present- name: add user nginxuser: name=nginx state=present group=nginx- name: Install Nginxyum: name=nginx state=present- name: restart Nginxservice: name=nginx state=restartedwhen: ansible_distribution_major_version == “6”YAML
范例:
--- - hosts: websrvsremote_user: roottasks: - name: install conf file to centos7template: src=nginx.conf.c7.j2 dest=/etc/nginx/nginx.confwhen: ansible_distribution_major_version == "7"- name: install conf file to centos6template: src=nginx.conf.c6.j2 dest=/etc/nginx/nginx.confwhen: ansible_distribution_major_version == "6"YAML
playbook 使用迭代 with_items
迭代:當有需要重復性執行的任務時,可以使用迭代機制
對迭代項的引用,固定變量名為”item“
要在task中使用with_items給定要迭代的元素列表
列表元素格式:
- 字符串
- 字典
范例:
--- - hosts: websrvsremote_user: roottasks:- name: add several usersuser: name={{ item }} state=present groups=wheelwith_items:- testuser1- testuser2 #上面語句的功能等同于下面的語句- name: add user testuser1user: name=testuser1 state=present groups=wheel- name: add user testuser2user: name=testuser2 state=present groups=wheel范例:
--- #remove mariadb server - hosts: appsrvs:!192.168.38.8remote_user: roottasks:- name: stop serviceshell: /etc/init.d/mysqld stop- name: delete files and dirfile: path={{item}} state=absentwith_items:- /usr/local/mysql- /usr/local/mariadb-10.2.27-linux-x86_64- /etc/init.d/mysqld- /etc/profile.d/mysql.sh- /etc/my.cnf- /data/mysql- name: delete useruser: name=mysql state=absent remove=yes范例:
--- - hosts:websrvsremote_user: roottasks- name: install some packagesyum: name={{ item }} state=presentwith_items:- nginx- memcached- php-fpm?
范例:
--- - hosts: websrvsremote_user: roottasks:- name: copy filecopy: src={{ item }} dest=/tmp/{{ item }}with_items:- file1- file2- file3- name: yum install httpdyum: name={{ item }} state=present with_items:- apr- apr-util- httpd?
**迭代嵌套子變量:**在迭代中,還可以嵌套子變量,關聯多個變量在一起使用
示例:
--- - hosts: websrvsremote_user: roottasks:- name: add some groupsgroup: name={{ item }} state=presentwith_items:- nginx- mysql- apache- name: add some usersuser: name={{ item.name }} group={{ item.group }} state=presentwith_items:- { name: 'nginx', group: 'nginx' }- { name: 'mysql', group: 'mysql' }- { name: 'apache', group: 'apache' }YAML
范例:
cat with_item2.yml --- - hosts: websrvsremote_user: roottasks:- name: add some groupsgroup: name={{ item }} state=presentwith_items:- g1- g2- g3- name: add some usersuser: name={{ item.name }} group={{ item.group }} home={{ item.home }} create_home=yes state=presentwith_items:- { name: 'user1', group: 'g1', home: '/data/user1' }- { name: 'user2', group: 'g2', home: '/data/user2' }- { name: 'user3', group: 'g3', home: '/data/user3' }參考鏈接:http://www.yunweipai.com/34665.html
總結
以上是生活随笔為你收集整理的Ansible-Playbook-template算数运算以及流程控制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ansible PLaybook tem
- 下一篇: Ansible管理节点过多导致的超时问题