0
点赞
收藏
分享

微信扫一扫

4、Ansible模板--用于根据每个主机的不同环境而为生成不同的文件

westfallon 2023-06-02 阅读 26
ansible模板

模板是一个文本文件,可以用于根据每个主机的不同环境而为生成不同的文件 
模板文件中支持嵌套jinja2语言的指令,来实现变量,条件判断,循环等功能 
需要使用template模块实现文件的复制到远程主机,但和copy模块不同,复制过去的文件每个主机可以会有所不同

jinja2语言

http://jinja.pocoo.org/

范例:根据主机内核的不同设置nginx配置文件工作进程的数量

1、创建模板文件夹,并把模板文件拷贝到此文件夹下
[root@ubuntu2004 ansible]#mkdir templates
[root@ubuntu2004 ansible]#cp files/nginx.conf templates/nginx.conf.j2
[root@ubuntu2004 ansible]#vim templates/nginx.conf.j2
...... 
worker_processes {{ ansible_processor_vcpus }}; 
......
2、更改playbook文件
[root@ubuntu2004 ansible]#vim install_nginx_handlers_notify_tags_templates.yaml
- hosts: 10.0.0.18
  remote_user: root
 
  tasks:
    - name: 安装包
      yum:
        name: nginx
        state: present
- name: 配置文件                      #不再使用copy模块,使用template模块
      template:
        src: nginx.conf.j2
        dest: /etc/nginx/nginx.conf 
      notify: restart nginx   
    - name: 数据文件
      copy:
        src: index.html
        dest: /usr/share/nginx/html/index.html
    - name: 启动服务
      service:
        name: nginx
        state: started
        enabled: yes

  handlers:
    - name: restart nginx
      service: name=nginx state=restarted
      满足配置文件变动时执行handlers,重启nginx

template中使用流程控制for和if

范例:for循环

[root@ubuntu2004 ansible]#vim for.yaml
- hosts: webservers
  tasks:
    - name: config file
      template:
        src: test.conf.j2
        dest: /tem/test.conf
        
[root@ubuntu2004 ansible]#vim templates/test.conf.j2 
{% for i in range(1,10) %} 
 server_name web{{i}}; 
{% endfor %}

[root@ubuntu2004 ansible]#ansible-playbook for.yaml

生成结果:
 server_name web1;
 server_name web2;
 server_name web3;
 server_name web4;
 server_name web5;
 server_name web6;
 server_name web7;
 server_name web8;
 server_name web9;

范例:if条件判断

#playbook
templnginx6.yml 
- hosts: webservers 
  remote_user: root 
  vars:   
    nginx_vhosts:
      - web1:
        listen: 8080
        root: "/var/www/nginx/web1/"
      - web2:
        listen: 8080
        server_name: "web2.wang.org" 
        root: "/var/www/nginx/web2/"
      - web3:       listen: 8080
        server_name: "web3.wang.org"
        root: "/var/www/nginx/web3/" 
  tasks:
    - name: template config to
      template: src=nginx.conf5.j2 dest=/data/nginx5.conf
#模板      
templates/nginx.conf6.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 8080
   root /var/www/nginx/web1/ 
} 
server {
   listen 8080
   server_name web2.wang.org
   root /var/www/nginx/web2/
} server {
   listen 8080
   server_name web3.wang.org
   root /var/www/nginx/web3/
}

举报

相关推荐

0 条评论