设为首页 收藏本站
查看: 1213|回复: 0

[经验分享] saltstack的深入-highstate概念

[复制链接]

尚未签到

发表于 2018-8-1 06:59:20 | 显示全部楼层 |阅读模式
  
一、初识
  
1、HIGHSTATE 数据结构的定义
  

  
1)salt状态树(THE SALT STATE TREE)
  
状态树(state tree) 指的是在file_roots中定义的目录下分类保存,供模块(module)调用的那些sls文件。
  

  
2)入口文件(TOP FILE)
  
一个入口状态(state)文件 可以在state执行时指示 minions 在什么环境(env)和模块(module)下使用
  

  
3)包含申明(INCLUDE DECLARATION)
  
定义一个列表,包括要引用的模块名称。
  
生效:位于highstate的顶层(top level)
  
举例:
  
include:
  
  - edit.vim
  
  - http.server
  

  
4)模块引用(MODULE REFERENCE)
  
sls模块名称。例如模块名“edit.vim”代表 salt://edit/vim.sls 这个sls文件,位于Salt Master上file_roots下定义的路径(默认是/srv/salt/)/srv/salt/edit/vim.sls
  

  
5)ID申明(ID DECLARATION)
  
定义一个独立的 highstate 组件(component),包括State declaration 和 Requisite declaration中的key-value,可以被Name declaration 或 Names declaration覆盖。
  

  
生效:位于顶层或在Extend declaration下面一层
  
要求:在整个state tree中是唯一的,如果有多个同样的的id,则第一个被匹配的生效。
  

  
6)扩展申明(EXTEND DECLARATION)
  
扩展某个要include的sls模块中的 Name declaration,这个扩展模块中的key和要include的那个sls模块中的ID declaration关联一致。
  

  
生效:位于顶层,定义了一个字典
  
注意:在一个单独的state运行时只能被扩展一次。
  

  
7)状态申明(STATE DECLARATION)
  
一个列表,包括一个字符串代表了函数申明(Function declaration),和多个函数的参数申明(Function arg declaration)的字典(dict)
  
可以包括许多附加组件(component),例如名称覆盖组件(name和names),必要条件申明(requisite declarations)
  
生效:位于ID declaration下面一层
  

  
8)必要条件申明(REQUISITE DECLARATION)
  
包括一系列的必要条件,用来建立行为依赖树(the action dependency tree)。
  
Salt的状态同步执行时是有一个明确的顺序,这个顺序的确定,需要依赖和观察( requiring and watching )其他的状态(Salt states)
  
生效:位于ID declaration下面一层,作为一个组件列表或者一个key
  
Occurs as a list component under a State declaration or as a key under an ID declaration.
  

  
9)必要条件引用(REQUISITE REFERENCE)
  
一个单独的字典,key和State declaration一致,value和ID declaration一致
  
生效:位于Requisite declaration下面一层
  

  
10)函数申明(FUNCTION DECLARATION)
  
要调用的函数名称。
  
生效:
  
注意:一个状态申明(state declaration)只能包括一个函数申明
  
举例:在状态模块(state module)pkg中调用函数“installed”:
  
httpd:
  
  pkg.installed: []
  

  
函数和状态在一行(inline)被简短的申明。实际上,数据结构被编译成这样:
  
httpd:
  
  pkg:
  
    - installed
  
函数是状态申明(state declaration)中的一个字符串。
  
从技术上而言,当函数以圆点记法“.”的方式申明时,编译器会转换成状态申明列表(state declaration list)中的一个字符串。
  

  
如下是错误的申明:
  
httpd:
  
  pkg.installed
  
  service.running
  
当没有传参给函数, 且后续还有其他的状态申明,则要使用标准格式,否则将不是一个有效的数据结构。
  

  
这才是正确的:
  
httpd:
  
  pkg.installed: []
  
  service.running: []
  
生效:位于State declaration下面一层
  

  
11)函数参数申明(FUNCTION ARG DECLARATION)
  
一个字典传递给函数
  
生效:位于Function declaration下面一层
  
举例:在下面的状态申明中, user, group, and mode 作为参数传递给函数“managed”:
  

  
/etc/http/conf/http.conf:
  
  file.managed:
  
    - user: root
  
    - group: root
  
    - mode: 644
  

  
12)name申明(NAME DECLARATION)
  
重写一个状态申明中的name参数,如果未指定name,则“ID declaration”将作为name参数
  
举例:重写name的用法很多,如避免ID申明冲突,例如下面的例子中,2个状态申明不能同时将/etc/motd作为ID申明:
  

  
motd_perms:
  
  file.managed:
  
    - name: /etc/motd
  
    - mode: 644
  

  
motd_quote:
  
  file.append:
  
    - name: /etc/motd
  
    - text: "Of all smells, bread; of all tastes, salt."
  

  
另一个通常的原因是,如果ID申明很长,又需要在多个地方引用。例如下面的例子,用mywebsite 来替代 /etc/apache2/sites-available/mywebsite.com即可:
  
mywebsite:
  
  file.managed:
  
    - name: /etc/apache2/sites-available/mywebsite.com
  
    - source: salt://mywebsite.com
  

  
a2ensite mywebsite.com:
  
  cmd.wait:
  
    - unless: test -L /etc/apache2/sites-enabled/mywebsite.com
  
    - watch:
  
      - file: mywebsite
  

  
apache2:
  
  service.running:
  
    - watch:
  
      - file: mywebsite
  

  
13)names申明(NAMES DECLARATION)
  
将状态申明的内容展开为多个状态申明,每个都有自己的name
  
举例:有这样一个申明:
  
python-pkgs:
  
  pkg.installed:
  
    - names:
  
      - python-django
  
      - python-crypto
  
      - python-yaml
  
转换成lowstate data structure 则变成:
  

  
python-django:
  
  pkg.installed
  

  
python-crypto:
  
  pkg.installed
  

  
python-yaml:
  
  pkg.installed
  

  
通过一个附加的字典,可以在展开时改写一些值,例如:
  
New in version 2014.7.0.
  

  
ius:
  
  pkgrepo.managed:
  
    - humanname: IUS Community Packages for Enterprise Linux 6 - $basearch
  
    - gpgcheck: 1
  
    - baseurl: http://mirror.rackspace.com/ius/stable/CentOS/6/$basearch
  
    - gpgkey: http://dl.iuscommunity.org/pub/ius/IUS-COMMUNITY-GPG-KEY
  
    - names:
  
        - ius
  
        - ius-devel:
  
            - baseurl: http://mirror.rackspace.com/ius/development/CentOS/6/$basearch
  

  
2、LARGE EXAMPLE
  
这是一个yaml的布局:
  

  
<Include Declaration>:
  
  - <Module Reference>
  
  - <Module Reference>
  

  
<Extend Declaration>:
  
  <ID Declaration>:
  
    [<overrides>]
  

  

  
# 标准申明(standard declaration)
  

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

  

  
# 函数内嵌(inline function and names)
  

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

  

  
# multiple states for single id
  

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

  

  

  

  

  

  

  
ZYXW、参考
  
1、doc
  
http://docs.saltstack.com/en/latest/ref/states/highstate.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-544381-1-1.html 上篇帖子: 轻松使用SaltStack管理成千上万台服务器(入门教程) 下篇帖子: saltstack的深入-再次理解file_roots,state,pillar和highstate的使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表