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

[经验分享] 集中化管理平台saltstack--state(5)

[复制链接]

尚未签到

发表于 2018-7-31 10:32:28 | 显示全部楼层 |阅读模式
  state
  state是Saltstack最核心的功能,通过预先定制好的sls(salt state file)文件对被控制主机进行状态管理,支持包括程序包(pkg)、文件(file)、网络配置(network)、系统服务(service)、系统用户(user)等。
state的定义
  state的定义是通过sls文件进行描述的,支持YAML语法,定义规则如下:
$ID: #定义state名称,通常采用与描述对象保存一致的方法,如apache、nginx等  
  $state: #须管理对象的类型
  
    - $state: states #定制对象的状态
  官网示例如下:
apache:  
  pkg:
  
    - installed
  
  service:
  
    - running
  
    - require:
  
      - pkg: apache
  注:
require:在运行此state之前,先运行依赖的state关系检查,可配置多个state依赖对象;  
watch:在检查摸个state发生变化时运行此模块。
state的使用
  state的入口文件与pillar一样,文件名都是top.sls,区别在于state要求sls文件必须存放在Saltstack base定义的目录下(默认为/srv/salt)。
  state描述配置 *.sls支持:
  jinjia模板:
  指定分发到minion端的file文件中使用jinjia,通过使用template指令指定类型来区分是模板还是普通文件资源。
  如:     file.managed
  - name: /……         #对不同的服务,指定存放至minion端的配置文件路径
  - source: salt://……    #发送给minion端的配置文件在master端的位置,salt:// 是指从salt的文件根目录开始。
  - user: root          #指定推送至minion端后的文件属主
  - group: root         #指定推送至minion端后的文件属组
  - mode: 644           #指定推送至minion端后的文件权限
  - template:jinja        #指定文件中的jinja参数根据客户端条件自动生成相应的值。
  ……
  grains及pillar引用
  变量使用Grains:{{ grains['fqdn_ip4'] }}
  变量使用执行模块:{{ salt['network.hw_addr']('eth0') }}
  变量使用Pillar:{{ pillar['apache']['PORT'] }}
  在state的逻辑层次定义完成后,再通过salt '*' state.highstate执行生效。
  SLS(代表SaLt State文件)是Salt State系统的核心。SLS描述了系统的目标状态,由格式简单的数据构成。这经常被称作配置管理
  首先,在master上面定义salt的主目录,vim /etc/salt/master:
例1:
  结合grains与pillar,实现一个根据不同操作系统类型部署apache环境的任务
定义pillar
  【/srv/pillar/top.sls】
base:  
  '*':
  
      - apache
  在top.sls中引用二级配置有两种方式,一种是直接引用,如本例中直接引用apache.sls;另一种是创建apache目录,再引用目录中的init.sls文件,两者效果是一样的。
  即【/srv/pillar/apache.sls】或【/srv/pillar/apache/init.sls】
pkgs:  
{% if grains['os_family'] == 'Debian' %}
  
  apache: apache2
  
  {% elif grains['os_family'] == 'RedHat' %}
  
  apache: httpd
  
  {% elif grains['os'] == 'Arch' %}
  
  apache: apache
  
{% endif %}
  测试:
salt '*' saltutil.refresh_pillar  
salt '*' pillar.data pkgs
  测试看输出的Apache是否正确。
定义state
  【/srv/salt/top.sls】
base:  
  '*':
  
    - apache
  编写完top.sls后,编写state.sls文件;
  【/srv/salt/apache.sls】或【/srv/salt/apache/init.sls】
apache:  pkg:
  - installed
  - name: {{ pillar['pkgs']['apache'] }}   #pillar['pkgs']['apache']引用的是pillar定义的数据
  service.running:
  - name: {{ pillar['pkgs']['apache'] }}
  - require:                                  #确保Apache服务只有在成功安装软件包后才会启动
  - pkg: {{ pillar['pkgs']['apache'] }}
执行state
  默认匹配所有的state.sls模块,并推送。
salt '*' state.highstate  结果:
DSC0000.png

  ————————————————————————————————————————————
  例2:
  top.sls 默认从 base 标签开始解析执行,下一级是操作的目标,可以通过正则,grain模块,或分组名,来进行匹配,再下一级是要执行的state文件。
  首先在salt配置文件 /etc/salt/master 中定义
  nodegroups:
  my_app: 'L@主机名,主机名……'
  注:L@表示后面的主机id格式为列表
  G@表示以grain格式描述
  S@表示以IP子网或地址格式描述
  top.sls内容如下:
base:  
   my_app:
  
        - match: nodegroup
  
        - nginx
  

  
  'os:Redhat':
  
        - match: grain
  
        - nginx
  编写完top.sls后,编写state.sls文件;
  即【/srv/salt/nginx.sls】或【/srv/salt/nginx/init.sls】
nginx:  
  pkg:
  
    - installed
  
  service.running:
  
    - enable: True
  
    - reload: True
  
    - require:
  
      - file: /etc/init.d/nginx
  
    - watch:
  
      - file: /etc/nginx/nginx.conf
  
      - file: /etc/nginx/fastcgi.conf
  
      - pkg: nginx
  
/etc/nginx/nginx.conf:
  
  file.managed:
  
    - source: salt://files/nginx/nginx.conf
  
    - user: root
  
    - mode: 644
  
    - template: jinja
  
    - require:
  
      - pkg: nginx
  

  
/etc/nginx/fastcgi.conf:
  
  file.managed:
  
    - source: salt://files/nginx/fastcgi.conf
  
    - user: root
  
    - mode: 644
  
    - require:
  
      - pkg: nginx
  在这个例子中, /etc/nginx/里的文件并不会被placed(managed),直到nginx软件包已安装
  在salt的主目录下的files/nginx/fastcgi.conf和files/nginx/nginx.conf文件,里面内容就是Nginx的配置文件的内容。
  测试:
  把Nginx网minion上面推送,并测试安装:
salt '*' state.sls nginx test=True  
……输出信息略……
  ————————————————————————————————————————————
  state的逻辑关系列表:
  include: 包含某个文件
include:  
  - nginx
  
  - php
  match: 配模某个模块
require:在运行此state之前,先运行依赖的state关系检查,可配置多个state依赖对象;- require:  
  - pkg: nginx
  watch: 在某个state变化时运行此模块,文中的配置,相关文件变化后,立即执行相应操作
- watch:  
  - file: /etc/nginx/nginx.conf
  
  - file: /etc/nginx/fastcgi.conf
  
  - pkg: nginx
  order: 优先级比require和watch低,有order指定的state比没有order指定的优先级高,假如一个state模块内安装多个服务,或者其他依赖关系,可以使用
nginx:  
  pkg.installed:
  
    - order:1
  参考资料:Python自动化运维

运维网声明 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-544017-1-1.html 上篇帖子: 集中化管理平台saltstack--pillar(4) 下篇帖子: saltstack-memcached的安装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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