美文网首页
SaltStack master file_roots 变量与

SaltStack master file_roots 变量与

作者: awker | 来源:发表于2018-09-30 00:09 被阅读0次

    一、第一种目录结构方式

    1、salt-master 配置

    # cat /etc/salt/master
    …… 省略内容
    file_roots:
      base:
        - /srv/salt/base
      prod:
        - /srv/salt/prod
    …… 省略内容
    pillar_roots:
      base:
        - /srv/salt/base
      prod:
        - /srv/pillar/prod
    …… 省略内容
    

    2、目录结构

    [root@salt-master ~]# tree /srv/
    /srv/
    ├── pillar
    │   ├── base
    │   │   └── top.sls
    │   └── prod
    │       └── haproxy
    │           └── default.sls
    └── salt
        ├── base
        │   ├── init
        │   │   ├── dns.sls
        │   │   ├── env_init.sls
        │   │   ├── files
        │   │   │   └── resolv.conf
        │   │   └── sysctl.sls
        │   └── top.sls
        └── prod
            ├── haproxy
            │   ├── config.sls
            │   ├── files
            │   │   ├── haproxy-1.8.14.tar.gz
            │   │   ├── haproxy.cfg
            │   │   └── haproxy.init
            │   └── install.sls
            └── pkg
                └── pkg-init.sls
    
    12 directories, 13 files
    

    重要提示:salt 命令的执行跟 file_roots 的配置有关

    3、执行单个 sls 文件

    // 在 /etc/salt/master file_roots.base 配置的目录(/srv/salt/base)中的文件可以直接执行
    [root@salt-master init]# pwd
    /srv/salt/base/init
    [root@salt-master init]# ls
    dns.sls  env_init.sls  files  sysctl.sls
    [root@salt-master init]# salt 'salt-minion' state.apply init.dns
    
    // 在 /etc/salt/master file_roots.prod 配置的目录(/srv/salt/prod)中的文件不可以直接执行,会提示“No matching sls found for 'xxx' in env 'base'”
    [root@salt-master haproxy]# pwd
    /srv/salt/prod/haproxy
    [root@salt-master haproxy]# ls
    config.sls  files  install.sls
    [root@salt-master haproxy]# salt 'salt-minion' state.apply haproxy.config 
    salt-minion:
        - No matching sls found for 'haproxy.config' in env 'base'
    ERROR: Minions returned with non-zero exit code
    
    // 要指定 file_roots 中的 prod 变量执行
    [root@salt-master haproxy]# salt 'salt-minion' state.apply saltenv='prod' haproxy.config
    

    4、查看应用 sls 文件的执行顺序

    // 在 /etc/salt/master file_roots.base 配置的目录(/srv/salt/base)
    [root@salt-master init]# salt 'salt-minion' state.show_sls init.dns
    
    // 在 /etc/salt/master file_roots.prod 配置的目录(/srv/salt/prod)
    # salt 'salt-minion' state.show_sls saltenv='prod' haproxy.config
    

    5、执行 top.sls

    [root@salt-master ~]# pwd
    /root
    
    [root@salt-master ~]# ll /srv/salt/base/top.sls 
    -rw-r--r-- 1 root root 79 Sep 29 15:31 /srv/salt/base/top.sls
    
    // 会找到在 /etc/salt/master file_roots.base 配置的目录(/srv/salt/base)的 top.sls 来执行 
    [root@salt-master ~]# salt 'salt-minion' state.highstate
    
    

    二、第二种目录结构方式

    1、salt-master 配置

    # cat /etc/salt/master
    …… 省略内容
    file_roots:
      base:
        - /srv/salt
      prod:
        - /srv/salt/prod
    …… 省略内容
    pillar_roots:
      base:
        - /srv/pillar
      prod:
        - /srv/pillar/prod
    …… 省略内容
    

    2、目录结构

    [root@salt-master ~]# tree /srv/
    /srv/
    ├── pillar
    │   ├── prod
    │   │   └── haproxy
    │   │       └── default.sls
    │   └── top.sls
    └── salt
        ├── init
        │   ├── dns.sls
        │   ├── env_init.sls
        │   ├── files
        │   │   └── resolv.conf
        │   └── sysctl.sls
        ├── prod
        │   ├── haproxy
        │   │   ├── config.sls
        │   │   ├── files
        │   │   │   ├── haproxy-1.8.14.tar.gz
        │   │   │   ├── haproxy.cfg
        │   │   │   └── haproxy.init
        │   │   └── install.sls
        │   └── pkg
        │       └── pkg-init.sls
        └── top.sls
    
    10 directories, 13 files
    
    

    重要提示:salt 命令的执行跟 file_roots 的配置有关

    3、执行单个 sls 文件

    // init 目录在 /etc/salt/master file_roots.base 配置的目录(/srv/salt)下可以直接执行
    [root@salt-master init]# pwd
    /srv/salt/init
    [root@salt-master init]# ls
    dns.sls  env_init.sls  files  sysctl.sls
    [root@salt-master init]# salt 'salt-minion' state.apply init.dns
    
    [root@salt-master haproxy]# pwd
    /srv/salt/prod/haproxy
    
    // prod 目录也在 /etc/salt/master file_roots.base 配置的目录(/srv/salt)下,但是 /etc/salt/master 中也定义了 file_roots.prod 变量,所以要加上 saltenv='prod' 来执行
    [root@salt-master haproxy]# salt 'salt-minion' state.apply haproxy.config
    salt-minion:
        - No matching sls found for 'haproxy.config' in env 'base'
    
    [root@salt-master haproxy]# salt 'salt-minion' state.apply saltenv='prod' haproxy.config
    
    

    4、查看应用 sls 文件的执行顺序

    // 在 /etc/salt/master file_roots.base 配置的目录(/srv/salt)
    [root@salt-master init]# salt 'salt-minion' state.show_sls init.dns
    
    // 在 /etc/salt/master file_roots.prod 配置的目录(/srv/salt/prod)
    # salt 'salt-minion' state.show_sls saltenv='prod' haproxy.config
    
    

    5、执行 top.sls

    [root@salt-master ~]# pwd
    /root
    [root@salt-master ~]# ll /srv/salt/top.sls 
    -rw-r--r-- 1 root root 79 Sep 29 15:31 /srv/salt/top.sls
    
    // 会找到在 /etc/salt/master file_roots.base 配置的目录(/srv/salt)的 top.sls 来执行 
    [root@salt-master ~]# salt 'salt-minion' state.highstate
    
    

    三、top.sls 说明

    [root@salt-master ~]# cat /srv/salt/top.sls 
    base:
      '*':
        - init.env_init 
    // 1、执行在 /etc/salt/master file_roots.base 配置的目录(/srv/salt)下的 init.env_init sls 文件
    // 2、'*' 代表了匹配所有主机,可以这样指定所有主机 salt '*' state.highstate 执行,也可以指定具体的主机执行 salt 'salt-minion' state.highstate  
    
    prod:
      'salt-minion':
        - haproxy.config
    // 1、执行在 /etc/salt/master file_roots.prod 配置的目录(/srv/salt/prod)下的 haproxy.config sls 文件
    // 2、'salt-minion' 代表了只匹配 salt-minion 的主机,可以这样指定所有主机 salt '*' state.highstate 执行,但其他主机不会执行 haproxy.confg,因为不匹配 top.sls 指定的 'salt-minion',只有匹配 'salt-minion' 的主机会执行
    // 3、就是说匹配优先级: top.sls 中的主机匹配 > salt 命令执行时的主机匹配 
    // 4、也可以指定具体的主机执行 salt 'salt-minion' state.highstate 
    
    [root@salt-master ~]#
    # cat /srv/pillar/top.sls 
    prod:
      '*':
        - haproxy.default
    
    

    相关文章

      网友评论

          本文标题:SaltStack master file_roots 变量与

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