ansible 模版 templates

模板templates

  • 文本文件,嵌套有脚本(使用模板编程语言编写)
  • Jinja2 言,使用字面量,有下面形式
    字符串:使用单引号或双引号
    数字:整数,浮点数
    列表:[tem1, item2, ...]
    元组:(item1, item2, ...)
    字典:{key1: value1, key2: value2, ...}
    布尔型:true/ false
  • 算术运算:+, -, *, ノ/%,
  • 比较操作:==,! =,>,> =, <,
  • 逻辑运算:and, or, not
  • 流表达式:For If When

例子

# cat yml/nginx.yml
---
- hosts: web
  remote_user: ec2-user
  become: yes
  become_method: sudo
  become_user: root

  tasks:
    - name: install nginx package
      yum: name=nginx
    - name: copy template
      template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
      notify: restart nginx
    - name: start service
      service: name=nginx state=started enabled=yes

  handlers:
    - name: restart nginx
      service: name=nginx state=restarted
	  
	  
	  
# more  yml/templates/nginx.conf.j2
#user  nobody;
worker_processes  {{ansible_processor_vcpus**2}};
......

# ansible-playbook yml/nginx.yml

模板中for用法

cat testfor.yml
---
- hosts: web
  remote_user: ec2-user
  become: yes
  become_method: sudo
  become_user: root
  vars:
    ports:
      - web1:
        port: 80
        name: web1.xxx.com
        rootdir: /tmp/dir1
      - web2:
        port: 82
        name: web2.xxx.com
        rootdir: /tmp/dir2

#      - 80
#      - 81
#      - 82
#      - listen_port: 80
#      - listen_port: 81
#      - listen_port: 82

  tasks:
    - name: copy conf
      template: src=for1.conf.j2 dest=/tmp/for1.conf

cat templates/for1.conf.j2
{% for p in ports %}
server {
    listen {{ p.port }}
    servername {{ p.name }}
    documentroot {{ p.rootdir }}
{#         listen {{ port }};#}
{#         listen {{ port.listen_port }};#}
}
{% endfor %}

for 中嵌套 if

cat testfor.yml
---
- hosts: web
  remote_user: ec2-user
  become: yes
  become_method: sudo
  become_user: root
  vars:
    ports:
      - web1:
        port: 80
#        name: web1.xxx.com
        rootdir: /tmp/dir1
      - web2:
        port: 82
        name: web2.xxx.com
        rootdir: /tmp/dir2

#      - 80
#      - 81
#      - 82
#      - listen_port: 80
#      - listen_port: 81
#      - listen_port: 82

  tasks:
    - name: copy conf
      template: src=for1.conf.j2 dest=/tmp/for1.conf


cat templates/for1.conf.j2
{% for p in ports %}
    server {
    listen {{ p.port }}
    {% if p.name is defined %}
        servername {{ p.name }}
    {% endif %}
    documentroot {{ p.rootdir }}
    {#         listen {{ port }};#}
    {#         listen {{ port.listen_port }};#}
    }
{% endfor %}
posted @ 2021-09-06 17:12  Star-Hitian  阅读(44)  评论(0)    收藏  举报