saltstack学习笔记
targeting minion
glob
salt '*' test.ping
salt \* test.ping
perl语言兼容正则表达式:
短选项: -E
长选项: --pcre
salt -E '^[mM]in.[eou]n' test.ping
list
短选项:-L
长选项:--list
salt -L web1,web2,db1,proxy1 test.ping
Subnet
短选项:-S
长选项: --ipcidr
匹配整个网段的
salt -S 192.168.0.42 test.ping
salt -S 192.168.0.0/16 test.ping
Grain
短选项:-G
长选项:--grain
salt可以通过操作系统、CPU架构以及自定义的信息等机器特征进行target Minion。
Grain是键值对的方式,所以需要制定键值,通过冒号分隔
salt -G 'os:Ubuntu' test.ping
salt -G 'os_family:Debian' test.ping
一些Grain是多级字典,可以通过冒号进行分隔字典中的每一级键名
salt -G 'ip_interface:eth0:192.168.1.11'
Grain PCRE
长选项:--grain-pcre
基于grain的pcre匹配
salt --grain-pcre 'os:red(hat|flag)' test.ping
Pillar
短选项:-I
长选项: --pillar
salt支持通过pillar数据进行匹配
salt -I 'my_var:my_val' test.ping
混合(Compound)
短选项:-C
长选项:--compound
混合target允许用户在一个shell命令中指定多种target类型。默认使用glob,想指定其他target类型,则需要再前面追加上类型简写和@符号。
如想匹配的系统是ubuntu,pillar中role的设置是web,且属于192.168.100.0/24子网的Minion。
salt -C 'G@os:Ubuntu,I@role:web,S@192.168.100.0/24' test.ping
布尔符号中的与(and)、或(or)及非(not)也可以在target类型中使用,如:
salt -C 'min* or *ion' test.ping
salt -C 'web* or *qa,G@os:Arch' test.ping
节点组(Nodegroup)
短选项:-N
长选项:--nodegroup
节点组是在salt内部使用的(所有的targeting终将创建一个动态节点组),从命令行中显式地指定节点组十分常用。在命令行使用前必须先再salt master的配置文件中以target列表进行定义(使用混合匹配语法),如在配置文件中进行如下定义:
nodegroups:
webdev: 'I@role:web,G@cluster:dev'
webqa: 'I@role:web,G@cluster:qa'
webprod: 'I@role:web,G@cluster:prod'
节点组定义完毕并重载master配置文件后,可以通过salt进行target:
salt -N webdev test.ping
运行模块方法
pkg.install 安装软件包
pkg.remove 卸载软件包
file.replace 类似于sed的功能
SLS文件树
top文件
base:
'*':
- common
- vim
qa:
'*_qa':
- jenkins
web:
'web_*':
- apache2
声明了三个环境,分别是base、qa和web,base环境指定所有minion执行common和vim State,qa环境指定所有以_qa结尾的ID的Minion执行jenkins State。web环境指定所有以web_开头的ID的Minion执行apache2 State。
SLS目录组织
apache2.sls写法对应两种格式:
- apache2/sls/init.sls
- apache2.sls
执行时会先找apache2.sls如果不存在,再找apache2/sls/init.sls,SLS文件可以有多层深度,每一层中间用句点表示.,最好是目录少一些,方便SLS快速查找。
使用State进行配置管理
/srv/salt目录下的文件用于定义Salt State。这是配置管理格式,用来强制Minion处于某一状态(State):X软件包(package)需要安装,文件(file)Y格式正确,服务(service)Z开机自启并处于运行状态等。如下
apache2:
pkg:
- installed
service:
- running
file:
- managed
- name: /etc/apache2/apache2.conf
include块:
通过include可以在一个SLS文件引用其他SLS文件:
include:
- base
- emacs
这个例子中,SLS文件将会把include块内容替换为base.sls(或base/init.sls)和emacs.sls(emacs/init.sls)
SLS文件中不能包含已经存在于include的SLS文件中的ID。
include本身作为一个顶级声明,只能在一个文件中出现一次。
require:
webservice:
service.running:
- name: apache2
- require:
- pkg: web_package
web_package:
pkg.installed:
- name: apache2
正常情况,State SLS都是按顺序从前到后执行的,除非在声明时指定了require,如果指定了require,则会首先执行require指定的内容,再执行这个。
reuire:
require是最基本的requisite,它表示state会等待列表中定义的每一项state都成功执行后才会执行。
apache2:
pkg:
- installed
- require
- file: apache2
service:
- running
- require:
- pkg: apache2
file:
- managed
- name: /etc/apache2/apache2.conf
- source: salt://apache2/apache2.conf
在上边例子中,文件会首先复制到minion上,然后进行软件包的安装,之后再进行服务的启动。
watch
当配置文件发生了变更,apache2服务需要重启才行,这时需要watch,强制State在发现它watch的项目发生了变更时执行一个指定的动作。
apache2:
..SNIP...
service:
- running
- require:
- pkg: apache2
- watch:
- file: apache2
...SNIP...
当一个服务通过watch触发时,如果服务此时是关闭的,则Salt会尝试启动它。如果服务已经在运行中,则Salt会根据情况尝试service.reload,service.full_restart service.restart
use:
salt中是可以在一个State中声明一些默认值的,然后其他的State可以继承(inherit)这些默认值。最常见的就是一个State文件通过include去引用其它文件。如果State中使用的项已经被重新声明了,那么就会被新值覆盖。否则该项在使用时并不会进行任何修改。use类似于include,也是从其他SLS文件中继承过来,但是不会继承requisite部分。
apache2_conf:
file:
- managed
- name: /etc/apache2/apache2.conf
- user: root
- group: root
- mode: 755
- watch_in:
- service: apache2
mysql_conf:
file:
- managed
- name: /etc/mysql/my.cnf
- use:
- file: apache2_conf
- watch_in:
- service: mysql
mysql_conf State会安全地从apache2_conf State中继承user、group及mode,并且不会触发apache重启。
prereq
在某些情况下,有可能State并不需要运行,只有在另一个State预计会变更时才需要运行。例如一个web应用使用apache来提供服务,当产品服务器上的代码库需要变更时,Apache应该先关闭,以免代码没部署完时会有错误。
prereq requisite,就是针对这样的需求设计的。当一个State使用prereq时,Salt会先对prereq中指定关联的项目运行test模式来预计是否会进行变更。如果预计有变更,则Salt会用prereg标记该State需要执行。
apache2:
service:
- running
- watch:
- file: codebase
codebase:
file:
- recurse
...SNIP...
shutdown_apache:
service:
- dead
- name: apache2
- prereq:
- file: codebase
扩展SLS文件
除了include块之外,State SLS文件还可以使用extend块来修改include块引入的SLS文件的内容。使用extend代码块和使用requisite类似,但是还有一些明显的不同。use或use_in requisite会复制默认值到另外的State中或从其他State上复制默认值到本State中,extend块则只能对引入的State进行修改。
# cat /srv/generic_apache/init.sls
apache2_conf:
file:
- managed:
- name: /etc/apache2/apache2.conf
- source: salt://apache2/apache2.conf
另一个文件中:
include:
- generic_apache
extend:
apache2_conf:
- file:
- source: salt://django/apache2.conf
另一个文件:
include:
- generic_apache
extend:
apache2_conf:
- file:
- source: salt://django/apache2.conf
Grain、Pillar及模板
Grain定义在指定的Minion上,Pillar定义在Master上。Grain常用于提供静态数据,Pillar更倾向于动态数据。
Pillar
pillar的top.sls文件在配置和功能上和State的top.sls文件一致,首先声明一个环境,然后是一个target,最后target需要使用的SLS文件列表。
base:
'*':
- bash
pillar只存储一些静态数据,因此文件内容相对简单一些。
例:
skel_dir: /etc/skel/
role: web
web_content:
images:
- jpg
- png
- gif
scripts:
- css
- js
模板
默认先用jinja渲染,再使用yaml。如果想改变渲染方式,可以在模板文件首行指定#!py #!mako|json先用mako渲染,在用json渲染
/etc/salt/master中默认配置 renderer: yaml_jinja,如果想修改默认配置,可以在此修改。
也可以在State中使用模板时指定渲染引擎:
apache2_conf:
file:
- managed
- name: /etc/apache2/apache2.conf
- source: salt://apache2/apache2.conf
- template: jinja
Jinja快速入门
变量可以通过闭合的双大括号来引用。如有一个叫做user的Grain:
```shell
The user {{ grains['user'] }} is referred to here.
Pillar也可以用这种方式:
```shell
The user {{ pillar['user'] }} is referred to here.
以上例子如果user没有被定义,模板则无法正确渲染。更安全的办法是使用内置的salt交叉调用执行模块:
The user {{ salt['grains.get']('user', 'larry') }} is referred to here.
The user {{ salt['pillar.get']('user', 'larry') }} is referred to here.
如果user没有定义,则默认会使用larry这个值。
通过set设置模板中的局部变量:
{% set myvar = 'My Value' %}
由于jinja基于Python,因此大多数Python的数据类型都是支持的,比如列表和字典
{% set mylist = ['apples', 'oranges', 'bananas'] %}
{% set mydict = {'favorite pie': 'key lime', 'favorite cake': 'saccher torte'} %}
逻辑判断:
{% if grains['os_family'] == 'Debian' %}
apache2:
{% elif grains['os_family'] == 'RedHat' %}
httpd:
{% endif %}
pkg:
- installed
service:
- running
根据不同的系统,定义apache软件包的名叫做apache2还是httpd。state的其他部分则是相同的。
循环:
{% set berries = ['blue', 'rasp', 'straw'] %}
{% for berry in berries %}
{{ berry }} berry
{% endfor %}
转载于:https://www.cnblogs.com/yangruizeng/p/8376272.html
saltstack学习笔记相关推荐
- [原创]Saltstack学习笔记:命令参数详解以及配置文件说明
很久没有更新saltstack的文章了,今天还是来更新一点,又开始对saltstack复习了一下. 前边写了一点<saltstack入门概述(1)>以及<Saltstack如何安装( ...
- SaltStack 学习笔记 - 第四篇: SaltStack常用模块
SaltStack 通过模块来实现管理,具备丰富的模块功能,命令形式也比较自由,这里通过罗列几个有用的命令来作为入门的学习实验. sys.doc : 类似linux的man命令,可以显示minion支 ...
- SaltStack 学习笔记 - 第十一篇: SaltStack 文件操作
文章转载自 : http://www.ituring.com.cn/article/41632 在配置管理系统中,从中心服务器想客户端推送文件是很基本的需求.SaltStack使用内建的ZeroMQ服 ...
- SaltStack 学习笔记 - 第六篇: 详解Pillar
什么是Pillar? Pillar是在salt 0.9.8版本后才添加的功能组件.它跟grains的结构一样,也是一个字典格式,数据通过key/value的格式进行存储.在Salt的设计中,Pilla ...
- PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call
您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...
- 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 2020年Yann Lecun深度学习笔记(下)
2020年Yann Lecun深度学习笔记(下)
- 2020年Yann Lecun深度学习笔记(上)
2020年Yann Lecun深度学习笔记(上)
- 知识图谱学习笔记(1)
知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...
最新文章
- 什么是人工神经网络?
- 「Vue」vue生命周期
- 架构和产品的制衡——说说竞价拍卖那点事
- 回环设备(loop-back devices)
- python读取多个文件夹_如何从python中的文件夹中读取多个NetCDF文件
- Gdevops广州站:大咖齐聚,从事运维和数据库的你不能错过!
- python做图片浏览器_python操作浏览器及截图小结
- 带你玩转Visual Studio——带你高效开发
- 28 Implement strStr() @Python
- 网络操作系统发展历程
- SCAU软件开发基础C++复习
- PID闭环底盘调试记录
- swift语言前景_席勒谈Swift语言:它的发展远远超出预期
- unity 多点触控
- .Net 根据年份计算周次和起止日期
- iPad 使用技巧:虚拟键盘与实体键盘
- Hack The Box 注册邀请码破解记录
- 百度爬取100张狗狗图片
- 使用uniapp开发微信公众号(H5页面),用微信开发者工具调试微信公众号
- Day4-2 retrofit
热门文章
- 常用推荐算法(50页干货)
- shell初学之nginx(负载均衡)
- WPF快速入门系列(9)——WPF任务管理工具实现
- 这打车App麻烦了!遭黑客勒索巨额比特币
- $ is not defined与SpringMVC访问静态资源
- 基于STEP7 V5.xWinCC V7.x快速开发项目
- js简单操作Cookie
- JDBC 学习笔记(三)—— 数据源(数据库连接池):DBCP数据源、C3P0 数据源以及自定义数据源技术...
- 深入理解asp.net里的IHttpHandler
- App html5 本地化(Web App转为 Hybird app或新建一个 Hybird app)phonegap篇 (1) iOS