关于Saltstack核心模块state详解 原创 林树楷 2018-12-20 00:15:39 博主文章分类:开源技术 ©著作权 文章标签 saltstack python Devops Openfalcon 自动化 文章分类 运维 ©著作权归作者所有:来自51CTO博客作者林树楷的原创作品,请联系作者获取转载授权,否则将追究法律责任 一、问题背景: 学习使用自动运维工具saltstack的过程中,其中state模块是帮助管理员控制minion达到一个预想的状态。换句话来说,我想让minion能够远程执行命令,自动配置环境文件,软件安装、服务启动、关闭,信息收集等自动化操作,都能通过saltstack的state模块实现。 并且最重要的一个好处就是简单、简洁、方便。引用一段官方文档的话: *** Simplicity, Simplicity, Simplicity Many of the most powerful and useful engineering solutions are founded on simple principles. Salt States strive to do just that: K.I.S.S. (Keep It Stupidly Simple) The core of the Salt State system is the SLS, or SaLt State file. The SLS is a representation of the state in which a system should be in, and is set up to contain this data in a simple format. This is often called configuration management.*** 二、前期准备: state模块是saltstack最核心的模块之一,通过预先定制好的SLS文件对被控主机进行状态管理。可支持包括程序包(pkg),文件(file)、网络配置(network)、系统服务(service)、系统用户(user)。 更多状态模块的用法可以参考官网: https://docs.saltstack.com/en/latest/ref/states/all/index.htm 关于YAML SLS文件的默认渲染器是YAML渲染器。YAML是一种具有强大功能的标记语言。而saltstack就是使用一部分YAML来映射非常常用的数据结构,例如列表和字典。YAML渲染器的工作就是采用YAML数据结构将其编译为Python数据结构供saltstack使用。 关于YAML标记语言只需记住三个基本规则: 规则一、缩进: YAML使用固定缩进来表示数据层之间的关系,要求每个级别的缩进刚好两个空格。 规则二、冒号: 字典键在YAML中表示由冒号分割的字符串。值有冒号后面的字符串表示,由空格分割。 规则三、破折号: 为了表示项目列表,使用单个短划线后跟空格。多个项目是同一个列表的一部分,具有同级别的缩进。 通过几个示例帮助大家了解一下: 1、YAML: my_key : my_value 在Python中,上面的映射到: {‘my_key’:’my_value’} 2、YAML: first_level_dict_key: second_leve_dict_key : file_dict_key 在Python中,上面相当于字典的嵌套: {‘first_level_dict_key’ :{‘second_leve_dict_key’ : ‘ file_dict_key’}} 3、YAML: first_dict: - first_file_dict - second_file_dict - third_file_dict 在Python,上面映射到: {‘first_dict’:[first_file_dict’,’second_file_dic’,’third_file_dict’]} 有时候当我们写完sls文件时,想看下写的格式或者渲染到Python数据结构是否正确,可以通过在线YAML解析来查看Python的输出: http://yaml-online-parser.appspot.com/ 对于YAML就不在详解了,有兴趣的可以多了解下。在这里只需要记住这几个规则,对于接下来的sls文件编写和理解有很多帮助。 三、环境说明: 由于硬件资源有限,测试环境采用两台服务器进行部署,两台服务器扮演不同的角色: IP 角色 系统环境 193.192.128.5 Master Centos7.5 192.168.128.6 Minion Centos7.5 具体搭建过程不详细讲解,今天重点主要是state模块,如果对搭建部署有疑问的可以到我之前写过的一篇文章查看: mbb97/2084530 部署搭建之后,需要对master机器上的master配置文件修改,我将Salt文件服务器的目录设置到了**/opt/base/下。并且设置top.sls为管理配置的入口文件。top.sls 默认从 base 标签开始解析执行,下一级是操作的目标,可以通过正则,grain模块,或分组名**,来进行匹配,再下一级是要执行的state文件,不包含扩展名。 四、实战训练 统一安装部署Httpd服务 因为我的系统是Centos系统,所以安装httpd,不同的系统安装apache时,软件包名字都不一样,选择与你系统相对应的软件名。 定义top.sls文件 对httpd创建/opt/base/top.sls文件,可以分别通过正则、分组名、grain模式几种方式进行主机匹配: base: "*": - init.httpd_init.httpd #通过正则匹配 ** 定义state ** 创建/opt/base/init/httpd_init/init/httpd.sls文件,上面的top.sls中匹配到minion主机,都将会执行httpd.sls文件中的内容。然后对httpd.sls文件中写入内容: httpd: pkg.installed: - name: httpd service.running: - name: httpd - require: - pkg: httpd sls文件详解:上述代码检查httpd服务是否已安装,如果未安装则将通过yum方式安装,检查httpd服务进程是否启动运行。下面对各行进行说明: 第一行用于定义state名称,不唯一,也可去其他相关名称 第二行和第四行表示state声明开始,使用了pkg和service模块,分别管理软件包状态,管理服务状态。pkg.installed确保软件包已安装,如果没有安装进行安装;service.running确保服务处于运行状态。 第三行和第五行是分别传递给pkg.installed和service.running模块的参数。 第六行require指的是本state执行时需要先执行哪些state。 ** 执行state** salt ‘mbb-6’ state.highstate 执行结果 因为之前minion主机安装过httpd服务,所以它显示已经安装,并启动了 统一部署安装Openfalcon的agent服务 OpenFalcon是一款由小米运维团队从互联网公司的需求出发, 根据多年的运维经验,结合市面上使用的一些运维监控系统的使用经验和反馈,开发的一套企业级、高可用、可扩展的开源监控解决方案。 其中agent是用于采集机器负载监控指标,比如cpu.idle、load.1min、disk.io.util。所以agent需要部署到所要监控的机器上,并且设置为开机自启动。 之前在mbb-5虚拟机上搭建了一套openfalcon系统,现在只需要将已经配置好的agent组件放在/opt/base/packages目录下。 agent修改过的配置文件(agent/config/cfg.json): 通过start.sh,stop.sh控制启动和停止agent(用于自启动服务) 创建openfalcon_init目录: 创建agent.sls文件用于同步已经配置agent组件目录,并且将自启agent服务添加到rc.local文件。webuser_create用于创建web用户。 ** agent.sls: ** # 部署Openfalcon的agent组件到被监控的机器上 # 通过salt命令:salt 主机 'state.sls' init.openfalcon.agent include: - init.openfalcon_init.webuser_create openfalcon-dir: file.recurse: - name: /home/work/open-falcon - source: salt://packages/minion - user: web - group: web - dir_mode: 755 - file_mode: 755 - makedirs: True cmd.run: - name: runuser -l web -c "sh /home/work/open-falcon/start.sh" - unless: ps -ef | grep falcon-agent | grep -v grep openfalcon-start: file.append: - name: /etc/rc.d/rc.local - text: 'runuser -l web -c "sh /home/work/open-falcon/start.sh"' cmd.run: - name: chmod 755 /etc/rc.d/rc.local ``` > **sls文件详解:**代码具体结构的含义就不详讲了,值得讲下就是file和cmd模块;分别用于管理文件状态和执行命令。  **file.append**将指定内容添加到指定文件。**file.recurse**通过主服务器的子目录进行递归,并将所属子目录复制到指定的路径。 - name:用于设置递归的目录; - source:源目录,该目录位于salt主文件服务器上,并使用salt://协议,就是在之前设置过的/opt/base目录下; - user:所属用户;group:所属组; - dir_mode、file_mode:目录、文件权限设置。 **cmd.run**如果满足某些条件,则运行命令; - name:要执行的命令; - unless:作为检查命令。当在系统进程中没有发现falcon-agent进程时,则会执行启动命令。  最开始使用 include 可以包含现有state文件而不必重新写,所以将创建web用户的sls文件包含起来。 ** webuser_create.sls ** web: group.present: - name: web - gid: 8888 - system: True user.present: - fullname: web - shell: /bin/bash - home: /home/web - uid: 8888 - gid: 8888 - groups: - web >   **sls文件详解:**group和user模块分别管理用户组和用户。group.present中的参数name:要创建组的名称,gid:分配指定组的组ID,system:命名组是否为系统组。user.present也类似,就不在详说。 ** 执行state ** salt 'mbb-6' 'state.sls' 'init.openfalcon_init.agent' **执行结果** ![](http://i2.51cto.com/images/blog/201812/20/af7148b695bfa123cbc88eaf3f0b2f8b.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=) ![](http://i2.51cto.com/images/blog/201812/20/590164f00629fb71ec97370888d6c63c.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=) ![](http://i2.51cto.com/images/blog/201812/20/16098422601b08733b31d47755aedc11.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=) 五、总结: >  **saltstack**是自动化运维必备的工具,之前对saltstck接触的也不深,都只是单纯的通过saltstack**远程执行命令**等,到最近业务中需要通过**批量部署Openfalcon的agent组件**,才了解到saltstack这个**state**核心的模块。当然在这里所涉及到的可能只是state模块一小部分功能,他的功能还远不止这么简单,有兴趣可以多看看saltstack的官网,里面详解了许多自动化的功能,当然这需要结合业务去完成这些事情,不然这些将变得没有任何意义。 >  而从这里可以看出对于自己运维工作,其实还有许多方面可以拓展,不能只满足于一点,从本质上看问题,才能看到全貌。  以下是我参考的一些网站,博客,有兴趣的可以了解一下:  Saltstack自动化(五)sls文件使用  http://www.361way.com/salt-states/5350.html  saltstack(五) saltstack的state状态管理  https://www.cnblogs.com/phennry/p/5416859.html 赞 收藏 评论 分享 举报 上一篇:基于Django设计Kibana用户认证方案 下一篇:《Flask Web开发:基于Python的Web应用开发实战》笔记一 提问和评论都可以,用心的回复会被更多人看到 评论 发布评论 全部评论 () 最热 最新 相关文章 VideoMamba: State Space Model for Efficient Video Understanding VideoMamba: State Space Model for Efficient Video Understanding相关链接:arxiv github关键字:Video Understanding、State Space Model、Efficiency、Long-context Modeling、Self-Distillation摘要为了应对视频理解中局部冗余和全局依赖性的 ide 3D video AI LLM 【ArkTS】鸿蒙开发 @State状态装饰器修饰变量的用法 引言:如果希望构建一个动态的、有交互的界面,就需要引入“状态”的概念。状态顾名思义,是一个随时可能更新,随时会变化的东西。此状态指UI的状态,即我们开发的用户界面的状态,普通let引出的普通变量,其值发生改变时,无法引起界面的重新渲染,界面状态不发生变化。而状态修饰器修饰的变量发生变化会引起UI的渲染刷新如果不使用状态变量,UI只能在初始化时渲染,后续将不会再刷新。 举例:用被状态修饰 UI 状态修饰器 鸿蒙app开发 saltstack(三)state 又研究了一天saltstack,这东西干什么用的,大概也可以说出个一二了。好了,saltstack这东西。大概能干这些活远程执行命令,比如我看一下所有机器操作系统的version,用这东西就简单多了。配置,配置apache,mysql等等都可以用它软件安装服务启动,重启信息收集归档下面说说,master和minion各自干了哪些活master:存放所有minion的公钥监听mininon发送命令给 配置文件 master version files 英文翻译 SaltStack学习:salt_state 1.简单应用建立Salt State树在Salt中启动一个中心state系统,需要首先确保已经建立了Salt文件服务. 编辑master配置文件(file_roots) 取消如下行的注释:file_roots: base: - /srv/salt重启Salt master以使更改生效:pkill salt- http://docs.saltstac saltstack之state模块介绍 saltstack之状态模块介绍 saltstack 状态 模块 介绍 saltstack state模块-状态管理 一、说明 本文基于前两篇的salstack的安装部署和使用的基础上,又一个常用的功能,State模块是saltstack核心的功能,状态管理包括:Package,File,Network, &nbs state saltstack saltstack state.sls 与 state.highstate 这里简单介绍一下state.sls 与 state.highstate 与区别,这也是自己在使用过程中的一点心得吧。环境介绍:salt 2015.5.0 (Lithium)top.sls state.highstate 这个是全局的所有的环境的所有的状态生效;state.sls 用来指定特定sls进行处理。当使用 salt '*' state. saltstack SaltStack State状态文件配置实例 简单介绍什么是state模块?远程执行是salt的核心所在。管理员可以通过执行远程执行模块,达到对minion的控制(如cmd.run"yuminstallyhttpd")。但对于minion的环境或者状态控制,即你想让minion达到一个什么样的状态,用state模块更便利。只需要描述想让saltminion达到什么状态即可,执行部分由state模块完成。远程执行&&State模块:区别:执行模 saltstack state sls SaltStack源码分析之state模块 state模块用于控制minion端的状态系统/usr/lib/python2.6/site-packages/salt/modules/state.pydef highstate(test=None, queue=Fal state 源码分析 saltstack saltstack的state.sls和state.highstate之区别 以上说明:1、state.highstate会读取所有环境(包括base环境)的top.sls文件,并且执行top.sls文件内容里面定义的sls文件,不在top.sls文件里面记录的sls则不会被执行;2、state.sls默认读取base环境,但是它并不会读取top.sls文件。你可以指定state.sls执行哪个sls文件,只要这个sls文件在base环境下存在;3、state.sls也可以 saltstack的state.sls和 saltstack的深入-再次理解state的基本用法 saltstack的深入-再次理解state的基本用法一、基础环境1、在tvm-saltmaster的基础上操作。2、网络:eth0:host-only(用于虚拟内网,手动固定IP,这样从宿主机可以直接连接到这个vm)eth1:NAT(用于上外网,动态IP)[root@tvm-saltmaster ~]# cd /etc/sysconfig/netwo state pillar saltstack grains highstate 集中化管理平台saltstack--state(5) statestate是Saltstack最核心的功能,通过预先定制好的sls(salt state file)文件对被控制主机进行状态管理,支持包括程序包(pkg)、文件(file)、网络配置(network)、系统服务(service)、系统用户(user)等。state的定义state的定义是通过sls文件进行描述的,支持YAML语法,定义规则如下:$ID: #定义state名称,通 state 集中化 saltstack SaltStack配置管理之Gains与State测试 本文的主要内容是对Grains和State的基本使用与测试。 SaltStack grains state.sls grains.items saltstack的深入-增加针对系统调优的state配置 saltstack的深入-增加针对系统调优的state配置一、基础环境1、在tvm-saltmaster的基础上操作。2、网络:eth0:host-only(用于虚拟内网,手动固定IP,这样从宿主机可以直接连接到这个vm)eth1:NAT(用于上外网,动态IP)[root@tvm-saltmaster ~]# cd /etc/sysconfig/networ saltstack highstate saltstack/salt的state.sls和pillar定义以及使用 自动化运维 saltstack 使用 centos7.4之saltstack的系列(三)之state相关 一、管理对象 saltstack系统中管理对象叫做Target,在master上可以采用不同的Tatget去管理不同的minion。这些Target都是通过去管理和匹配Minion的ID来做一些集合。 1.1、正则表达式 # salt -E '[a-z].*' test.ping #直接就是匹配字母 配置文件 apache centos 架构师成长之路-Saltstack配置管理(State状态模块) 点击架构师成长之路 架构师成长之路-Saltstack配置管理(State状态模块) 配置管理工具: Pupper:1. 采用ruby编程语言;2. 安装环境相对较复杂;3.不支持远程执行,需要FUNC工具配置才可以 Ansible:1.采用python编程语言;2.被红帽收购;3.轻量级;4.基于 apache 方法参数 缩进 Saltstack系列:Saltstack分组 关于Saltstack分组的混合匹配:(Compound matchers) 1.修改配置文件,添加组。[root@node1 ~]# vim /etc/salt/masternodegroups: group1: 'L@node2,node3' group2: 'S@192. Saltstack分组 saltstack的state进阶 saltstack安装 一、环境准备1、redhat6.7 2台(master:172.10.25.15; minion : 172.10.25.12 )2、python版本 2.7.143、anaconda5.1 下载路径:https://www.anaconda.com/download/#linux&nb saltstack的state进阶 saltstack linux python redis saltstack state文件传参 saltstack有哪些优点 1.什么是saltstack?saltstack是一个配置管理系统,能维护预定义状态的远程节点。 saltstack是一个分布式远程执行系统,用来在远程节点上执行命令和查询数据。 saltstack是运维人员提高工作效率、规范业务配置与操作的利器。 saltstack的核心功能是:使命令发送到远程系统是并行的而不是串行;使用安全加密的协议;使用最小最快的网络载荷;提供简单的编程接口。 saltst saltstack state文件传参 运维 saltstack vim nginx