STATE MANAGEMENT

Posted 孤独的海浪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STATE MANAGEMENT相关的知识,希望对你有一定的参考价值。

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端应用。

 











以上是关于STATE MANAGEMENT的主要内容,如果未能解决你的问题,请参考以下文章

Flutter State Management状态管理全面分析

Flutter 报错 DioError [DioErrorType.DEFAULT]: Bad state: Insecure HTTP is not allowed by platform(代码片段

SQL server management studio的基本使用

Backstack management : Restarter 只能在所有者初始化阶段创建

linux串口编程(termios)相关的使用问题

极智开发 | 讲解 React 组件三大属性之一:state