美文网首页
(四)、通过jinja2模板及Grains和Pillar扩展主机

(四)、通过jinja2模板及Grains和Pillar扩展主机

作者: w也不知道 | 来源:发表于2017-11-02 08:57 被阅读0次

    一、jinjia2 模板语言语法简介

    # cat jinja2.sls # 运行时把注释去掉,不然会出错
    
    {% set var = 'Hello World!' %}  # 定义变量
    {% set L = ['value1','value2','value3'] %} # 定义列表
    {% set D = {'key1':'value1','key2':'value2','key3':'value3'} %} # 定义字典
    
    test_var:
        cmd.run:
            - name: echo {{ var }} # 打印变量
    
            # 循环遍历列表
            {% for l in L %}
                echo {{ l }}
            {% endfor %}
    
            # 循环遍历字典
            {% for k,v in D.iteritems() %}
                    
                # 使用条件判断
                {% if k == 'key2' %}
                    {% break %} # 也可以是continue
                {% else %}
                    echo {{k}}:{{v}}
                {% endif %}
            {% endfor %}
    
    运行结果

    二、Grains 相关的基本命令

    salt node1 grains.ls : 列出所有的grains选项
    salt node1 grains.items :列出所有的grains选项及值
    salt node1 grains.item 选项名:列出指定的选项所对应的值
    
    1. 设置 grains 数据
    salt node1 grains.setval key value # 设置单个键值对
    
    salt node1 grains.setvals "{'key1':'value1','key2':'value2'}" # 设置多个个键值对
    
    salt node1 grains.setval my_list "['one','two','three']" # 列表结构设置
    

    查看对应的minion主机上已经有了新添加的grains数据

    salt node1 grains.delkey 键名 #删除 grains 数据
    
    删除结果
    1. 设置grains模块
    mkdir -pv /srv/salt/_grains #创建grains模块目录
    
    # cat  /srv/salt/_grains/my_grains_module.py #写一个简单的grains模块
    import time
    def now():
        grains = {}
        grains['now'] = int(time.time())
        return grains
    
    salt node1 saltutil.sync_all # 同步模块到minion
    salt node1 sys.reload_modules # 重载一次模块
    
    grains模块执行结果

    三、Pillar相关操作

    1. 建立目录,为每个minion编写对应的SLS文件
    mkdir -pv /srv/pillar
    
    # cat /srv/pillar/minion_m_key.sls  #主机m的pillar数据
    private_key: minion_m_key
    
    # cat /srv/pillar/minion_node_key.sls #主机node组的pillar数据
    role: webserver
    private_key: node
    
    1. 建立入口文件
    # cat /srv/pillar/top.sls 
    base:
        'node*': 
            - minion_node_key
        'm':
            - minion_m_key
    
    1. 刷新Pillar数据
    salt '*' saltutil.refresh_pillar
    
    查看设置的Pillar数据

    四、用Jinja2和Grain扩展SLS文件

    1. 根据不同的操作系统来安装apahce服务
    # cat /srv/sal/apache.sls
    install_apache:
        pkg.installed:
            {% if grains['os_family'] == 'Debian' %}
            - name: apache2
            {% elif grains['os_family'] == 'RedHat' %}
            - name: httpd
            {% endif %}
    
    1. 根据不同的操作系统下发iptables配置文件
    # cat iptables.sls 
    iptables:
        pkg: 
            - installed
        service:
            - running
            - watch:
                - pkg: iptables
                - file: iptables
        file:
            - managed
            - source: salt://service/iptables
            {% if grains['os'] == 'CentOS' or grains['os'] == 'Fedora' %}
            - name: /etc/sysconfig/iptables
            {% elif grains['os'] == 'Arch' %}
            - name: /etc/conf.d/iptables
            {% endif %}
    

    五、使用Jinja2和Pillar扩展SLS配置

    1. 添加多个不同用户
    # cat /srv/salt/adduser.sls 
    {% for i in pillar['user'] %}
    add_{{ i }}:
        user.present:
            - name: i
    {% endfor %}
    

    六、使用Jinja2以及Grain和Pillar动态下发配置文件

    1. 简单模板下发实例
    # cat /srv/salt/template.sls 
    template_test:
        file.managed:
            - source: salt://test.j2
            - name: /tmp/test.conf
            - user: root
            - group: root
            - mode: 644
            - template: jinja
    
    # cat /srv/salt/test.j2 
    cpu_num = {{ grains['num_cpus'] }}
    mem_total = {{ grains['mem_total'] }}
    hostname = {{ grains['host'] }}
    user = {{ pillar['user'][0] }
    
    执行结果
    1. 在例1中的 test.j2 中添加流程控制
     # cat /srv/salt/test.j2 
    {% if grains['num_cpus'] >= 8 %}
    cpu_num = {{ grains['num_cpus'] }}
    {% endif %}
    {% if grains['mem_total'] <= 512 %}
    mem_total = {{ grains['mem_total'] }}
    mem_total <= 512
    {% endif %}
    hostname = {{ grains['host'] }}
    {% for i in pillar['user'] %}   
        user = {{ i }}
    {% endfor %}
    
    执行结果

    相关文章

      网友评论

          本文标题:(四)、通过jinja2模板及Grains和Pillar扩展主机

          本文链接:https://www.haomeiwen.com/subject/fdfbpxtx.html