自动化运维工具saltstack02 -- 之SaltStack的配置管理
SaltStack的配置管理
1、配置管理说明
- 配置管理,顾名思义及配置与管理,
- salt-master的配置文件编写格式之YAML语法说明:
数据的结构通过缩进来表示,每一级用两个空格来表示缩进,如果有下一级结构需要以冒号结尾,连续的列表通过减号“-”来表示,减号后面需要有空格,不是以冒号结尾的冒号后面需要有空格。
- 规则:
salt需要每个缩进级别由两个空格组成,不支持tabs键,冒号{如果有下一级结构需要以冒号结尾,如果不是以冒号结尾则冒号后面需要有一个空格}
2、修改/etc/salt/master文件
# vim /etc/salt/master +
file_roots: #告诉salt状态文件的位置
base: #base为必须存在的,
- /srv/salt/base
dev:
- /srv/salt/dev
test:
- /srv/salt/test
prod:
- /srv/salt/prod
说明:配置文件这里也是YAML格式(注意缩进),缩进以两个空格的方式,如果没有空格或者多了空格都会报错, - 后面也是有一个空格的,多了或者没有都会报错
2.1、创建对应的目录并重启master
# mkdir -p /srv/salt/{base,dev,test,prod} #创建目录
# systemctl restart salt-master #重启master
2.2、重启后测试master与minion的连通性
# salt 'linux-node1*' test.ping
linux-node1.example.com:
True #成功
3、StatStack配置管理之写一个安装httpd的状态
# cd /srv/salt/base
# vim apache.sls
apache-install: #安装状态的ID声明
pkg.installed: #pkg为状态模块,installed是pkg模块下的安装方法
- name: httpd #installed方法的参数,name是一个特殊的参数,安装的服务为httpd
注:以上整个状态的意思为:{应该有一个httpd服务,如果有则啥也不干,如果没有则下载一个} apache-service: #服务状态的ID
service.running: #service是状态模块,running是service模块下的启动方法
- name: httpd #方法的目标参数(对哪个目标进行操作)
- enable: True #目标参数的动作(True为启动)
3.1、执行这个模块
# salt "linux-node1*" state.sls apache
3.2、执行结果为:

3.3、此时去salt-minion服务器上去查看下httpd这个服务即可

至此就验证我们的httpd状态安装启动是没问题的!!!
4、配置管理之多级目录引用与安装tomcat状态
如果需要调用多级目录可以通过.来引用,例:父目录.子目录
4.1、创建web目录
# cd /srv/salt/base/
# mkdir web
# cd web/
4.2、到web目录下创建安装tomcat的状态
# cat tomcat.sls
jdk-install:
pkg.installed: #安装jdk
- name: java-1.8.-openjdk tomcat-install:
file.managed: #file模块下的managed的方法(分发文件方法),把master端的文件放到minion端
- name: /usr/local/src/apache-tomcat-8.0..tar.gz #放到minion端的位置
- source: salt://web/files/apache-tomcat-8.0.46.tar.gz #在master端的文件
- user: root #到minion端的文件的用户组和权限配置
- group: root
- mode:
cmd.run: #在状态里写shell命令,在minion端执行
- name: cd /usr/local/src && tar zxf apache-tomcat-8.0..tar.gz && mv apache-tomcat-8.0. /usr/local/ && ln -s /usr/local/apache-tomcat-8.0. /usr/local/tomcat
- unless: test -L /usr/local/tomcat && test -d /usr/local/apache-tomcat-8.0.
4.3、执行这个多级目录的安装tomcat状态
# salt "*" state.sls web.tomcat
说明:salt "*",这个*表示所有,即所有的minion端,也可以匹配,如linux-node1*
5、SaltStack配置管理之高级状态:top.sls
说明:顶级的入口文件,建议放在base环境下(放在其他环境下也可以)多个也可以,为了便于管理建议使用一个,默认名为top.sls(叫别的也可以)。
5.1、写一个高级状态
# cat top.sls
base: #环境名称,表示在base环境对应的目录下
'linux-node2.example.com': #minion端的ID
- web.tomcat #在这个minion上执行的状态
'linux-node1.example.com': #minion端的ID
- web.lamp #在这个minion上执行的状态
说明:这个高级状态的base:表示当前的高级状态所在的环境
‘linux-node2.example.com’: 为minion的通讯ID
-web.tomcat 表示执行web目录下的tomcat状态
5.2、执行这个高级状态
# salt "*" state.highstate
6、saltstack配置管理之模拟执行
在执行的命令后面加上test=True,即这条salt命令模拟执行,不会真的执行,但是执行后会有变化的内容会以黄色字体表示出来;
# salt "*" state.sls apache test=True
7、saltstack配置管理之使master端目录下的文件生效到minion端下
apache-config:
file.recurse:
- name: /etc/httpd/conf.d
- source: salt://web/files/apache-conf.d
8、saltstack配置管理之往指定文件里追加内容
[root@linux-node1 web]# cat append.sls
/etc/profile: #目标文件
file.append: #动作,追加内容
- text: #类型text文件
- "#aaa" #追加的内容
8.1、执行结果
# salt '*' state.sls web.append
linux-node1.example.com:
----------
ID: /etc/profile
Function: file.append
Result: True
Comment: Appended lines
Started: ::56.689939
Duration: 9.359 ms
Changes:
----------
diff:
---
+++
@@ -, +, @@ unset i
unset -f pathmunge
+#aaa #添加了这么多东西 Summary
------------
Succeeded: (changed=)
Failed:
9、saltstatck配置管理之状态之间的关系处理(依赖和被依赖的关系处理)
- 实现前置的状态执行不成功,依赖前面状态的状态不往下执行,
- 实现监控一个状态,被监控状态内的功能发生了改变则监控的状态实现该表
# cat lamp.sls
lamp-install:
pkg.installed:
- pkgs:
- httpd
- php
- php-pdo
- php-mysql apache-config:
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://web/files/httpd.conf
- user: root
- group: root
- mode:
- template: jinja
- defaults:
PORT:
IPADDR: {{ grains['fqdn_ip4'][] }}
- require: #依赖于某个状态{即lamp-install:状态执行不成功,不执行当前状态}
- pkg: lamp-install #pkg指的是pkg模块,lamp-install是状态ID。 apache-conf:
file.recurse:
- name: /etc/httpd/conf.d
- source: salt://web/files/apache-conf.d
- watch_in: #被lamp-service状态关注{即本状态内发生改变,lamp-service状态会被触发}
- service: lamp-service #service模块,lamp-service是ID号 php-config:
file.managed:
- name: /etc/php.ini
- source: salt://web/files/php.ini
- user: root
- group: root
- mode:
- watch_in: #被lamp-service状态关注{即本状态内发生改变,lamp-service状态会被触发}
- service: lamp-service #service模块,lamp-service是ID号 lamp-service:
service.running:
- name: httpd
- enable: True
- reload: True #重载
- watch: #关注apache-config状态,如果apache-config状态发生改变则触发本状态
- file: apache-config #file表示模块,apache-config为ID号
说明:
require #我依赖某个状态,即依赖的状态触发成功后,该状态便执行
require_in #我被某个状态依赖,即该状态执行后,依赖于该状态的状态自动触发
watch #我关注某个状态,即该状态关注某个状态,被关注的状态执行后自动触发该状态
watch_in #我被某个状态关注,即该状态被某个状态关注,改状态执行后,关注该状态的状态自动执行
10、saltstack配置管理之状态之间的判断,如果存在则不执行
# cat tomcat.sls
jdk-install: #安装jdk
pkg.installed:
- name: java-1.8.-openjdk tomcat-install: #安装tomcat
file.managed:
- name: /usr/local/src/apache-tomcat-8.0..tar.gz #minion端的文件路径
- source: salt://web/files/apache-tomcat-8.0.46.tar.gz #master端的文件路径
- user: root
- group: root
- mode: #权限
cmd.run: #命令模块
- name: cd /usr/local/src && tar zxf apache-tomcat-8.0..tar.gz && mv apache-tomcat-8.0. /usr/local/ && ln -s /usr/local/apache-tomcat-8.0. /usr/local/tomcat #tomcat解压,做软连接的过程
- unless: test -L /usr/local/tomcat && test -d /usr/local/apache-tomcat-8.0. #判断,如果存在解压目录和软连接则不再执行
说明:
cmd.run命令模块支持判断,用unless来实现判断
unless #给unless一个条件,这个条件为真则不执行,假则执行
11、saltstack配置管理之远程执行时匹配主机名
11.1、通配符匹配
salt '*' test.ping
salt 'linux-node1*' test.ping
salt '*example*' test.ping
salt 'web?' test.ping
salt 'web[1-5]' test.ping
salt 'web[1,4]' test.ping
11.2、正则匹配
salt -E 'linux-node(1|2).example.com' test.ping
11.3、高级状态(top.sls)里的正则匹配
base:
'web1-(prod|devel)':
- match: pcre
- webserver
11.4、列表匹配
salt -L 'web1,web2,web3' test.ping
11.5、grains匹配
salt -G 'os:CentOS' test.ping
salt -G 'cpuarch:x86_64' grains.item num_cpus
11.6、IP地址匹配
salt -S 192.168.56.0/ test.ping
11.7、批量处理(一次性执行多少台)
salt '*' -b test.ping #执行一次性执行10台
11.8、批量处理(按百分比执行)
salt -G 'os:RedHat' --batch-size % apache.signal uptime
12、saltstack配置管理之include用法
我们在安装tomcat时都必须线安装jdk,此时我们可以先将jdk写一个单独的状态,然后再安装tomcat的状态里include,具体看下面的配置
、先写一个jdk的安装状态
# cat /srv/salt/base/web/jdk.sls
jdk-install:
pkg.installed:
- name: java-1.8.-openjdk 、然后写tomcat的安装状态
# cat /srv/salt/base/web/tomcat1.sls
include: #将前面写的jdk状态include进来
- web.jdk tomcat-install:
file.managed:
- name: /usr/local/src/apache-tomcat-8.0..tar.gz
- source: salt://web/files/apache-tomcat-8.0.46.tar.gz
- user: root
- group: root
- mode:
cmd.run:
- name: cd /usr/local/src && tar zxf apache-tomcat-8.0..tar.gz && mv apache-tomcat-8.0. /usr/local/ && ln -s /usr/local/apache-tomcat-8.0. /usr/local/tomcat
- unless: test -L /usr/local/tomcat && test -d /usr/local/apache-tomcat-8.0.
13、saltstack配置管理之执行非默认环境下的状态(prod下的状态)
如果要执行非默认环境下的状态时需要在执行状态命令的结尾加上:saltenv=要执行的环境名
salt 'linux-node2*' state.sls redis-cluster.redis-master saltenv=prod
配置管理相关模块说明
1、pkg模块
pkg是虚拟的,不用管是什么操作系统,如果centos系统pkg模块会使用yum安装软件包,如果是其他的系统它也会使用系统支持安装工具,所以这个不需要担心。
- pkg模块用得到的参数
- pkg.installed #确保软件包已安装,如果没有安装就安装。
- pkg.latest #确保软件是最新版本,如果不是,进行升级。
- pkg.remove #确保软件包已卸载,如果之前已安装,进行卸载。
- pkg.purge #除了remove外,也会删除其配件
- pkgs.named #列表,(都想下载那些软件包)
2、service模块
- service.running #确保服务处于运行状态,如果没有运行就启动。
- service.enabled #确保服务开机自动启动
- service.disabled #确保服务开机不自启动
- service.dead #确保服务当前没有运行,如果运行就停止
3、file模块
- file.managed #保证minion端的文件存在并且为对应master端的状态
- file.recurse #保证minion端的目录及目录下的文件存在并且为对应master端的状态
- file.append #往指定文件里追加文本
- file.absent 保证文件不存在,如果存在就删除
自动化运维工具saltstack02 -- 之SaltStack的配置管理的更多相关文章
- 自动化运维工具saltstack01 -- 之SaltStack介绍、安装与基础使用
SaltStack介绍 官网地址:http://www.saltstack.com 官方文档地址:http://docs.saltstack.com Github:http://Github.com/ ...
- 自动化运维工具saltstack03 -- 之SaltStack的数据系统
SaltStack数据系统 saltstack有两种数据系统:grains与pillar 1.SaltStack数据系统之grains grains可以收集minion端的静态数据(即机器启动时收集一 ...
- 自动化运维工具 SaltStack 搭建
原文地址:https://www.ibm.com/developerworks/cn/opensource/os-devops-saltstack-in-cloud/index.html#N10072 ...
- 自动化运维工具SaltStack详细部署
==========================================================================================一.基础介绍==== ...
- 自动化运维工具SaltStack详细部署【转】
==========================================================================================一.基础介绍==== ...
- CheungSSH国产自动化运维工具开源Web界面
CheungSSH web2.0 发布文档 CheungSSH 简介 CheungSSH是一款国人自主研发的Linux运维自动化管理服务器软件,秉着为企业降低运营成本,解放管理员双手和自动化生产的理念 ...
- 自动化运维工具Ansible详细部署 (转载)
自动化运维工具Ansible详细部署 标签:ansible 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sofar.blog. ...
- 企业级自动化运维工具应用实战-ansible
背景 公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备.公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出多套环境可以共开发和测试人员做测试,运 ...
- Ansible自动化运维工具-上
[Ansible特点] 1)Ansible与saltstack均是基于Python语言开发的 2)安装使用简单,基于不同插件和模块实现各种软件,平台,版本的管理以及支持虚拟容器多层级的部署 3)不需要 ...
随机推荐
- PHP整数转小数
sprintf('%.2f',$memrow['yjrebate1']+$memrow['yjrebate2'])
- 【题解】洛谷P1080 [NOIP2012TG] 国王游戏(贪心+高精度)
次元传送门::洛谷P1080 思路 我们模拟一下只有两个大臣的时候发现 当a1∗b1<a2∗b2是ans1<ans2 所以我们对所有大臣关于左右手之积进行排序 得到最多钱的大臣就是 ...
- Android 4.4系统获取root权限的方法
1. 准备工作: 准备一台ubuntu机器,将boot.img复制到该机器上,下载必要的工具sudo apt-get install abootimggit clone https://github. ...
- CCF认证201803-1 跳一跳
import java.util.Scanner; public class Jump { public static void main(String[] args) { Scanner sc = ...
- iOS笔记,开发经验总结【持续更新】
1. 设置navigationBar 背景颜色有色差, 原因:如果单纯的设置背景颜色也是有高斯模糊处理的效果,对纯色高斯模糊处理过后相当于纯色的70%(猜测)透明化处理,但是反正就是有色差 解决方法一 ...
- #leetcode刷题之路16-最接近的三数之和
给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这三个数的和.假定每组输入只存在唯一答案. 例如,给定数 ...
- django中对数据库的增删改查
Django的配置文件时settings.py中的 TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplate ...
- 偏前端-vue.js学习之路初级(二)组件化构建
vue.js 组件化构建 组件系统是 Vue 的另一个重要概念,因为它是一种抽象,允许我们使用小型.自包含和通常可复用的组件构建大型应用.仔细想想,几乎任意类型的应用界面都可以抽象为一个组件树: ...
- Delphi写的DLL,OCX中多线程一个同步问题
Delphi写的DLL,OCX中如果使用了TThread.Synchronze(Proc),可能导致线程死锁,原因是无法唤醒EXE中主线程, Synchronze并不会进入EXE主线程消息队列. 下面 ...
- 树莓派GPIO控制LED彩灯
树莓派使用GPIO接口来控制LED灯,自制五彩炫光的节日彩灯. 1.硬件准备 a. 树莓派(Raspberry Pi)一个 b. 彩色RGB二极管 c. 杜邦线 d. 5V电源引脚 以上所有零件均可在 ...