死磕salt系列-salt 配置文件管理
SLS是Salt State系统的核心,用来描述系统的目标状态,使用YAML语言书写。被用作配置文件管理。
SLS文件
sls配置文件分为两种类型
- top.sls 这是所有配置文件的入口
- sls 这是每个不同的配置文件
top.sls
- top.sls 文件是其他sls文件的起始位置,使用
salt '*' state.highstate调用。 - top.sls 文件的位置:master文件中base环境定义的文件夹下。
- 假设base路径为:
/srv/salt/base则top文件路径:/srv/salt/base/top.sls
top.sls 文件格式如下:
base: ## 从哪里开始读取配置文件,可以是base,prod等,
'os:centos': ## 目标主机
- match: grain ## match 匹配方式,
- init.env_init ## 需要执行的什么命令
- zabbix-agent-linux.config
- salt.agent
prod:
'blog.*.(service|mongodb|proxydb)':
- match: pcre
- publish.config
- filebeat.config
解释:
- top文件遵循YAML语法,不同的层级用不同的空格定义。
- base:表示文件的其实位置。
- 'os:centos' :表示目标主机。
- match:
- grain: 按照grains规则去匹配
- nodegroup: 按照分组名进行匹配
- pcre: 正则匹配
- 如果不写match行,则默认使用通配符匹配。
sls文件编写方法
agent-config: ##定义一个名称
file.managed: ## 定义一个方法
- name: /etc/salt/minion ##定义方法需要的相关参数
- source: salt://salt/files/minion-config
- user: root
- group: root
- mode: 644
- template: jinja ##启用jinja模板匹配
简写方法:
vim /srv/salt/apache/install.sls
apache: # 定义名称
pkg: # 定义函数
- installed # 定义方法
简版的语法与上面的语法一致,区别在于可以将名称写在行首。这样就不用定义方法名称了。
最后执行 salt '*' state.highstate test=True测试编写的文件是否正常。结果正常,则去掉test=True正式执行。
sls编写方法注意事项
include可以把已经写好的文件包含进来一起执行。- 一个agent-config代表一个命名空间,一个命名空间内只有有一种方法即
file.managed方法只能出现一次。 - 如果写多个
file.managed就需要使用不用的命名空间。 - template: jinja表示配置文件中定义了jinja模板。- 缩进用空格(一般是2个),不要用tab
:表示是字典-表示是列表
include:
apache.install
agent-config:
file.managed:
- name: /etc/salt/minion
- source: salt://salt/files/minion-config
- user: root
- group: root
- mode: 644
- template: jinja
- require:
- pkg: apache
include:
apache.install
include 声明
一个list,其元素是要引用到本SLS文件的其他SLS模块。 只能用在highstate结构的顶层
include:
- edit.vim
- http.server
引用其他环境变量的sls文件:
include:
- dev: http
相对引用:
include:
include:
- .virt
- .virt.hyper
- ..http
- ...base
其中的语法类似于python中的相对引用
jinja模板语法:
小技巧:
使用{{ salt['granins.get']('user'),'larry' }},{{ salt['pillar.get']('user'),'larry' }}的方法提供默认值。
{% for i in ['/etc/','/usr']%}
touch {{ i }}/1.txt
{% endfor %}
httpd:
pkg.managed:
{% if grains['os'] == 'Ubuntu' %}
- name: apache2
{% elif grains['os'] == 'CentOS' %}
- name: httpd
{% endif %}
- installed
set 这是jinja模板的值
{% set site_user = 'testuser' %}
{% set site_name = 'test_site' %}
{% set project_name = 'test_proj' %}
{% set sites_dir = 'test_dir' %}
django-project:
file.recurse:
- name: {{ sites_dir }}/{{ site_name }}/{{ project_name }}
- user: {{ site_user }}
- dir_mode: 2775
- file_mode: '0644'
- template: jinja
- source: salt://project/templates_dir
- include_empty: True
- require表示依赖,Apache表示命名空间,pkg表示命名空间中的某一个方法。
- require:
- pkg: apache
其他配置
- watch: 监控状态是否变化,常用在service.running中。
- last:想让某个state最后一个运行,可以用last。
- order:优先级比require和watch低,有order指定的state比没有order指定的优先级高。
vim:
pkg.installed:
- order: 1
死磕salt系列-salt 配置文件管理的更多相关文章
- 死磕salt系列-salt文章目录汇总
死磕salt系列-salt入门 死磕salt系列-salt配置文件 死磕salt系列-salt grains pillar 配置 死磕salt系列-salt 常用modules 死磕salt系列-sa ...
- 死磕nginx系列--nginx 目录
死磕nginx系列--nginx入门 死磕nginx系列--nginx配置文件 死磕nginx系统-nginx日志配置 死磕nginx系列--nginx服务器做web服务器 死磕nginx系列--使用 ...
- 死磕nginx系列
死磕nginx系列 死磕nginx系列--nginx入门 死磕nginx系列--nginx配置文件 死磕nginx系统--nginx日志配置 死磕nginx系列--nginx服务器做web服务器 死磕 ...
- 一生挚友redo log、binlog《死磕MySQL系列 二》
系列文章 原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 一生挚友redo log.binlog<死磕MySQL系列 二> 前言 咔咔闲谈 上期根据 ...
- 闯祸了,生成环境执行了DDL操作《死磕MySQL系列 十四》
由于业务随着时间不停的改变,起初的表结构设计已经满足不了如今的需求,这时你是不是想那就加字段呗!加字段也是个艺术活,接下来由本文的主人咔咔给你吹. 试想一下这个场景 事务A在执行一个非常大的查询 事务 ...
- MySQL强人“锁”难《死磕MySQL系列 三》
系列文章 一.原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 二.一生挚友redo log.binlog<死磕MySQL系列 二> 前言 最近数据库 ...
- S 锁与 X 锁的爱恨情仇《死磕MySQL系列 四》
系列文章 一.原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 二.一生挚友redo log.binlog<死磕MySQL系列 二> 三.MySQL强 ...
- 如何选择普通索引和唯一索引《死磕MySQL系列 五》
系列文章 一.原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 二.一生挚友redo log.binlog<死磕MySQL系列 二> 三.MySQL强 ...
- 五分钟,让你明白MySQL是怎么选择索引《死磕MySQL系列 六》
系列文章 二.一生挚友redo log.binlog<死磕MySQL系列 二> 三.MySQL强人"锁"难<死磕MySQL系列 三> 四.S 锁与 X 锁的 ...
- 字符串可以这样加索引,你知吗?《死磕MySQL系列 七》
系列文章 三.MySQL强人"锁"难<死磕MySQL系列 三> 四.S 锁与 X 锁的爱恨情仇<死磕MySQL系列 四> 五.如何选择普通索引和唯一索引&l ...
随机推荐
- Unity 动态加载资源的方式。
方式 特点 用法 Resource.load 安装包会比较大 在Asset文件夹下建一个Resources命名的文件夹,在打包安装包时会把 Resources文件夹下的所有文件都打包进去,不管 ...
- LINQ-let子句、join子句
1.Let子句 let子句用于在LINQ表达式中存储子表达式的计算结果,既let子句创建一个范围变量来存储结果,变量被创建后,不能修改或把其他表达式的结果重新赋值给它.此范围变量可以在后续的LINQ中 ...
- PL/SQL之存储过程和触发器实例
1.Oracle存储过程实例 /*不带任何参数存储过程(输出系统日期)*/ CREATE OR REPLACE PROCEDURE output_date IS BEGIN DBMS_OUTPUT.P ...
- HTML页面格式
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Docker学习(三): Dockerfile指令介绍
特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! =============系列文章============= 1 ...
- Druid SqlParser理解及使用入门
以前的项目中很少去思考SQL解析这个事情,即使在saas系统或者分库分表的时候有涉及到也会有专门的处理方案,这些方案也对使用者隐藏了实现细节. 而最近的这个数据项目里面却频繁涉及到了对SQL的处理,原 ...
- java设计模式-----7、装饰模式
首先,什么是装饰者模式呢??? 装饰( Decorator )模式又叫做包装模式.通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案.他是23种设计模式之一,英文叫Decorator ...
- 小工具-IP地址获取和设置及端口访问验证(windows)
技术部在业务部门眼里就是后勤部门,业务部门要搬到新大楼去 领导要求去帮忙调试业务人员的电脑,要保证这些大爷们周一上班来,就喝着茶打开新浪,然后打开OA看看. 手上就几个桌面支持的兄弟,要弄一百台多电脑 ...
- python学习之老男孩python全栈第九期_day020知识点总结——序列化模块、模块的导入和使用
一. 序列化模块 # 序列化 --> 将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化# 反序列化 --> 从字符串转换成数据类型的过程叫做反序列化# 序列 -- 字符串 # 什 ...
- 重温C语言(1)----计算算术表达式的值
<C程序设计语言>练习题 5-10 编写程序 expr,计算从命令行输入的逆波兰表达式的值,其中每个运算符或操作数用一个单独的参数表示.例如,命令 expr 2 3 4 + * 计算表达式 ...