saltstack--状态判断unless与onlyif
saltstack状态判断unless与onlyif
很多时候我们在编写 state 文件时候需要进行判断,判断该目录或文件是否存在,判断该配置是否已经已添加,然后根据判断结果再决定命令或动作是否执行,这时候就需要用到了状态判断的unless和onlyif。
unless
unless示例:需求创建/tmp/unless.txt文件,存在则不创建,不存在则创建
[root@salt-master ~]# cat /srv/salt/prod/unless.sls
test-unless:
cmd.run:
- name: touch /tmp/unless.txt
- unless: test -f /tmp/unless.txt [root@salt-master ~]# salt 'salt-minion01' state.sls unless saltenv=prod
salt-minion01:
----------
ID: test-unless
Function: cmd.run
Name: touch /tmp/unless.txt
Result: True
Comment: Command "touch /tmp/unless.txt" run
Started: ::51.522319
Duration: 31.822 ms
Changes:
----------
pid: retcode: stderr:
stdout: Summary for salt-minion01
------------
Succeeded: (changed=)
Failed:
------------
Total states run:
Total run time: 31.822 ms
#上面第一次执行,可以看到发生了一次更改,创建了 /tmp/unless.txt文件 [root@salt-master ~]# salt 'salt-minion01' state.sls unless saltenv=prod
salt-minion01:
----------
ID: test-unless
Function: cmd.run
Name: touch /tmp/unless.txt
Result: True
Comment: unless condition is true
Started: ::40.819789
Duration: 10.477 ms
Changes: Summary for salt-minion01
------------
Succeeded:
Failed:
------------
Total states run:
Total run time: 10.477 ms
#第二次执行,可以看到该文件已经存在,并没有再次创建
通过上面的小案例可以看出,当unless返回为真则不执行,当unless返回为假才执行。
onlyif
onlyif正好和unless相反,当onlyif返回为真执行,当onlyif返回为假不执行
onlyif示例:需求,当/tmp/onlyif.txt文件存在,则创建/tmp/onlyif目录,不存在,则不创建/tmp/onlyif目录
[root@salt-master ~]# cat /srv/salt/prod/onlyif.sls
test-onlyif:
cmd.run:
- name: mkdir /tmp/onlyif
- onlyif: test -f /tmp/onlyif.txt [root@salt-master ~]# salt 'salt-minion01' state.sls onlyif saltenv=prod
salt-minion01:
----------
ID: test-onlyif
Function: cmd.run
Name: mkdir /tmp/onlyif
Result: True
Comment: onlyif condition is false
Started: ::56.460583
Duration: 9.612 ms
Changes: Summary for salt-minion01
------------
Succeeded:
Failed:
------------
Total states run:
Total run time: 9.612 ms #通过上面可以看到,由于/tmp/onlyif.txt文件不存在,并没有创建;手动创建一个/tmp/onlyif.txt文件再次执行
[root@salt-master ~]# salt 'salt-minion01' cmd.run "touch /tmp/onlyif.txt"
salt-minion01:
[root@salt-master ~]# salt 'salt-minion01' state.sls onlyif saltenv=prod
salt-minion01:
----------
ID: test-onlyif
Function: cmd.run
Name: mkdir /tmp/onlyif
Result: True
Comment: Command "mkdir /tmp/onlyif" run
Started: ::07.712492
Duration: 14.646 ms
Changes:
----------
pid: retcode: stderr:
stdout: Summary for salt-minion01
------------
Succeeded: (changed=)
Failed:
------------
Total states run:
Total run time: 14.646 ms #可以看到上面我们手动创建了一个/tmp/onlyif.txt文件后再次执行,则发生了改变,在/tmp/创建了onlyif目录
Redis主从架构案例
说明:该案例在prod环境配置

1)环境准备,定义file_roots环境
[root@salt-master ~]# vim /etc/salt/master
file_roots:
base:
- /srv/salt/base
dev:
- /srv/salt/dev
prod:
- /srv/salt/prod
2)创建对应环境目录
[root@salt-master ~]# mkdir -p /srv/salt/{base,dev,prod}
[root@salt-master ~]# mkdir -p /srv/salt/prod/redis/files/
3)编写state sls状态文件
#初始化redis(安装和基本配置)
[root@salt-master ~]# cat /srv/salt/prod/redis/init.sls
redis-install:
pkg.installed:
- name: redis redis-config:
file.managed:
- name: /etc/redis.conf
- source: salt://redis/files/redis.conf
- user: root
- group: root
- mode:
- template: jinja
- defaults:
BIND: {{ grains['fqdn_ip4'][] }}
PORT:
DAEMONIZA: 'yes'
- require:
- pkg: redis-install redis-service:
service.running:
- name: redis
- enable: True
- watch:
- file: redis-config #master直接引入 init
[root@salt-master ~]# cat /srv/salt/prod/redis/master.sls
include:
- redis.init #slave引入init 并配置主从信息
[root@salt-master ~]# cat /srv/salt/prod/redis/slave.sls
include:
- redis.init #配置主从
slave-config:
cmd.run:
- name: redis-cli -h 192.168.1.34 slaveof 192.168.1.33
- unless: redis-cli -h 192.168.1.34 info |grep role:slave
- require:
- service: redis-service 说明:
unless:返回为真则不执行,反之为假则执行
4)配置文件准备
[root@salt-master ~]# grep "^[a-Z]" /etc/redis.conf >>/srv/salt/prod/redis/files/redis.conf
[root@salt-master ~]# cat /srv/salt/prod/redis/files/redis.conf
#这里使用jinja
bind {{ BIND }}
protected-mode yes
#这里使用jinja
port {{ PORT }}
tcp-backlog
timeout
tcp-keepalive
#这里使用jinja
daemonize {{ DAEMONIZA }}
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile /var/log/redis/redis.log
databases
save
save
save
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /var/lib/redis
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay
repl-disable-tcp-nodelay no
slave-priority
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit
slowlog-log-slower-than
slowlog-max-len
latency-monitor-threshold
notify-keyspace-events ""
hash-max-ziplist-entries
hash-max-ziplist-value
list-max-ziplist-size -
list-compress-depth
set-max-intset-entries
zset-max-ziplist-entries
zset-max-ziplist-value
hll-sparse-max-bytes
activerehashing yes
client-output-buffer-limit normal
client-output-buffer-limit slave 256mb 64mb
client-output-buffer-limit pubsub 32mb 8mb
hz
aof-rewrite-incremental-fsync yes
5)top file文件编写
[root@salt-master ~]# cat /srv/salt/base/top.sls
prod:
'salt-minion02':
- redis.master
'salt-minion03':
- redis.slave
6)整体state文件查看
[root@salt-master ~]# tree /srv/salt/prod/redis/
/srv/salt/prod/redis/
├── files
│ └── redis.conf
├── init.sls
├── master.sls
└── slave.sls directory, files
7)top file高级状态执行
#先测试下看下状态文件是否编写正确,再正式执行
[root@salt-master ~]# salt '*' state.highstate test=True
[root@salt-master ~]# salt '*' state.highstate
saltstack--状态判断unless与onlyif的更多相关文章
- [代码笔记]VUE路由根据返回状态判断添加响应拦截器
//返回状态判断(添加响应拦截器) Axios.interceptors.response.use( res => { //对响应数据做些事 if (res.data && !r ...
- SpringBoot29 登录逻辑、登录状态判断
1 知识点扫盲 浏览器和服务器之间时通过session来确定连接状态的,浏览器第一次请求时服务端会自动生成一个session,并将这个sessionId传回给浏览器,浏览器将这个sessionId存放 ...
- SKU多维属性状态判断算法
作者:周琪力,前端工程师,网络常用昵称「keelii」.在过去的4年里主要负责京东网站商品详情页的前端系统架构和开发,平时主要写 JavaScript 偶尔写点NodeJS,Python.琪力博客: ...
- C# MVC 用户登录状态判断 【C#】list 去重(转载) js 日期格式转换(转载) C#日期转换(转载) Nullable<System.DateTime>日期格式转换 (转载) Asp.Net MVC中Action跳转(转载)
C# MVC 用户登录状态判断 来源:https://www.cnblogs.com/cherryzhou/p/4978342.html 在Filters文件夹下添加一个类Authenticati ...
- 判断密码是否可见/判断登录的状态/判断在form表单中 定义rules规则验证(iview)
一: 判断密码是否可见判断:type="visiblePassword ? 'text' : 'password'" 是否为false 或者 true 密码为输入框或者文本框点击眼 ...
- saltStack 状态模块(状态间的关系)
unless onlyif:状态间的条件判断,主要用于cmd状态模块 常用方法: onlyif:检查的命令,仅当'onlyif' 选项指向的命令返回true时才执行name 定义的命 unle ...
- iOS中利用CoreTelephony获取用户当前网络状态(判断2G,3G,4G)
前言: 在项目开发当中,往往需要利用网络.而用户的网络环境也需要我们开发者去注意,根据不同的网络状态作相应的优化,以提升用户体验. 但通常我们只会判断用户是在WIFI还是移动数据,而实际上,移动数据也 ...
- Android杂谈--网络状态判断
许多联网应用都在开始运行的时候检查当前网络状态,如果没有开启则去开启它,记录一下以前写程序时的网络检查,发现人的记忆力真是有限,总是隔段时间久忘记,所以记录下来是最好的记忆. 我们可以在一开始启动程序 ...
- iOS完美的网络状态判断工具
大多数App都严重依赖于网络,一款用户体验良好的的app是必须要考虑网络状态变化的.iOSSinger下一般使用Reachability这个类来检测网络的变化. Reachability 这个是苹果开 ...
随机推荐
- 图解 Java 垃圾回收机制,写得非常好!
阅读本文大概需要 3.7 分钟. 翻译:Rhys_Lee, AzureSora, 溪边九节, 小小菜鸟鸡 blog.csdn.net/zl1zl2zl3/article/details/9090408 ...
- Python学习教程(十)精选 TOP45 值得学习的Python项目
精选 TOP45 值得学习的Python项目 [导读]热门资源博客 Mybridge AI 比较了 18000 个关于 Python 的项目,并从中精选出 45 个最具竞争力的项目.我们进行了翻译,在 ...
- Python3+WebSockets实现WebSocket通信
一.说明 1.1 背景说明 前段时间同事说云平台通信使用了个websocket的东西,今天抽空来看一下具体是怎么个通信过程. 从形式上看,websocket是一个应用层协议,socket是数据链路层. ...
- 安装Windows10出现无法识别磁盘时的解决方案
由于前些日子对deepin系统比较感兴趣,一时兴起把备用机刷成了deepin,奈何还是过分依赖windows下的软件,又不得不再刷回Win10. 但由于Linux支持的磁盘格式与Windows不同,在 ...
- Java学习:数据库连接池技术
本节内容 数据库连接池 Spring JDBC : JDBC Template 数据库连接池 1.概念:其实就是一个容器(集合),存放数据库连接的容器 当系统初始化好后,容器中会申请一些连接对象,当用 ...
- - instanceof 和 isInstance 强转 类型 class MD
目录 目录 instanceof 和 isInstance 强转 类型 class MD 简介 测试案例 继承关系 测试代码 打印结果 Markdown版本笔记 我的GitHub首页 我的博客 我的微 ...
- mysql 5.7 修改root密码允许远程连接
1.修改root密码(其他用户类似) 试过网上看的一些 在mysql数据库执行 update user set password='新密码' where user='root' 执行说找不到字段, ...
- API之Scanner,Random,ArrayList基础运用。重点是ArrayList
有关API的这些类可以参考JDK的官方中文文档,看我的另一篇文章有下载==> https://www.cnblogs.com/gz18221/p/11968505.html<==文章地址 ...
- python爬虫User Agent用户代理
UserAgent简介 UserAgent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,UserAgent也简称UA.它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及 ...
- 很带劲,Android9.0可以在i.MX8开发板上这样跑
米尔MYD-JX8MX开发板移植了Android9.0操作系统,现阶段最高版本的Android9.0操作系统将给您的产品在安全与稳定性方面带来更大的提升.可惜了,这里不能上传视频在i.MX8开发板跑A ...