saltstack简单使用

SSCCGo 2020-03-28

  • 安装,官方文档

    1. 配置阿里云的saltstack镜像仓库
    2. 主安装salt-master salt-minion salt-api
    3. 从安装salt-minion
    4. 关闭防火墙 或者打开端口

    firewall

    firewall-cmd --permanent --zone=public --add-port=4505-4506/tcp
    firewall-cmd --reload

    or iptables

    -A INPUT -m state --state new -m tcp -p tcp --dport 4505:4506 -j ACCEPT
    1. 启动服务
      systemctl start salt-master
      systemctl start salt-minion
      systemctl enable salt-master
      systemctl enable salt-minion
  • 配置,官方文档

    • mastermaster配置详解

      1. 配置监听端口

        /etc/salt/master --> interface

      2. 配置accept public keys from minion

        /etc/salt/master --> auto_accept

        或者手动允许minion key

        salt-key  # 查看keys 也可以使用salt-key -L
        salt-key -A  # 通过所有key
    • minionminion配置详解

      1. 指定salt-master服务器

        /etc/salt/minion --> master

        可以指定ip或者hostname

  • grains操作

    • 可以手工编写/etc/grains 文件yaml格式,然后使用命令同步grains

      salt ‘*‘ saltutil.sync_grains
    • 查看grains方法

      salt ‘*‘ grains.
    • 查看grains

      1. ls

        查看所有grains的key

        salt ‘*‘ grains.ls
      2. items

        查看所有grains的key和value

        salt ‘*‘ grains.items
      3. item

        查看一个或者多个key

        salt ‘*‘ grains.item os
        salt ‘*‘ grains.item os osrelease oscodename
      4. get

        salt ‘*‘ grains.get pkg:apache
        salt ‘*‘ grains.get abc::def|ghi delimiter=‘|‘‘
    • 新增grains

      以下操作均会同步grains config file

      1. append

        salt ‘*‘ grains.append key val
      2. setval

        salt ‘*‘ grains.setval key val
        salt ‘*‘ grains.setval key "{‘sub-key‘: ‘val‘, ‘sub-key2‘: ‘val2‘}"
      3. setvals 可以传递python字典结构

        salt ‘*‘ grains.setvals "{‘key1‘: ‘val1‘, ‘key2‘: ‘val2‘}"
        salt ‘*‘ grains.setvals   "{‘A‘:[{‘B1‘: {‘C‘:‘C_value‘}},‘B2‘]}"
        # A:
        #- B1:
        #    C: C_value
        #- B2
      4. set 可以通过:分隔层级选中key来设置value

        salt ‘*‘ grains.set ‘apps:myApp:port‘ 2209
        salt ‘*‘ grains.set ‘apps:myApp‘ ‘{port: 2209}‘
    • 删除grains

      1. remove

        salt ‘*‘ grains.remove key val
      2. delval

        salt ‘*‘ grains.delval key
      3. delkey

        salt ‘*‘ grains.delkey key
    • 其他方法

      • equals

        确认minion的grains为给定的值

        注意当value为列表时需要给定列表的所有值

        salt ‘*‘ grains.equals roles  [‘salt-master‘,‘k8s-master‘]
      • fetch

        get方法的别名 在salt源代码中 fetch的实现为

        # Provide a jinja function call compatible get aliased as fetch
        fetch = get
      • filter_by

        根据给定的字典返回指定的key

        可以传递位置参数也可以键值对传餐

        """
        :param lookup_dict: 给定dict
        :param grain: 指定需要匹配的grains key,默认为‘os_family‘
        :param merge: 默认为None 联合lookup_dict
        :param default: 默认为‘default‘ 如果在给定的dict中没有匹配到 那就使用defult指定的key
        :param base: 默认为None 配合merge使用
        """

        例子中的os_family如果是RedHat会返回给定的列表中的os_family is RedHat

        salt ‘*‘ grains.filter_by ‘{Debian: os_family is Debain,RedHat: os_family is RedHat}‘ os_family
        salt ‘*‘ grains.filter_by ‘{default: {A: {B: C}, D: E}, F: {A: {B: G}}, H: {D: I}}‘ ‘xxx‘ ‘{D: J}‘ ‘F‘ ‘default‘

        更多的应用在jinja中

        {% set apache = salt[‘grains.filter_by‘]({
         ‘Debian‘: {‘pkg‘: ‘apache2‘, ‘srv‘: ‘apache2‘},
         ‘RedHat‘: {‘pkg‘: ‘httpd‘, ‘srv‘: ‘httpd‘},
        }, default=‘Debian‘) %}
                
        myapache:
          pkg.installed:
            - name: {{ apache.pkg }}
          service.running:
            - name: {{ apache.srv }}
      • get_or_set_hash

        获取或者生成hash值 例子中的50代表hash的长度

        salt ‘*‘ grains.get_or_set_hash ‘django:SECRET_KEY‘ 50

        在sls中使用

        some_mysql_user:
            mysql_user:
            	- present
              - host: localhost
              - password: {{ salt[‘grains.get_or_set_hash‘](‘mysql:some_mysql_user‘) }}
      • has_value

        判断给定的key有没有值

        salt ‘*‘ grains.has_value systemd:version
  • 列出所有模块

    salt ‘*‘ sys.list_modules
  • 列出所有函数

    salt ‘*‘ sys.list_functions

相关推荐