【SaltStack】SaltStack配置管理工具jinja2模板的使用

TangLu 运维 2015-09-05 5861 0

SaltStack是使用的YAML语言来将sls文件解释成它自己可以识别的内容,Jinja是一种基于PYTHON的模板引擎,在SLS文件里可以直接使用jinja模板来做一些操作,比如当我们需要对多台服务器做一些apache服务配置时,由于每台服务器信息不一样(比如ip不同),如果为每台服务器去创建SLS文件就不太合理,而通过jinja模板则可以用生成变量→读取变量的方式来为每个服务器设置应有的信息。下面来看看定义jinja模板的方法:

jinja2模板的基本使用

1、首先将source文件中需要引用变量的内容改为{{ 变量名 }},如修改apache配置文件中的端口信息

Listen {{ PORT }}

2、对SLS文件进行编辑以定义模板并且给变量传值,在第一步中定义了几个变量就必须给几个变量传值


apache-service:
  pkg.installed:
    - name: httpd
  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://files/httpd.conf
    - user: root
    - group: root
    - mode: 644
    - template: jinja    #增加这行表示开启模板
    - defaults:    #下面设定变量的值
      PORT: 8080    #之前定义的PORT变量值为8080
    - require:
      - pkg: apache-service
  service.running:
    - name: httpd
    - enable: True
    - reload: True
    - watch:
      -file: apache-service


3、执行salt '*' state.highstate,然后查看配置文件发生的变化,可以看到PORT这个变量的值变成了8080

 

jinja2模板的高级使用

在基本使用中由于修改的是端口,端口信息一般是固定的,如果想要修改的信息是每个minion自身的IP就没办法设置一个通用的信息了,这个时候需要通过其他方法来获取minion相关信息,这里可以使用Grains、Pillar和执行模块三个方法来获取,下面用Grains举例设置IP的办法

apache-service:
  pkg.installed:
    - name: httpd
  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://files/httpd.conf
    - user: root
    - group: root
    - mode: 644
    - template: jinja    #增加这行表示开启模板
    - defaults:    #下面设定变量的值
      HOST: {{ grains['fqdn_ip4'][0] }}    #[fqdn_ip4]代表的是IP,该信息需要先执行salt '*' grains.items查询,由于grains查询输出的是列表,会有多个值,需要加上[0]代表取第一个值
      PORT: 8080    #之前定义的PORT变量值为8080
    - require:
      - pkg: apache-service
  service.running:
    - name: httpd
    - enable: True
    - reload: True
    - watch:
      -file: apache-service



 

 

 

评论