zoukankan      html  css  js  c++  java
  • STATES TUTORIAL, PART 1

    STATES TUTORIAL, PART 1 - BASIC USAGE(第二部分)

    SETTING UP THE SALT STATE TREE
    在master设置file_roots

    示例:

    1 file_roots:
    2   base:
    3     - /srv/salt
    View Code

    重启master
      pkill salt-master
      salt-master -d


    PREPARING THE TOP FILE

    配置top入口文件

    1 base:
    2   '*':
    3     - webserver
    View Code

    说明:top文件可以起到隔离环境的作用,默认环境为base,在base环境下对指定的minion进行匹配,匹配方式支持非常广泛。


    CREATE AN SLS FILE
    示例:

    1 apache:                 # ID declaration,可以为任意值,默认作为函数的参数
    2   pkg:                  # state declaration,指定状态模块
    3     - installed         # function declaration,指定对应状态模块的函数
    View Code

    INSTALL THE PACKAGE

    在定义好top文件和编写好sls文件之后,minion端会从master端下载top文件,并进行匹配,匹配则执行定义的配置内容。
    示例:
      salt '*' state.apply

    注意:state.apply与state.highstate的区别

    1 state.apply invoked without any SLS names will run state.highstate
    2     当运行state.apply没有指定sls文件的时候,会运行state.highstate,也就是运行top中定义的所有sls文件。
    3 state.apply invoked with SLS names will run state.sls
    4     当运行state.apply指定了sls文件的时候,会运行state.sls
    View Code

    SLS File Namespace

    1 1、.sls的文件后缀是被去掉的,譬如webserver.sls被引用为webserver
    2 2、webserver.dev被识别为webserver/dev.sls,webserver_1.0.sls不能被识别,webserver_1.0被识别为webserver_1/0.sls
    3 3、webserver/init.sls被识别为webserver
    4 4、如果webserver.sls和webserver/init.sls同时存在,webserver/init.sls将被忽略
    View Code

    Troubleshooting Salt

    故障排查

    (1)Turn up logging
        打开日志

        salt-minion -l debug

    (2)Run the minion in the foreground
        前台运行,不使用-d参数

    1 salt-minion
    2 salt -t 60
    3 salt-minion -l debug        # On the minion
    4 salt '*' state.apply -t 60  # On the master
    View Code

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

    STATES TUTORIAL, PART 2 - MORE COMPLEX STATES, REQUISITES

    更复杂的state文件和组件

    CALL MULTIPLE STATES

    为一个安装apache包添加一个依赖条件

    1 apache:
    2   pkg.installed: []
    3   service.running:
    4     - require:
    5       - pkg: apache
    View Code

    REQUIRE OTHER STATES

    建立state状态之间的依赖关系

    示例:

     1 apache:
     2   pkg.installed: []
     3   service.running:
     4     - require:
     5       - pkg: apache
     6 
     7 /var/www/index.html:                        # ID declaration
     8   file:                                     # state declaration
     9     - managed                               # function
    10     - source: salt://webserver/index.html   # function arg
    11     - require:                              # requisite declaration
    12       - pkg: apache                         # requisite reference
    View Code

    require vs. watch

      这两个Requisite declaration,由于不是每一个state支持watch,service state支持watch,它将根据watch设定的条件重启服务。

    示例:

     1 /etc/httpd/extra/httpd-vhosts.conf:
     2  file.managed:
     3    - source: salt://webserver/httpd-vhosts.conf
     4 
     5 apache:
     6   pkg.installed: []
     7   service.running:
     8     - watch:
     9       - file: /etc/httpd/extra/httpd-vhosts.conf
    10     - require:
    11       - pkg: apache
    View Code

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

    STATES TUTORIAL, PART 3 - TEMPLATING, INCLUDES, EXTENDS

    模板,include,extend


    TEMPLATING SLS MODULES

    在sls中使用模板
    示例:

    1 {% for usr in ['moe','larry','curly'] %}
    2 {{ usr }}:
    3   user.present
    4 {% endfor %}
    View Code

    渲染后的结果:

    1 moe:
    2   user.present
    3 larry:
    4   user.present
    5 curly:
    6   user.present
    View Code

    示例1:

     1 {% for usr in 'moe','larry','curly' %}
     2 {{ usr }}:
     3   group:
     4     - present
     5   user:
     6     - present
     7     - gid_from_name: True
     8     - require:
     9       - group: {{ usr }}
    10 {% endfor %}
    View Code

    USING GRAINS IN SLS MODULES

    在sls文件中使用grains

    1 apache:
    2   pkg.installed:
    3     {% if grains['os'] == 'RedHat' %}
    4     - name: httpd
    5     {% elif grains['os'] == 'Ubuntu' %}
    6     - name: apache2
    7     {% endif %}
    View Code

    USING ENVIRONMENT VARIABLES IN SLS MODULES

    在state文件中使用salt['environ.get']('VARNAME')的方式设置环境变量
    示例:

    1 MYENVVAR="world" salt-call state.template test.sls
    2 
    3 Create a file with contents from an environment variable:
    4   file.managed:
    5     - name: /tmp/hello
    6     - contents: {{ salt['environ.get']('MYENVVAR') }}
    View Code

    environ模块的使用链接参考:
      https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.environ.html
    譬如获取minion端的环境变量信息:
      salt '*' environ.items

    可以设置错误检查逻辑:

     1 {% set myenvvar = salt['environ.get']('MYENVVAR') %}
     2 {% if myenvvar %}
     3 
     4 Create a file with contents from an environment variable:
     5   file.managed:
     6     - name: /tmp/hello
     7     - contents: {{ salt['environ.get']('MYENVVAR') }}
     8 
     9 {% else %}
    10 
    11 Fail - no environment passed in:
    12   test.fail_without_changes
    13 
    14 {% endif %}
    View Code

    CALLING SALT MODULES FROM TEMPLATES

    在模板中使用salt执行模块
    示例:

    1 moe:
    2   user.present:
    3     - gid: {{ salt['file.group_to_gid']('some_group_that_exists') }}
    View Code

    譬如通过用户名获取组名网卡名等:
      salt 'XXX' file.group_to_gid username
      salt['network.hw_addr']('eth0')


    ADVANCED SLS MODULE SYNTAX

    sls文件语法进阶

    INCLUDE DECLARATION
    示例:

    python/python-libs.sls:

    1 python-dateutil:
    2   pkg.installed
    View Code

    python/django.sls:

    1 include:
    2   - python.python-libs
    3 
    4 django:
    5   pkg.installed:
    6     - require:
    7       - pkg: python-dateutil
    View Code

    EXTEND DECLARATION

    extend可以修改之前定义好的sls文件内容,下例是添加一个apache虚拟主机配置。

    示例:

    apache/apache.sls:

    1 apache:
    2   pkg.installed
    View Code

    apache/mywebsite.sls:

     1 include:
     2   - apache.apache
     3 
     4 extend:
     5   apache:
     6     service:
     7       - running
     8       - watch:
     9         - file: /etc/httpd/extra/httpd-vhosts.conf
    10 
    11 /etc/httpd/extra/httpd-vhosts.conf:
    12   file.managed:
    13     - source: salt://apache/httpd-vhosts.conf
    View Code

    NAME DECLARATION

    可以通过name声明重写一个ID声明
    示例:
    apache/mywebsite.sls:

     1 include:
     2   - apache.apache
     3 
     4 extend:
     5   apache:
     6     service:
     7       - running
     8       - watch:
     9         - file: mywebsite        #引用一个ID声明
    10 
    11 mywebsite:
    12   file.managed:
    13     - name: /etc/httpd/extra/httpd-vhosts.conf
    14     - source: salt://apache/httpd-vhosts.conf
    View Code

    NAMES DECLARATION

    多个name声明可以覆盖ID声明,并可以做到消除冗余状态

    1 stooges:
    2   user.present:
    3     - names:
    4       - moe
    5       - larry
    6       - curly
    View Code
  • 相关阅读:
    Linq to OBJECT延时标准查询操作符
    LINQ to XML
    动态Linq(结合反射)
    HDU 1242 dFS 找目标最短路
    HDu1241 DFS搜索
    hdu 1224 最长路
    BOJ 2773 第K个与m互质的数
    ZOJ 2562 反素数
    2016 ccpc 杭州赛区的总结
    bfs UESTC 381 Knight and Rook
  • 原文地址:https://www.cnblogs.com/solitarywares/p/7501405.html
Copyright © 2011-2022 走看看