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 配置文件管理的更多相关文章

  1. 死磕salt系列-salt文章目录汇总

    死磕salt系列-salt入门 死磕salt系列-salt配置文件 死磕salt系列-salt grains pillar 配置 死磕salt系列-salt 常用modules 死磕salt系列-sa ...

  2. 死磕nginx系列--nginx 目录

    死磕nginx系列--nginx入门 死磕nginx系列--nginx配置文件 死磕nginx系统-nginx日志配置 死磕nginx系列--nginx服务器做web服务器 死磕nginx系列--使用 ...

  3. 死磕nginx系列

    死磕nginx系列 死磕nginx系列--nginx入门 死磕nginx系列--nginx配置文件 死磕nginx系统--nginx日志配置 死磕nginx系列--nginx服务器做web服务器 死磕 ...

  4. 一生挚友redo log、binlog《死磕MySQL系列 二》

    系列文章 原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 一生挚友redo log.binlog<死磕MySQL系列 二> 前言 咔咔闲谈 上期根据 ...

  5. 闯祸了,生成环境执行了DDL操作《死磕MySQL系列 十四》

    由于业务随着时间不停的改变,起初的表结构设计已经满足不了如今的需求,这时你是不是想那就加字段呗!加字段也是个艺术活,接下来由本文的主人咔咔给你吹. 试想一下这个场景 事务A在执行一个非常大的查询 事务 ...

  6. MySQL强人“锁”难《死磕MySQL系列 三》

    系列文章 一.原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 二.一生挚友redo log.binlog<死磕MySQL系列 二> 前言 最近数据库 ...

  7. S 锁与 X 锁的爱恨情仇《死磕MySQL系列 四》

    系列文章 一.原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 二.一生挚友redo log.binlog<死磕MySQL系列 二> 三.MySQL强 ...

  8. 如何选择普通索引和唯一索引《死磕MySQL系列 五》

    系列文章 一.原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 二.一生挚友redo log.binlog<死磕MySQL系列 二> 三.MySQL强 ...

  9. 五分钟,让你明白MySQL是怎么选择索引《死磕MySQL系列 六》

    系列文章 二.一生挚友redo log.binlog<死磕MySQL系列 二> 三.MySQL强人"锁"难<死磕MySQL系列 三> 四.S 锁与 X 锁的 ...

  10. 字符串可以这样加索引,你知吗?《死磕MySQL系列 七》

    系列文章 三.MySQL强人"锁"难<死磕MySQL系列 三> 四.S 锁与 X 锁的爱恨情仇<死磕MySQL系列 四> 五.如何选择普通索引和唯一索引&l ...

随机推荐

  1. MySql的隔离级别总结

    使用MySql也有一段时间了,但是很多MySql相关或者说是数据库相关的知识还是一知半解,最近在学hibernate这个框架时碰到挺多和数据库相关的知识盲区,所以下面根据自己对MySql系统相关知识消 ...

  2. VS2012 常用配置

    一. 整合svn版本控制 1. 点击此 下载与SVN版本相对应的ankhsvn插件,本人用的是Subversion 1.8 2. 安装ankhsvn插件,打开VS2012,右键任一工程,有显示如下图, ...

  3. Jenkins2.138配置slave节点时,启动方法只有两个选项

    Jenkins2.138配置slave节点时,启动方法只有两个选项,并没有通过javaweb代理启动这个选项 解决办法 全局安全配置->代理->选择随机选取

  4. sublime Text3汉化和激活注册码

    sublimeText3 很不错,前面几天下了vscore学习Node.js,感觉有点懵,今天下载sublimeText3,遇到的一些小问题,在这里说说: 百度云:https://pan.baidu. ...

  5. ES6学习笔记(二)-字符串的扩展

    一.字符的 Unicode 表示法 JavaScript 允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码点. 表示法只限于码点在\u0000~\uFFFF之间的字符, ...

  6. THUSC2018退役预定

    Day-inf \(HNOI,CTSC,APIO\)都爆炸了之后 好不容易找回自信心,怀着一定报不上的心情报了清华 居然报上了怕不是报了的都通过了 毕竟\(wc\)的时候被清华虐惨了 还是很虚的 Da ...

  7. JQuery漂浮广告代码

    <!doctype html><html><head><meta charset="utf-8"><title>jque ...

  8. Angular进阶教程二

    6.2自定义指令详解 angular的指令机制.angular通过指令的方式实现了HTML的扩展,增强后的HTML不仅长相焕然一新,同时也获得了很多强大的技能.更厉害的是,你还可以自定义指令,这就意味 ...

  9. 【javascript】javascript设计模式之工厂模式

    1.要解决的问题 2.如何实现 3.与构造函数的区别 4.总结 1.要解决的问题 工厂模式通常用于重复创建相似对象,提供动态创建对象的接口. 2.工厂模式最为设计模式中构造模式之一,通常在类或类的静态 ...

  10. SQLSERVER的逆向工程,将数据库导入到PowerDesigner中

    原文:http://blog.csdn.net/linianzhenti/article/details/42938595 PD是一款不错的数据库设计工具,在佩特来这个项目中,起初,合作伙伴用PD大体 ...