• STATE MANAGEMENT(state文件的管理)


    STATE MANAGEMENT

    state management也被称为软件配置管理,使系统预设于一种指定的状态,譬如安装软件包,服务管理监视等。
    salt state是我们在前面的远程执行教程中讨论的salt模块的扩展,而不是调用一次性执行,系统的状态可以很容易地定义,然后强制执行。


    UNDERSTANDING THE SALT STATE SYSTEM COMPONENTS

    理解salt state系统的相关组件,了解sls文件格式和渲染机制,而作为一个开发者则需要了解怎样去编写一个更好的state文件。
    注意:states文件只在匹配指定的minion端进行编译和执行,执行函数在master被定义。

    SALT SLS SYSTEM

    salt states的简称是SLS,里面主要包含怎样去配置minion的相关信息,states文件被放在一个目录树下面,可以使用不通的格式进行编写。
    states文件的内容和它们的布局方式是尽可能简单,同时允许最大的灵活性。

    SLS FILE LAYOUT

    states文件被放在salt server端,一个简单的布局示例如下:

    1 top.sls
    2 ssh.sls
    3 sshd_config
    4 users/init.sls
    5 users/admin.sls
    6 salt/master.sls
    7 web/init.sls
    View Code

    释义:

    top.sls作为一个关键组件,定义了哪些sls文件被配置在哪些minion上。
    目录下文件都是以sls后缀结尾,如果文件没有使用sls文件结尾的话,是作为文件被发送到minion端。
    sls文件通过点号识别,users/admin.sls通过users.admin进行调用,web/init.sls被引用为web。


    SLS FILES

    salt状态文件是简单的数据集。由于SLS文件只是单纯的数据,他们可以在许多不同的方式来表达。
    salt文件默认时候包含jinja模板的yaml格式的数据,可以使用python和yaml的语言结构。
    一个简单的salt state示例:

     1 vim:
     2   pkg.installed: []
     3 
     4 salt:
     5   pkg.latest:
     6     - name: salt
     7   service.running:
     8     - names:
     9       - salt-master
    10       - salt-minion
    11     - require:
    12       - pkg: salt
    13     - watch:
    14       - file: /etc/salt/minion
    15 
    16 /etc/salt/minion:
    17   file.managed:
    18     - source: salt://salt/minion
    19     - user: root
    20     - group: root
    21     - mode: 644
    22     - require:
    23       - pkg: salt
    View Code

    上例做了一个vim,salt,salt-minion,salt-master安装和minion配置同步,并明确安装和配置之间的顺序关系


    THE TOP FILE

    top文件控制和定义了minion与states之间的映射关系,minion从哪些环境去提取执行的sls文件。
    每一个环境都包含了一个或多个minion匹配标记,每一个minion匹配都对应states文件列表。

    1 base:
    2   '*':
    3     - salt
    4     - users
    5     - users.admin
    6   'saltmaster.*':
    7     - match: pcre
    8     - salt.master
    View Code

    RELOADING MODULES

    重载模块,示例:

     1 python-pip:
     2   cmd.run:
     3     - name: |
     4         easy_install --script-dir=/usr/bin -U pip
     5     - cwd: /
     6 
     7 pep8:
     8   pip.installed:
     9     - require:
    10       - cmd: python-pip
    View Code

    执行结果会出现:

     1 ----------
     2     State: - pip
     3     Name:      pep8
     4     Function:  installed
     5         Result:    False
     6         Comment:   State pip.installed found in sls pep8 is unavailable
     7 
     8         Changes:
     9 
    10 Summary
    11 ------------
    12 Succeeded: 1
    13 Failed:    1
    14 ------------
    15 Total:     2
    View Code

    以上失败的原因是,pep8依赖于python-pip,然而pip在使用cmd命令进行更新,salt无法确定系统是否安装了pip(未重载系统包的安装状态),结果报错,再次执行却状态正常。
    注意:salt不会在每一次运行的时候都重载模块的状态,这样运行会大大降低执行的速度。

    如何避免上例的情况,可以使用reload_module,reload_module是一个布尔选项,当state设置了一个状态之后,它会强制这个状态完成并更新状态。
    示例:

     1 python-pip:
     2   cmd.run:
     3     - name: |
     4         easy_install --script-dir=/usr/bin -U pip
     5     - cwd: /
     6     - reload_modules: true
     7 
     8 pep8:
     9   pip.installed:
    10     - require:
    11       - cmd: python-pip
    View Code

    运行salt-call state.apply pep8在minion端应用。

  • 相关阅读:
    Canvas基础讲义
    封装一个DivTag
    递归深拷贝
    构造函数的执行过程
    封装一个Ajax工具函数
    数组去重
    [js开源组件开发]js多选日期控件
    自己写的表格插件autotable
    复杂表格的树形结构的添加删除行div实现
    自制html5塔防游戏
  • 原文地址:https://www.cnblogs.com/solitarywares/p/7658791.html
Copyright © 2020-2023  润新知