• pillar

Pillar在salt中是非常重要的组成部分,利用它可以完成很强大的功能,它可以指定一些信息到指定的minion上,不像grains一样是分发到所有Minion上的,它保存的数据可以是动态的,Pillar以sls来写的,格式是键值对

适用情景:

1.比较敏感的数据,比如密码,key等

2.特殊数据到特定Minion上

3.动态的内容

4.其他数据类型

查看Minion的Pillar信息

salt '*' pillar.items

查看某个Pillar值

salt '*' pillar.item <key>      #只能看到顶级的
salt '*' pillar.get <key>:<key> #可以取到更小粒度的

编写pillar数据

1.指定pillar_roots,默认是/srv/pillar(可通过修改master配置文件修改),建立目录

mkdir /srv/pillar
cd /srv/pillar

2.编辑一个pillar数据文件

vim test1.sls
name: 'salt'users:hadoop: 1000
redhat: 2000
ubuntu: 2001

3.建立top file指定minion到pillar数据文件

vim top.slsbase:'*':- test1

4.刷新Pillar数据

salt '*' saltutil.refresh_pillar

5.测试

salt '*' pillar.get name
salt '*' pillar.item name

在state中通过jinja使用pillar数据

vim /srv/salt/user.sls{% for user, uid in pillar.get(’users’, {}).items() %}  ##pillar.get('users',{})可用pillar['users']代替,前者在没有得到值的情况下,赋默认值
 {{user}}:user.present:- uid: {{uid}}{% endfor %}

当然也可以不使用jinja模板

vim /srv/salt/user2.sls
{{ pillar.get('name','') }}:user.present:- uid: 2002

通过jinja模板配合grains指定pillar数据

/srv/pillar/pkg.slspkgs:{% if grains[’os_family’] == ’RedHat’ %}apache: httpdvim: vim-enhanced{% elif grains[’os_family’] == ’Debian’ %}apache: apache2vim: vim{% elif grains[’os’] == ’Arch’ %}apache: apachevim: vim{% endif %}

  • grains

服务器的一些静态信息,这里强调的是静态,就是不会变的东西,比如说os是centos,如果不会变化,除非重新安装系统

定义minion的grains可以写在/etc/salt/minion中格式如下

grains:roles:- webserver- memcachedeployment: datacenter4cabinet: 13cab_u: 14-15

或者写在/etc/salt/grains中,格式如下

roles:- webserver- memcache
deployment: datacenter4
cabinet: 13
cab_u: 14-15

也可以在master中编写grains的模块,同步到minion中,用Python来写很简单的

1.在/srv/salt中建立_grains目录

mkdir /srv/salt/_grains

2.编写grains文件,需要返回一个字典

 vim test1.pydef hello():                      ##函数名字无所谓,应该是所有函数都会运行agrain = {}agrain['hello'] = 'saltstack'
return agrain                   ##返回这个字典

3.同步到各个minion中去

salt '*' saltutil.sync_grains
salt '*' saltutil.sync_all
salt '*' state.highstate

4.验证

salt '*' grains.item hello

  • 使用 salt state

它的核心是写sls(SaLt State file)文件,sls文件默认格式是YAML格式(以后会支持XML),并默认使用jinja模板,YAML与XML类似,是一种简单的适合用来传输数据的格式,而jinja是根据django的模板语言发展而来的语言,简单并强大,支持for if 等循环判断。salt state主要用来描述系统,软性,服务,配置文件应该出于的状态,常常被称为配置管理!

通常state,pillar,top file会用sls文件来编写。state文件默认是放在/srv/salt中,它与你的master配置文件中的file_roots设置有关

示例: apache.sls文件内容 ##/srv/salt/apahce.sls,以后没有用绝对路径意思就是在/srv/salt下

apache:            ##state ID,全文件唯一,如果模块没跟-name默认用的ID作为-namepkg:             ##模块- installed    ##函数#- name: apache ##函数参数,可以省略service:         ##模块- running      ##函数#- name: apache ##函数参数,这个是省略的,也可以写上- require:     ##依赖系统- pkg: apache  ##表示依赖id为apache的pkg状态

下面来解释上面示例的意思:

声明一个叫apache的状态id,该id可以随意,最好能表示一定意思

pkg代表的是pkg模块

installed是pkg模块下的一个函数,描述的是状态,该函数表示apache是否部署,返回值为True或者False,为真时,表示状态OK,否则会去满足该状态(下载安装apache),如果满足不了会提示error,在该模块上面省略了参数-name: apache,因为ID为apache,这些参数是模块函数需要的(可以去查看源码)

service是指的service模块,这个模块下主要是描述service状态的函数,running状态函数表示apache在运行,省略-name不在表述,-require表示依赖系统,依赖系统是state system的重要组成部分,在该处描述了apache服务的运行需要依赖apache软件的部署,这里就要牵涉到sls文件的执行,sls文件在salt中执行时无序(如果没有指定顺序,后面会讲到order),假如先执行了service这个状态,它发现依赖pkg包的安装,会去先验证pkg的状态有没有满足,如果没有依赖关系的话,我们可以想象,如果没有安装apache,apache 的service肯定运行会失败的,我们来看看怎么执行这个sls文件:

salt '*' state.sls apache   

在命令行里这样执行就ok了,.sls不要写,如果在目录下,将目录与文件用’.’隔开,如: httpd/apache.sls –> httpd.apache

或者

salt '*' state.highstate 

这需要我们配置top file执定哪个minion应用哪个状态文件

top.sls内容

base:'*':- apache

下面我们继续看一些比较复杂的:

ssh/init.sls文件内容

openssh-client:pkg.installed
/etc/ssh/ssh_config:file.managed:- user: root
- group: root
- mode 644
- source: salt://ssh/ssh_config
- require:- pkg: openssh-client

ssh/server.sls文件内容

include:- sshopenssh-server:pkg.installedsshd:service.running:- require:- pkg: openssh-client- pkg: openssh-server- file: /etc/ssh/banner- file: /etc/ssh/sshd_config/etc/ssh/sshd_config:file.managed:- user: root
- group: root
- mode: 644
- source: salt://ssh/sshd_config
- require:- pkg: openssh-server/etc/ssh/banner:file:- managed
- user: root
- group: root
- mode: 644
- source: salt://ssh/banner
- require:- pkg: openssh-server

ssh/init.sls,学过Python的都知道目录下面的init文件是特殊文件,它怎么特殊呢,它特殊在当我们应用目录时会应用该文件的内容,如我们执行 salt ‘*’ state.sls ssh时应用的就是init.sls文件,明白了吗?再看里面的内容,前两行我们已经看过了,是描述某个rpm包有没有安装的,第三行是ID,也可以用来表示-name,以省略-name,file.managed是file模块与函数managed的快捷写法,看server.sls下最后就知道了,managed它描述了某个文件的状态,后面跟的是managed的参数,user,group,mode你们一看就知道什么意思了,关于这个source是指从哪下载源文件,salt://ssh/sshd_config是指的从salt的文件服务器里面下载,salt文件服务器其实就是file_roots默认/srv/salt/明白了吗,所以salt://ssh/sshd_config指的就是 /srv/salt/ssh/sshd_config,出来用salt的文件服务器,也可以用http,ftp服务器。- require是依赖系统不表,以后会详细说它的。再往下是server.sls文件,include表示包含意思,就是把ssh/init.sls直接包含进来

这时你会看到/srv/salt的目录树是:

ssh/init.sls
ssh/server.sls
ssh/banner
ssh/ssh_config
ssh/sshd_config

下面再来看一个官方样例:

ssh/custom-server.sls 文件内容

include:- ssh.server
extend:/etc/ssh/banner:file:- source: salt://ssh/custom-banner

python/mod_python.sls文件内容

include:- apacheextend:apache:service:- watch:- pkg: mod_python

首先我们include的别的文件,但是里面的内容并不是全部符合我们的要求,这时我们就需要用extend来重写部分内容,特殊的是依赖关系都是追加。custom-server.sls文件意思是包含ssh/server.sls,扩展/etc/ssh/banner,重新其source而其它的如user,group等不变,与include一致。 mode_python.sls文件意思是把apache.sls包含进来,想apache-service是追加了依赖关系(watch也是依赖系统的函数).

常用状态配置 salt-states-master.zip

转载于:https://www.cnblogs.com/karl-python/p/9255909.html

2018年7月1日笔记相关推荐

  1. 2018年7月7日笔记整理

    2018年7月7日星期六 操作系统: Operating System 简称OS 软硬件资源的管理者,是世界上最复杂的软件 主流操作系统: PC机:Windows,  OS X(基于Unix),  L ...

  2. 2018年4月26日笔记

    内置模块:hashlib Python的hashlib提供了常见的摘要算法,如md5,sha1, sha224, sha256, sha384, sha512等等,其中md5最为常用. 什么是摘要算法 ...

  3. 2018年3月29日笔记

    python数据类型:字符串string"" .元组tuple() .列表list[].字典dict{} 字符串可用单引号(' ')或双引号(" ")或三引号( ...

  4. 2018年4月22日笔记

    类封装的一般形式 class A(object): pass def main(): a = A() if __name__ = '__main__': main() 何为异常? 一般情况下,在Pyt ...

  5. 2018年7月5日笔记

    ansible是什么? Ansible 简单的说是一个配置管理系统(configuration management system).你只需要可以使用 ssh 访问你的服务器或设备就行.它也不同于其他 ...

  6. 2018年7月3日笔记

    state 1)state介绍 state是saltstack最核心的功能,通过预先指定好的sls文件对minion进行状态管理,支持pkg, file, network, service, user ...

  7. 2018年6月26日笔记

    salt简介 是一个配置管理工具,使用轻量级的通讯器ZMQ(ZeroMQ),使用Python写成的批量管理工具,有一个强大的远程执行命令引擎,也有一个强大的配置管理系统,叫Salt State Sys ...

  8. 2018年6月14日笔记

    requests.post() 一般用法 1 import requests 2 3 wd = "python" 4 params = {"wd": " ...

  9. 2018年7月20日日报

    姓名:任光烨 日期:2018年7月20日 今日学习任务:学习Linux操作指令,在Linux环境下完善通讯录程序,用*输出sin cos函数等. 今日完成情况:都已完成,200~300代码. 今日开发 ...

最新文章

  1. iptables时区_iptables time 时间匹配规则
  2. 短视频的生成,不要在技术上想当然
  3. android 序列化 json,android 读取json 为什么不直接反序列化
  4. 远程桌面mstsc /console(/admin) 的运用
  5. cryptojs vue 使用_VueJs里利用CryptoJs实现加密及解密的方法示例
  6. 7-49 打印学生选课清单 (25 分)(思路+详解+map做法(一对多)+超时解决)Come baby!
  7. 数学作图工具_科研论文作图系列-从PPT到AI (一)
  8. Q: 为什么如果我们把这两个组件安装在同一个COM+组件包中问题就不会出现(zz)...
  9. VBNET常用字符串常量
  10. 真正优秀的领导者,无非是做好这2件事
  11. 【友元、异常和其他】——C++ Prime Plus CH15
  12. 普及一下行业尖端知识——腾讯自研分布式数据库TBase
  13. 黑苹果(Hackintosh)驱动Intel HD 4600
  14. NISP题库(八套模拟题)
  15. 整流-1.输入电压角度计算
  16. xlp 开发环境在Ubuntu11.4中的建立
  17. Unreal Engine 4 系列教程 Part 8:粒子系统教程
  18. Python+selenium注册唯一账号
  19. iterm配置alias
  20. [LeetCode]题解(python):155-Min Stack

热门文章

  1. nginx访问静态文件
  2. PowerShell 中执行 dir /b /s
  3. 使用Excel公式,获取 当前 Excel 文件 的 名字
  4. 使用bat将数据连续写入文件中
  5. ブランド (brand) 品牌,商标
  6. Aspose.Words转换为PDF的时候字体丢失的问题解决
  7. 解决Mybatis-plus高版本不向后兼容的问题
  8. Win7 IIS7 HTTP 错误 404.2 - Not Found解决方法
  9. SVN版本问题:This client is too old to work with working copy 【解决】
  10. 基于prometheus的监控解决方案