zoukankan      html  css  js  c++  java
  • saltstack通过state模块定义主机状态

    一、state的概念以及撰写第一条状态

    状态是对minion的一种描述和定义,管理人员可以不关心具体部署任务是如何完成的,只需要描述minion要到达什么状态,底层由Salt的状态模块来完成功能。
    比如我们想在所有minion主机上部署Apache,可以用过程式的方法完成:

    [root@29-server]# salt "*" pkg.install httpd
    minion-one:
        ----------
        apr:
            ----------
            new:
                1.4.8-3.el7_4.1
            old:
        apr-util:
            ----------
            new:
                1.5.2-6.el7
            old:
        httpd:
            ----------
            new:
                2.4.6-89.el7.centos.1
            old:
        httpd-tools:
            ----------
            new:
                2.4.6-89.el7.centos.1
            old:
    
    

    下面利用state模块完成部署apache:

    首先删除上面安装的apache,并创建目录:
    [root@29-server ~]# salt "*" pkg.remove httpd
    minion-one:
        ----------
        httpd:
            ----------
            new:
            old:
                2.4.6-89.el7.centos.1
                
    [root@29-server ~]# mkdir -p /srv/salt/
    [root@29-server ~]# cd /srv/salt/
    
    然后建立apache.sls文件:
    [root@29-server salt]# cat apache.sls 
    install_apache:
      pkg.installed:
        - name: httpd
        
    
    执行以下命令:
    [root@29-server salt]# salt "*" state.sls apache
    minion-one:
    ----------
              ID: install_apache
        Function: pkg.installed
            Name: httpd
          Result: True
         Comment: The following packages were installed/updated: httpd
         Started: 10:05:57.431330
        Duration: 25387.143 ms
         Changes:   
                  ----------
                  httpd:
                      ----------
                      new:
                          2.4.6-89.el7.centos.1
                      old:
    
    Summary for minion-one
    ------------
    Succeeded: 1 (changed=1)
    Failed:    0
    ------------
    Total states run:     1
    Total run time:  25.387 s
    
    在执行一次:
    [root@29-server salt]# salt "*" state.sls apache
    minion-one:
    ----------
              ID: install_apache
        Function: pkg.installed
            Name: httpd
          Result: True
         Comment: All specified packages are already installed
         Started: 10:07:34.892568
        Duration: 2866.866 ms
         Changes:   
    
    Summary for minion-one
    ------------
    Succeeded: 1
    Failed:    0
    ------------
    Total states run:     1
    Total run time:   2.867 s
    

    从返回结果可以看出httpd软件已经安装过了,如果多次运行上面的命令会得到相同的结果。这就表明了执行模块和状态模块之间的主要区别——执行模块是过程式的,而状态模块则是描述性的。这是什么意思呢?当你连续几次调用同一个执行模块时,实际上将执行相同的逻辑和指令。而状态模块则恰恰相反,状态模块设计为描述性的,它们只是执行必要的工作,在目标minion上创建根据描述文件指定的状态。

    二、状态配置文件的各个要素

    1.salt sls文件使用语言及规则

    Salt默认的SLS文件的renderer是YAML renderer。YAML是一个有很多强大特性的标记性语言。Salt使用了一个YAML的小型子集,映射非常常用的数据结构,像列表和字典。YAML renderer的工作是将YAML数据格式的结构编译成为Python数据结构给Salt使用。只要记住三个非常简单的规则就可以使用YAML语法写SLS文件了。

    (1).缩进:不能使用tab,每个缩进级别必须由两个空格组成。
    (2).冒号:在每个冒号后边需要加一个空格。
    (3).用一个短横杠加一个空格来表示列表项。多个项使用同样的缩进级别作为同一列表的一部分。

    2.salt sls文件格式

    <ID Declaration>: 
      <State Module>.<Function>: 
        - name: < name> 
        - <Function Arg> 
        - <Function Arg> 
        - <Function Arg> 
        - <Requisite Declaration>:
          - <Requisite Reference>
    

    每个状态的 字符串必须独一无二。可以包含 字母、数字、空格和下画线,只需要是一个有效的Python字符串,ID尽量保持简洁明了。.< Function>: 远程执行的状态模块命令。

    最后是函数参数。首个参数通常是name,然后是状态所需的其他参数。这里的不同点是所有使用的模块都是状态模块而不是普通的远程执行模块。

    三、常用的状态模块用法

    获取所有状态模块以及某个模块所有函数的命令:

    [root@29-server ~]# salt "*" sys.list_state_modules
    [root@29-server ~]# salt "*" sys.list_state_functions pkg
    [root@29-server ~]#salt "minion-one" sys.state_doc cmd.run
    

    1.file模块

    file.managed    下发文件,确保文件存在  
    file.directory  建立目录  
    file.symlink    建立软连接  
    file.recurse    下发整个目录
    file.directory  创建目录
    file.tidied:    查找匹配的文件或目录删除,如果没有不做操作
        - name: {{tomcat_dir}}/webapps/
        - rmdirs: True
        - matches:
          - gcreport
          - gcreport.war
    

    四、使用requisites对状态进行排序

    require:本state执行时需要先执行那些state
    require_in:与require位置相反
    watch:除了require外,也会监测依赖的state的状态,如果状态发生变化,做出反应(例如监控文件变化,发生变化后立即重启服务)
    watch_in: 与watch位置相反
    prereq:0.16.0 新增的功能,会通过test=True接口检查所依赖的state的状态,如果状态发生变化,执行
    prereq_in:相反

  • 相关阅读:
    jquery 获取 input type radio checked的元素
    各种js验证规则
    centos7 vsftp xftp 解决无法显示远程文件夹,可登陆
    js浮点运算精度丢失的解决办法
    ThinkPHP 改装后的分页类
    亚马逊AWS开启之路
    上慕课从这里开始 (www-mooc.com)
    iptables httpd.conf详解
    微信带链接的文本消息推送
    IE8不支持响应式设计解决方法
  • 原文地址:https://www.cnblogs.com/wangyajian/p/11633678.html
Copyright © 2011-2022 走看看