zoukankan      html  css  js  c++  java
  • CONFIGURATION MANAGEMENT(第一部分)

    CONFIGURATION MANAGEMENT(第一部分)

    salt有一个强大而灵活的配置框架,它建立在远程执行模块的核心上,可以通过指定语言编写的sls文件轻易的在上万台主机上执行。

    states的介绍:
      使用一个精简容易阅读和理解的配置文件表示主机状态。
      Full list of states
        包含一系列的states模块,譬如pkg,group功能模块等
      Pillar System
        关于pillar变量系统的描述
      Highstate data structure
        高级state文件的结构和语法定义
      Writing states
        如何管理和编写一个states文件,并且去扩展更多的功能

    注意:
      执行模块和状态模块是有所区别的,执行模块参考:
      https://docs.saltstack.com/en/latest/ref/modules/all/index.html
      使用示例:
      salt '*' user.add name <uid> <gid> <groups> <home> <shell>
      状态模块是让目标达成一种预定的配置状态,不能在state文件中直接使用执行模块,可以通过module states来调用执行模块。

    示例:

     1 moe:
     2   user.rename:
     3     - new_name: larry
     4     - onlyif: id moe
     5 
     6 rename_moe:
     7   module.run:
     8     - m_name: moe
     9     - new_name: larry
    10     - onlyif: id moe
    View Code

    Renderers

    渲染器,salt使用模板语言来组织sls文件的格式和逻辑。

    Full list of renderers

    支持的模板使用列表,参考链接:

      https://docs.saltstack.com/en/2016.11/ref/renderers/all/index.html#all-salt-renderers


    HOW DO I USE SALT STATES?

    salt state配置的非常简单,同时也非常强大,salt系统的核心在于state文件,它作为一种状态的表示,使用简单的格式包装这些配置数据。


    IT IS ALL JUST DATA

      sls文件是由字典,列表,数字,字符串组成的一个数据结构。


    THE TOP FILE

      作为一个入口文件,定义了minion主机与sls文件之间的对应关系。


    DEFAULT DATA - YAML

    默认sls文件使用yaml格式组织起来。
    一个典型的sls文件示例:

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

    第一行:ID Declaration(声明),可以设置为被操作事务的名称。
    第二,三行:<state_module>.<function>,state模块和函数声明:
    最后两行:require定义了依赖关系,确保会先成功执行了pkg之后再执行服务启动。


    ADDING CONFIGS AND USERS

     1 apache:
     2   pkg.installed: []
     3   service.running:
     4     - watch:
     5       - pkg: apache
     6       - file: /etc/httpd/conf/httpd.conf
     7       - user: apache
     8   user.present:
     9     - uid: 87
    10     - gid: 87
    11     - home: /var/www/html
    12     - shell: /bin/nologin
    13     - require:
    14       - group: apache
    15   group.present:
    16     - gid: 87
    17     - require:
    18       - pkg: apache
    19 
    20 /etc/httpd/conf/httpd.conf:
    21   file.managed:
    22     - source: salt://apache/httpd.conf
    23     - user: root
    24     - group: root
    25     - mode: 644
    View Code

    这个示例极大的扩展了许多功能,如下简要说明:
    (1)ID声明使用apache,并充当里面state模块的name参数,当然也可以使用内部的name参数来覆盖。
    (2)一个ID状态声明包含了多个state模块状态,但是一个模块状态只能包含一个函数
    (3)使用require和watch定义了配置之间的依赖关系,配置起来更为灵活
    注意:watch与require的功能相似,但是watch要比require多一个监视功能,如果对象发生变化会触发动作。


    MOVING BEYOND A SINGLE SLS

    如果要将配置结构设计成可扩展灵活的形式,就需要将sls文件进行分类,这些sls文件被组织在一个state数状结构中。
    示例:

    1 apache/init.sls
    2 apache/httpd.conf
    View Code

    注意:在sls文件的命名中不要使用点号,这样会导致top文件引用是识别文件名错误。

    以下是一个较为复杂的示例:

    ssh/init.sls:

     1 openssh-client:
     2   pkg.installed
     3 
     4 /etc/ssh/ssh_config:
     5   file.managed:
     6     - user: root
     7     - group: root
     8     - mode: 644
     9     - source: salt://ssh/ssh_config
    10     - require:
    11       - pkg: openssh-client
    12 
    13 ssh/server.sls:
    14 
    15 include:
    16   - ssh
    17 
    18 openssh-server:
    19   pkg.installed
    20 
    21 sshd:
    22   service.running:
    23     - require:
    24       - pkg: openssh-client
    25       - pkg: openssh-server
    26       - file: /etc/ssh/banner
    27       - file: /etc/ssh/sshd_config
    28 
    29 /etc/ssh/sshd_config:
    30   file.managed:
    31     - user: root
    32     - group: root
    33     - mode: 644
    34     - source: salt://ssh/sshd_config
    35     - require:
    36       - pkg: openssh-server
    37 
    38 /etc/ssh/banner:
    39   file:
    40     - managed
    41     - user: root
    42     - group: root
    43     - mode: 644
    44     - source: salt://ssh/banner
    45     - require:
    46       - pkg: openssh-server
    View Code

    看点:
    (1)state文件结构组织比较合理,将客户端和服务端状态进行分离
    (2)使用include将ssh文件导入到server状态文件中,实现重用
    (3)定义了完整合理的依赖关系


    EXTENDING INCLUDED SLS DATA

    示例:

    ssh/custom-server.sls:

    1 include:
    2   - ssh.server
    3 
    4 extend:
    5   /etc/ssh/banner:
    6     file:
    7       - source: salt://ssh/custom-banner
    View Code

    python/mod_python.sls:
    示例:

     1 include:
     2   - apache
     3 
     4 extend:
     5   apache:
     6     service:
     7       - watch:
     8         - pkg: mod_python
     9 
    10 mod_python:
    11   pkg.installed
    View Code

    看点:
    (1)示例1使用extend将/etc/ssh/banner state状态的source参数重新配置,实现灵活的变更
    (2)示例2使用extend为apache模块添加依赖关系,并增加了一个依赖状态模块mod_python

    注意:extend功能只是进行附加,而不是像watch和require那样引进一个完整的状态。


    UNDERSTANDING THE RENDER SYSTEM

    理解模板引擎

    sls文件默认使用yaml_jinja,整个sls文件使用jinja模板渲染之后,再序列化成yaml的文档格式,jinja模板可用在state模块函数中。


    GETTING TO KNOW THE DEFAULT - YAML_JINJA

    示例:

     1 apache:
     2   pkg.installed:
     3     {% if grains['os'] == 'RedHat'%}
     4     - name: httpd
     5     {% endif %}
     6   service.running:
     7     {% if grains['os'] == 'RedHat'%}
     8     - name: httpd
     9     {% endif %}
    10     - watch:
    11       - pkg: apache
    12       - file: /etc/httpd/conf/httpd.conf
    13       - user: apache
    14   user.present:
    15     - uid: 87
    16     - gid: 87
    17     - home: /var/www/html
    18     - shell: /bin/nologin
    19     - require:
    20       - group: apache
    21   group.present:
    22     - gid: 87
    23     - require:
    24       - pkg: apache
    25 
    26 /etc/httpd/conf/httpd.conf:
    27   file.managed:
    28     - source: salt://apache/httpd.conf
    29     - user: root
    30     - group: root
    31     - mode: 644
    View Code

    看点:
      以上的示例演示的是在sls文件中使用jinja模板,在jinja模板中salt,grains,pillar都可以使用,允许调用salt函数(指的是执行模块),非常强大,

    下面以部署moosefs为例来讲解模板的一些复杂使用方法:
    moosefs/chunk.sls:

     1 include:
     2   - moosefs
     3 
     4 {% for mnt in salt['cmd.run']('ls /dev/data/moose*').split() %}
     5 /mnt/moose{{ mnt[-1] }}:
     6   mount.mounted:
     7     - device: {{ mnt }}
     8     - fstype: xfs
     9     - mkmnt: True
    10   file.directory:
    11     - user: mfs
    12     - group: mfs
    13     - require:
    14       - user: mfs
    15       - group: mfs
    16 {% endfor %}
    17 
    18 /etc/mfshdd.cfg:
    19   file.managed:
    20     - source: salt://moosefs/mfshdd.cfg
    21     - user: root
    22     - group: root
    23     - mode: 644
    24     - template: jinja
    25     - require:
    26       - pkg: mfs-chunkserver
    27 
    28 /etc/mfschunkserver.cfg:
    29   file.managed:
    30     - source: salt://moosefs/mfschunkserver.cfg
    31     - user: root
    32     - group: root
    33     - mode: 644
    34     - template: jinja
    35     - require:
    36       - pkg: mfs-chunkserver
    37 
    38 mfs-chunkserver:
    39   pkg.installed: []
    40 mfschunkserver:
    41   service.running:
    42     - require:
    43 {% for mnt in salt['cmd.run']('ls /dev/data/moose*') %}
    44       - mount: /mnt/moose{{ mnt[-1] }}
    45       - file: /mnt/moose{{ mnt[-1] }}
    46 {% endfor %}
    47       - file: /etc/mfschunkserver.cfg
    48       - file: /etc/mfshdd.cfg
    49       - file: /var/lib/mfs
    View Code

    看点:
    (1)使用了salt执行模块cmd.run。
    (2)使用了模板的for逻辑处理结构


    INTRODUCING THE PYTHON, PYDSL, AND THE PYOBJECTS RENDERERS

    使用额外的其他模板
    示例:

    python/django.sls:

    1 #!py
    2 
    3 def run():
    4     '''
    5     Install the django package
    6     '''
    7     return {'include': ['python'],
    8             'django': {'pkg': ['installed']}}
    View Code

    sls文件的第一行表示使用py渲染器解释,再定义一个run函数,返回值设置为一个符合salt要求的数据结构。

    示例:

    1 #!pydsl
    2 
    3 include('python', delayed=True)
    4 state('django').pkg.installed(
    View Code

    示例:

    1 #!pyobjects
    2 
    3 include('python')
    4 Pkg.installed("django")
    View Code

    说明:使用YAML是一个好的选择,同时使用纯python的sls文件可以获得更加复杂强大的功能。


    RUNNING AND DEBUGGING SALT STATES

    在准备运行sls文件的时候,最好先测试运行一下,示例:
    在minion端运行:
      salt-call state.apply -l debug
    或则打开前台运行观察详细执行情况
      salt-minion -l debug

  • 相关阅读:
    iOS中图片与视频一次性多选
    UIImagePickerController Class
    1月16日
    10月20日
    1月14日
    1月13日
    1月12日
    1月11日
    课程评价与建议
    加分总结
  • 原文地址:https://www.cnblogs.com/solitarywares/p/7492557.html
Copyright © 2011-2022 走看看