zoukankan      html  css  js  c++  java
  • STATES TUTORIAL(第五部分)

    EXTENDING EXTERNAL SLS DATA

    扩展额外的sls数据,当一个sls文件需要被局部修改的时候,譬如当一个state文件需要添加watch条件的时候。


    THE EXTEND DECLARATION

    通过extend扩展sls数据,一般通过include导入一个ID declaration。
    示例:

     1 include:
     2   - http
     3   - ssh
     4 
     5 extend:
     6   apache:
     7     file:
     8       - name: /etc/httpd/conf/httpd.conf
     9       - source: salt://http/httpd2.conf
    10   ssh-server:
    11     service:
    12       - watch:
    13         - file: /etc/ssh/banner
    14 
    15 /etc/ssh/banner:
    16   file.managed:
    17     - source: salt://ssh/banner
    View Code

    (1)重写apache声明的file模块的name,source参数。
    (2)为ssh-server声明的service模块添加一个依赖关系/etc/ssh/banner


    EXTEND IS A TOP LEVEL DECLARATION

    EXTEND是一个顶级的声明,所以一个sls文件中只能使用一个extend块。
    错误的一个示例:

     1 include:
     2   - http
     3   - ssh
     4 
     5 extend:
     6   apache:
     7     file:
     8       - name: /etc/httpd/conf/httpd.conf
     9       - source: salt://http/httpd2.conf
    10 # Second extend will overwrite the first!! Only make one
    11 extend:
    12   ssh-server:
    13     service:
    14       - watch:
    15         - file: /etc/ssh/banner
    View Code

    THE REQUISITE "IN" STATEMENT

    在sls文件中使用IN语法
    将上面的例子利用IN逻辑进行重写,这样显得逻辑更加清晰。

    1 include:
    2   - ssh
    3 
    4 /etc/ssh/banner:
    5   file.managed:
    6     - source: salt://ssh/banner
    7     - watch_in:
    8       - service: ssh-server
    View Code

    解析:
    上面的extend例子扩展ssh-server的service模块,添加一个watch依赖条件,而在下面的示例则添加了一个/etc/ssh/banner新的ID声明,利用watch_in与ssh-server关联起来,一个是在ID声明里面定义一个依赖,一个是声明一个新ID定义一个被依赖。

    #####################################################################################

    FAILHARD GLOBAL OPTION

    failhard全局选项

    有时候执行一个state文件的时候,除了执行使用require等有依赖关系的ID声明以外,我们可能需要定义一个全局选项,当这个ID声明执行失败的时候,整个state文件停止执行。

    1 /etc/yum.repos.d/company.repo:
    2   file.managed:
    3     - source: salt://company/yumrepo.conf
    4     - user: root
    5     - group: root
    6     - mode: 644
    7     - order: 1
    8     - failhard: True
    View Code

    因为部署环境的基础一般建立在yum源上,所以当包源配置出现故障的时候,应当停止其他的state模块执行。


    GLOBAL FAILHARD

    在全局配置中使用FAILHARD选项

    有时候我们可能想在执行所有state文件的时候,只要一个ID执行失败就停止其余的ID执行,这时候我们不需要在每一个
    state中定义FAILHARD,可以在master配置文件中定义FAILHARD选项,作为全局配置。

    #####################################################################################

    HIGHSTATE DATA STRUCTURE DEFINITIONS

    THE SALT STATE TREE

    sls文件和目录被定义在file_roots里面,state tree下面的文件和目录名必须不包含点号。


    TOP FILE

    主state文件,用于引导minion执行时使用什么环境和模块,配置路径在master的配置文件中state_top选项。


    INCLUDE DECLARATION

    include出现在sls数据结构的最顶级
    示例:

    1 include:
    2   - edit.vim
    3   - http.server
    View Code

    MODULE REFERENCE

    sls模块文件作为一个独立的sls文件被定义,放在salt master里面,譬如edit.vim就会被通过salt://edit/vim.sls引用。


    ID DECLARATION

    作为highstate的一个组件,总是包含一个state声明和一个Requisite declaration,能被一个Name declaration或Names declaration重写。

    位于顶层结构的下面或extend声明的下面。在整个状态树下ID声明必须是唯一的,如果有多个其余的会被忽略掉,只有第一个被使用,因为所有的ID声明在一个命名空间中。


    EXTEND DECLARATION

    在一个include的sls模块中extend一个name declaration的前提需要是这个name declaration在include进来的sls文件中已存在。

    注意:
      (1)extend只位于顶层结构中
      (2)一个sls文件只能有一个extend扩展

    在增加或重写State declaration的时候EXTEND DECLARATION是非常有用的,最常用的就是添加一个watch或require条件等。
    示例:

     1 include:
     2   - apache
     3 
     4 extend:
     5   apache:
     6     service:
     7       - watch:
     8         - file: mywebsite
     9 
    10 mywebsite:
    11   file.managed:
    12     - name: /var/www/mysite
    View Code

    STATE DECLARATION

    一个包含Function declaration和任意数目的Function arg declaration键值对形成的列表。
    可选的,一些额外的组件,如重写部分,name和names,也可以包含一些requisite declarations,被放在ID declaration下面。


    REQUISITE DECLARATION

    必要的声明

    用于构建依赖关系的必要部分,当state以一种特定的顺序进行执行的时候,它可以通过require和watch约束salt state文件的执行。作为 State declaration下的一个列表组件或ID declaration下的一个键。


    REQUISITE REFERENCE

    一个简单的键字典,键的名称是State declaration值是ID declaration


    FUNCTION DECLARATION

    函数声明被包含在state里面,一个state只能包含一个函数声明。
    示例:

    1 httpd:
    2   pkg.installed: []
    View Code

    或这样的内联格式

    1 httpd:
    2   pkg:
    3     - installed
    View Code

    当在一个ID声明中使用多个函数时,需要使用标准格式,如果参数没有也需要定义一个空列表。
    示例:

    1 httpd:
    2   pkg.installed: []
    3   service.running: []
    View Code

    FUNCTION ARG DECLARATION 

    函数参数定义

    使用一个或多个简单的键值对作为参数传递给Function declaration。
    示例:

    1 /etc/http/conf/http.conf:
    2   file.managed:
    3     - user: root
    4     - group: root
    5     - mode: 644
    View Code

    NAME DECLARATION

    name定义

    重写State declaration里面的name参数,如果name参数没有被定义的话,默认使用ID declaration。
    示例:

    1 motd_perms:
    2   file.managed:
    3     - name: /etc/motd
    4     - mode: 644
    5 
    6 motd_quote:
    7   file.append:
    8     - name: /etc/motd
    9     - text: "Of all smells, bread; of all tastes, salt."
    View Code

    由于可能存在多个name参数值是相同的,这种情况下就不能使用ID declaration作为默认的name参数。

    重写name参数的另一个原因可能是由于ID declaration太长了,不便于引用。
    示例:

     1 mywebsite:
     2   file.managed:
     3     - name: /etc/apache2/sites-available/mywebsite.com
     4     - source: salt://mywebsite.com
     5 
     6 a2ensite mywebsite.com:
     7   cmd.wait:
     8     - unless: test -L /etc/apache2/sites-enabled/mywebsite.com
     9     - watch:
    10       - file: mywebsite
    11 
    12 apache2:
    13   service.running:
    14     - watch:
    15       - file: mywebsite
    View Code

    NAMES DECLARATION

    names参数定义

    从一个State declaration扩展到多个state declarations的时候,可以使用names参数:

    1 python-pkgs:
    2   pkg.installed:
    3     - names:
    4       - python-django
    5       - python-crypto
    6       - python-yaml
    View Code

    一旦转换成底层的数据结构会变成一下数据结构:

    1 python-django:
    2   pkg.installed
    3 
    4 python-crypto:
    5   pkg.installed
    6 
    7 python-yaml:
    8   pkg.installed
    View Code

    可以通过设置额外的字典结构重写部分参数:
    示例:

     1 ius:
     2   pkgrepo.managed:
     3     - humanname: IUS Community Packages for Enterprise Linux 6 - $basearch
     4     - gpgcheck: 1
     5     - baseurl: http://mirror.rackspace.com/ius/stable/CentOS/6/$basearch
     6     - gpgkey: http://dl.iuscommunity.org/pub/ius/IUS-COMMUNITY-GPG-KEY
     7     - names:
     8         - ius
     9         - ius-devel:
    10             - baseurl: http://mirror.rackspace.com/ius/development/CentOS/6/$basearch
    View Code

    添加了两个name参数,相当于设置了两个repo源。


    LARGE EXAMPLE

    一个较大的示例,一个使用yaml格式的数据格式:

     1 <Include Declaration>:
     2   - <Module Reference>        #模块函数,state modules
     3   - <Module Reference>
     4 
     5 <Extend Declaration>:        #重写已存在的ID declaration
     6   <ID Declaration>:
     7     [<overrides>]
     8 
     9 
    10 # standard declaration
    11 
    12 <ID Declaration>:
    13   <State Module>:
    14     - <Function>
    15     - <Function Arg>
    16     - <Function Arg>
    17     - <Function Arg>
    18     - <Name>: <name>
    19     - <Requisite Declaration>:
    20       - <Requisite Reference>
    21       - <Requisite Reference>
    22 
    23 
    24 # inline function and names
    25 
    26 <ID Declaration>:
    27   <State Module>.<Function>:
    28     - <Function Arg>
    29     - <Function Arg>
    30     - <Function Arg>
    31     - <Names>:
    32       - <name>
    33       - <name>
    34       - <name>
    35     - <Requisite Declaration>:
    36       - <Requisite Reference>
    37       - <Requisite Reference>
    38 
    39 
    40 # multiple states for single id
    41 
    42 <ID Declaration>:
    43   <State Module>:
    44     - <Function>
    45     - <Function Arg>
    46     - <Name>: <name>
    47     - <Requisite Declaration>:
    48       - <Requisite Reference>
    49   <State Module>:
    50     - <Function>
    51     - <Function Arg>
    52     - <Names>:
    53       - <name>
    54       - <name>
    55     - <Requisite Declaration>:
    56       - <Requisite Reference>
    View Code

    以上是一个相当全的一个模板示例,但是具体的使用方法还需要参考具体的模块和参数的使用方法。

  • 相关阅读:
    Eclipse配置Maven3.5
    VM搭建Hadoop环境静态IP未起作用
    Word2010制作倒福字
    Word2010制作日历
    【整理】HTML5游戏开发学习笔记(1)- 骰子游戏
    [转载]HTML5开发入门经典教程和案例合集(含视频教程)
    [转载]如何做到 jQuery-free?
    [转载]教你如何塑造JavaScript牛逼形象
    Cloud9免费云IDE代码编辑平台空间支持Node.js,PHP,Python可使用FTP管理
    [转载]PayPal为什么从Java迁移到Node.js,性能提高一倍,文件代码减少44%
  • 原文地址:https://www.cnblogs.com/solitarywares/p/7513015.html
Copyright © 2011-2022 走看看