targeting minion

glob

  1. salt '*' test.ping
  2. salt \* test.ping

perl语言兼容正则表达式:

  1. 短选项: -E
  2. 长选项: --pcre
  3. salt -E '^[mM]in.[eou]n' test.ping

list

  1. 短选项:-L
  2. 长选项:--list
  3. salt -L web1,web2,db1,proxy1 test.ping

Subnet

  1. 短选项:-S
  2. 长选项: --ipcidr
  3. 匹配整个网段的
  4. salt -S 192.168.0.42 test.ping
  5. salt -S 192.168.0.0/16 test.ping

Grain

  1. 短选项:-G
  2. 长选项:--grain
  3. salt可以通过操作系统、CPU架构以及自定义的信息等机器特征进行target Minion。
  4. Grain是键值对的方式,所以需要制定键值,通过冒号分隔
  5. salt -G 'os:Ubuntu' test.ping
  6. salt -G 'os_family:Debian' test.ping
  7. 一些Grain是多级字典,可以通过冒号进行分隔字典中的每一级键名
  8. salt -G 'ip_interface:eth0:192.168.1.11'

Grain PCRE

  1. 长选项:--grain-pcre
  2. 基于grain的pcre匹配
  3. salt --grain-pcre 'os:red(hat|flag)' test.ping

Pillar

  1. 短选项:-I
  2. 长选项: --pillar
  3. salt支持通过pillar数据进行匹配
  4. salt -I 'my_var:my_val' test.ping

混合(Compound)

  1. 短选项:-C
  2. 长选项:--compound
  3. 混合target允许用户在一个shell命令中指定多种target类型。默认使用glob,想指定其他target类型,则需要再前面追加上类型简写和@符号。
  4. 如想匹配的系统是ubuntu,pillar中role的设置是web,且属于192.168.100.0/24子网的Minion。
  5. salt -C 'G@os:Ubuntu,I@role:web,S@192.168.100.0/24' test.ping
  6. 布尔符号中的与(and)、或(or)及非(not)也可以在target类型中使用,如:
  7. salt -C 'min* or *ion' test.ping
  8. salt -C 'web* or *qa,G@os:Arch' test.ping

节点组(Nodegroup)

  1. 短选项:-N
  2. 长选项:--nodegroup
  3. 节点组是在salt内部使用的(所有的targeting终将创建一个动态节点组),从命令行中显式地指定节点组十分常用。在命令行使用前必须先再salt master的配置文件中以target列表进行定义(使用混合匹配语法),如在配置文件中进行如下定义:
  4. nodegroups:
  5. webdev: 'I@role:web,G@cluster:dev'
  6. webqa: 'I@role:web,G@cluster:qa'
  7. webprod: 'I@role:web,G@cluster:prod'
  8. 节点组定义完毕并重载master配置文件后,可以通过salt进行target:
  9. salt -N webdev test.ping

运行模块方法

pkg.install 安装软件包
pkg.remove 卸载软件包
file.replace 类似于sed的功能

SLS文件树

top文件

  1. base:
  2. '*':
  3. - common
  4. - vim
  5. qa:
  6. '*_qa':
  7. - jenkins
  8. web:
  9. 'web_*':
  10. - 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开机自启并处于运行状态等。如下

  1. apache2:
  2. pkg:
  3. - installed
  4. service:
  5. - running
  6. file:
  7. - managed
  8. - name: /etc/apache2/apache2.conf

include块:

通过include可以在一个SLS文件引用其他SLS文件:

  1. include:
  2. - base
  3. - emacs

这个例子中,SLS文件将会把include块内容替换为base.sls(或base/init.sls)和emacs.sls(emacs/init.sls)
SLS文件中不能包含已经存在于include的SLS文件中的ID。

include本身作为一个顶级声明,只能在一个文件中出现一次。

require:

  1. webservice:
  2. service.running:
  3. - name: apache2
  4. - require:
  5. - pkg: web_package
  6. web_package:
  7. pkg.installed:
  8. - name: apache2

正常情况,State SLS都是按顺序从前到后执行的,除非在声明时指定了require,如果指定了require,则会首先执行require指定的内容,再执行这个。

reuire:

require是最基本的requisite,它表示state会等待列表中定义的每一项state都成功执行后才会执行。

  1. apache2:
  2. pkg:
  3. - installed
  4. - require
  5. - file: apache2
  6. service:
  7. - running
  8. - require:
  9. - pkg: apache2
  10. file:
  11. - managed
  12. - name: /etc/apache2/apache2.conf
  13. - source: salt://apache2/apache2.conf

在上边例子中,文件会首先复制到minion上,然后进行软件包的安装,之后再进行服务的启动。

watch

当配置文件发生了变更,apache2服务需要重启才行,这时需要watch,强制State在发现它watch的项目发生了变更时执行一个指定的动作。

  1. apache2:
  2. ..SNIP...
  3. service:
  4. - running
  5. - require:
  6. - pkg: apache2
  7. - watch:
  8. - file: apache2
  9. ...SNIP...

当一个服务通过watch触发时,如果服务此时是关闭的,则Salt会尝试启动它。如果服务已经在运行中,则Salt会根据情况尝试service.reload,service.full_restart service.restart

use:

salt中是可以在一个State中声明一些默认值的,然后其他的State可以继承(inherit)这些默认值。最常见的就是一个State文件通过include去引用其它文件。如果State中使用的项已经被重新声明了,那么就会被新值覆盖。否则该项在使用时并不会进行任何修改。use类似于include,也是从其他SLS文件中继承过来,但是不会继承requisite部分。

  1. apache2_conf:
  2. file:
  3. - managed
  4. - name: /etc/apache2/apache2.conf
  5. - user: root
  6. - group: root
  7. - mode: 755
  8. - watch_in:
  9. - service: apache2
  10. mysql_conf:
  11. file:
  12. - managed
  13. - name: /etc/mysql/my.cnf
  14. - use:
  15. - file: apache2_conf
  16. - watch_in:
  17. - 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需要执行。

  1. apache2:
  2. service:
  3. - running
  4. - watch:
  5. - file: codebase
  6. codebase:
  7. file:
  8. - recurse
  9. ...SNIP...
  10. shutdown_apache:
  11. service:
  12. - dead
  13. - name: apache2
  14. - prereq:
  15. - file: codebase

扩展SLS文件

除了include块之外,State SLS文件还可以使用extend块来修改include块引入的SLS文件的内容。使用extend代码块和使用requisite类似,但是还有一些明显的不同。use或use_in requisite会复制默认值到另外的State中或从其他State上复制默认值到本State中,extend块则只能对引入的State进行修改。

  1. # cat /srv/generic_apache/init.sls
  2. apache2_conf:
  3. file:
  4. - managed:
  5. - name: /etc/apache2/apache2.conf
  6. - source: salt://apache2/apache2.conf
  7. 另一个文件中:
  8. include:
  9. - generic_apache
  10. extend:
  11. apache2_conf:
  12. - file:
  13. - source: salt://django/apache2.conf
  14. 另一个文件:
  15. include:
  16. - generic_apache
  17. extend:
  18. apache2_conf:
  19. - file:
  20. - source: salt://django/apache2.conf

Grain、Pillar及模板

Grain定义在指定的Minion上,Pillar定义在Master上。Grain常用于提供静态数据,Pillar更倾向于动态数据。

Pillar

pillar的top.sls文件在配置和功能上和State的top.sls文件一致,首先声明一个环境,然后是一个target,最后target需要使用的SLS文件列表。

  1. base:
  2. '*':
  3. - bash

pillar只存储一些静态数据,因此文件内容相对简单一些。

例:

  1. skel_dir: /etc/skel/
  2. role: web
  3. web_content:
  4. images:
  5. - jpg
  6. - png
  7. - gif
  8. scripts:
  9. - css
  10. - js

模板

默认先用jinja渲染,再使用yaml。如果想改变渲染方式,可以在模板文件首行指定#!py #!mako|json先用mako渲染,在用json渲染

/etc/salt/master中默认配置 renderer: yaml_jinja,如果想修改默认配置,可以在此修改。

也可以在State中使用模板时指定渲染引擎:

  1. apache2_conf:
  2. file:
  3. - managed
  4. - name: /etc/apache2/apache2.conf
  5. - source: salt://apache2/apache2.conf
  6. - template: jinja

Jinja快速入门

变量可以通过闭合的双大括号来引用。如有一个叫做user的Grain:

```shell
The user {{ grains['user'] }} is referred to here.

  1. Pillar也可以用这种方式:
  2. ```shell
  3. The user {{ pillar['user'] }} is referred to here.

以上例子如果user没有被定义,模板则无法正确渲染。更安全的办法是使用内置的salt交叉调用执行模块:

  1. The user {{ salt['grains.get']('user', 'larry') }} is referred to here.
  2. The user {{ salt['pillar.get']('user', 'larry') }} is referred to here.

如果user没有定义,则默认会使用larry这个值。

通过set设置模板中的局部变量:

  1. {% set myvar = 'My Value' %}

由于jinja基于Python,因此大多数Python的数据类型都是支持的,比如列表和字典

  1. {% set mylist = ['apples', 'oranges', 'bananas'] %}
  2. {% set mydict = {'favorite pie': 'key lime', 'favorite cake': 'saccher torte'} %}

逻辑判断:

  1. {% if grains['os_family'] == 'Debian' %}
  2. apache2:
  3. {% elif grains['os_family'] == 'RedHat' %}
  4. httpd:
  5. {% endif %}
  6. pkg:
  7. - installed
  8. service:
  9. - running

根据不同的系统,定义apache软件包的名叫做apache2还是httpd。state的其他部分则是相同的。

循环:

  1. {% set berries = ['blue', 'rasp', 'straw'] %}
  2. {% for berry in berries %}
  3. {{ berry }} berry
  4. {% endfor %}

转载于:https://www.cnblogs.com/yangruizeng/p/8376272.html

saltstack学习笔记相关推荐

  1. [原创]Saltstack学习笔记:命令参数详解以及配置文件说明

    很久没有更新saltstack的文章了,今天还是来更新一点,又开始对saltstack复习了一下. 前边写了一点<saltstack入门概述(1)>以及<Saltstack如何安装( ...

  2. SaltStack 学习笔记 - 第四篇: SaltStack常用模块

    SaltStack 通过模块来实现管理,具备丰富的模块功能,命令形式也比较自由,这里通过罗列几个有用的命令来作为入门的学习实验. sys.doc : 类似linux的man命令,可以显示minion支 ...

  3. SaltStack 学习笔记 - 第十一篇: SaltStack 文件操作

    文章转载自 : http://www.ituring.com.cn/article/41632 在配置管理系统中,从中心服务器想客户端推送文件是很基本的需求.SaltStack使用内建的ZeroMQ服 ...

  4. SaltStack 学习笔记 - 第六篇: 详解Pillar

    什么是Pillar? Pillar是在salt 0.9.8版本后才添加的功能组件.它跟grains的结构一样,也是一个字典格式,数据通过key/value的格式进行存储.在Salt的设计中,Pilla ...

  5. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  6. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  7. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  8. 2020年Yann Lecun深度学习笔记(下)

    2020年Yann Lecun深度学习笔记(下)

  9. 2020年Yann Lecun深度学习笔记(上)

    2020年Yann Lecun深度学习笔记(上)

  10. 知识图谱学习笔记(1)

    知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...

最新文章

  1. 什么是人工神经网络?
  2. 「Vue」vue生命周期
  3. 架构和产品的制衡——说说竞价拍卖那点事
  4. 回环设备(loop-back devices)
  5. python读取多个文件夹_如何从python中的文件夹中读取多个NetCDF文件
  6. Gdevops广州站:大咖齐聚,从事运维和数据库的你不能错过!
  7. python做图片浏览器_python操作浏览器及截图小结
  8. 带你玩转Visual Studio——带你高效开发
  9. 28 Implement strStr() @Python
  10. 网络操作系统发展历程
  11. SCAU软件开发基础C++复习
  12. PID闭环底盘调试记录
  13. swift语言前景_席勒谈Swift语言:它的发展远远超出预期
  14. unity 多点触控
  15. .Net 根据年份计算周次和起止日期
  16. iPad 使用技巧:虚拟键盘与实体键盘
  17. Hack The Box 注册邀请码破解记录
  18. 百度爬取100张狗狗图片
  19. 使用uniapp开发微信公众号(H5页面),用微信开发者工具调试微信公众号
  20. Day4-2 retrofit

热门文章

  1. 常用推荐算法(50页干货)
  2. shell初学之nginx(负载均衡)
  3. WPF快速入门系列(9)——WPF任务管理工具实现
  4. 这打车App麻烦了!遭黑客勒索巨额比特币
  5. $ is not defined与SpringMVC访问静态资源
  6. 基于STEP7 V5.xWinCC V7.x快速开发项目
  7. js简单操作Cookie
  8. JDBC 学习笔记(三)—— 数据源(数据库连接池):DBCP数据源、C3P0 数据源以及自定义数据源技术...
  9. 深入理解asp.net里的IHttpHandler
  10. App html5 本地化(Web App转为 Hybird app或新建一个 Hybird app)phonegap篇 (1) iOS