【04】Saltstack:配置管理
写在前面的话
当我们需要进行一系列可重复且复杂的操作的时候,如果还继续用传统的 cmd.run 来执行显然难以满足我们的需求。这时候就会在想一个问题,我们能不能把这些操作编辑成一个类似脚本的操作,我们只需要运行这个脚本,达到在指定目标机器上执行的意义。而且通过 saltsatck 帮我们自动兼容多种 linux 系统。这里我们就来谈一下解决思路之一的 saltstack sls 配置管理。
YUM 安装示例
我们可以查看一下 apache 安装配置格式:
apache-install:
pkg.installed:
- name:
- httpd
- httpd-devel apache-service:
service.running:
- name: httpd
- enable: True
apache-install:相当于我们给接下来的配置取了一个名字(ID),这个名字最好是唯一且具有意义。
pkg.installed:使用 saltstack 的安装模块。每个模块在同一 ID 上只能使用一次。
name:指定我们需要安装的包的名字。
下面的 service 则是指定服务安装完成后的启动状态声明。
注意,当我们没有定义 name 的时候,系统会自动将 ID 作为 name,所以如果你想偷懒不写 name,那么你 ID 则必须写成服务的名称。
对于 pkg 模块,常用的方法有以下几个:
pkg.installed:安装
pkg.latest:确保安装的是最新版本
pkg.remove:卸载
pkg.purge:卸载并删除配置文件
具体可以参考文档:
https://www.unixhot.com/docs/saltstack/ref/states/all/salt.states.pkg.html#module-salt.states.pkg
再看下完整的 LAMP 配置示例:
lamp-install:
pkg.installed:
- httpd
- httpd-devel
- mariadb
- mariadb-server
- php
- php-mysql
- php-cli
- php-mbstring apache-config:
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://lamp/conf/httpd.conf
- user: root
- group: root
- mode: 644 mysql-config:
file.managed:
- name: /etc/my.cnf
- source: salt://lamp/conf/my.cnf
- user: root
- group: root
- mode: 644 php-config:
file.managed:
- name: /etc/php.ini
- source: salt://lamp/conf/php.ini
- user: root
- group: root
- mode: 644 apache-service:
service.running:
- name: httpd
- enable: True
- reload: True
- require:
- pkg: lamp-install
- file: apache-config
- watch:
- file: apache-config mysql-service:
service.running:
- name: mariadb
- enable: True
file.managed:可以对配置文件进行替换管理。
source:正确的配置文件路径,该路径相对于 master 配置文件中的 file_root 路径。
require:定义该操作依赖于哪个操作。
reload:定义重载规则,结合 watch 使用。
watch:监控,如果监控项发生改变则执行 reload 定义。
如果觉得这样写一个文件内容太多,我们可以单独的抽离某些配置出来,做成单独的 sls 文件,然后在主文件中使用类似方法:
include:
- lamp.service
- lamp.config
其中 lamp 是因为我们在 file_root 定义的路径中建立了 lamp 目录来存放这些配置,后面 service,config 其实就是文件名。类似 Python 中模块。
单独执行某个 sls 配置的方法:
salt 'saltstack-node-03' state.sls lamp.lamp
state.sls:执行单个文件
lamp.lamp:是 lamp 目录下 lamp.sls 文件
在这些配置文件中都可以使用 jinja 模板语言来编写逻辑处理,非常简单,详细的 jinja 基础用法可以看文档:
简单的使用方法:
apache-config:
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://lamp/conf/httpd.conf
- user: root
- group: root
- mode: 644
- template: jinja
- defaults:
PORT: 8888
使用 jinja 模板,需要加入 template 声明,然后通过 defaults 传递一个字典到配置文件。
在模板中使用 {{ PORT }} 即可引用该变量。
同样,在模板中我们可以使用 grains 等方法获取 IP,如:{{ grains['fqdn_ip4'][0] }}。同理 pillar 也可以。
使用 {{ salt['network.hw_addr']('eth0') }} 来执行 salt 的方法并传参。
小结
这里只是简单的提了一下 sls 配置的应用,接下来我们会用大量的示例来说明,saltstack 在生产中到底如何使用。
【04】Saltstack:配置管理的更多相关文章
- SaltStack配置管理-jinja模板
上一篇:SaltStack配置管理-状态间关系 需求:需要apache配置文件里面监听的端口是每个minion本地的地址 saltstack默认的模板是jinjia模板 参考文档:http://doc ...
- SaltStack配置管理-状态间关系
上一篇:SaltStack配置管理-LAMP状态设计 include包含 上篇安装LAMP环境是一个个环境安装,可以通过include模块全部安装 lamp.sls include: - apache ...
- SaltStack配置管理-LAMP状态设计
上一篇:SaltStack之Salt-ssh 配置文件模板 apache: pkg.installed: - name: httpd service.running: - name: httpd /e ...
- SaltStack配置管理之状态模块和jinja2(五)
官方文档 https://docs.saltstack.com/en/latest/topics/states/index.html 配置管理之SLS Salt State SLS描述文件(YAM ...
- saltstack配置管理之states
states是saltstack中的配置语言,我们安装一个包,管理一个配置文件,最后保证服务的正常运行,都需要我们编写一些states sls文件(描述状态的文件)去描述和实现我们的功能.sls文件都 ...
- Saltstack配置管理(2)
1.SaltStack批量安装zabbix_agent端. vim /etc/salt/states/init/zabbix_agnet.sls zabbix_install.conf: pkg.in ...
- Saltstack配置管理
制作简单初始化模块(在minion主机安装软件): 1.定义master配置文件file_roots [root@localhost~]# cat /etc/salt/master file_root ...
- SaltStack配置管理--状态间的关系(六)
一.include的引用 需求场景:用于含有多个SLS的状态,使用include可以进行多个状态的组合,将安装apache,php,mysql集合在一个sls中 [root@7mini-node1 p ...
- saltStack 配置管理(也就是替换文件)
目录 /srv/salt/base下面新建一个文件dns.sls /opt/resolv.conf_bak: #这个是文件替换的位置,也就说替换到远程文件的/opt/resolv.conf_ ...
- 自动化运维工具saltstack02 -- 之SaltStack的配置管理
SaltStack的配置管理 1.配置管理说明 配置管理,顾名思义及配置与管理, salt-master的配置文件编写格式之YAML语法说明: 数据的结构通过缩进来表示,每一级用两个空格来表示缩进,如 ...
随机推荐
- 汇编指令之JMP,CALL,RET(修改EIP的值!!!)
简单介绍了,JMP指令按市面上的意思来说是跳转到指定地址,但我这里不这么说,JMP, CALL, RET三个指令均为修改EIP值的指令,EAX, ECX, EBX, EDX, ESP, EBP, ES ...
- Mysql Join-连接查询(上)
认识 多表连接查询,我感觉应该是关系型数据库最能体现其价值和灵活性的地方吧. 我觉得数据库的作用, 归纳起来无非就是存储和查询. 一言蔽之,数据库就是能灵活地存储和查询数据. 存储上, 也是以文件的方 ...
- 2017 ICPC网络赛(西安)--- Xor
题目连接 Problem There is a tree with n nodes. For each node, there is an integer value ai, (1≤ai≤1,000 ...
- 6-剑指offer: 和为S的连续正数序列
题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ...
- springboot-项目获取resources下文件的方法
spring项目获取resources下文件的方法 最近写读取模板文件做一些后续的处理,将文件放在了项目的resources 下,发现了一个好用的读取方法: 比如上边是你需要读取的文件: 读 ...
- grep命令用法
linux中grep命令的用法 作为linux中最为常用的三大文本(awk,sed,grep)处理工具之一,掌握好其用法是很有必要的. 首先谈一下grep命令的常用格式为:grep [选项] ”模 ...
- scp、rsync、xsync
scp. 拷贝完全相同 scp -r etc/hadoop/dfs.hosts root@192.168.121.134:/usr/local/hadoop/hadoop-2.7.6/etc/hado ...
- Scrapy框架详解
Python网络爬虫Scrapy框架研究 Scrapy1.0教程 Scrapy笔记(1)- 入门篇 Scrapy笔记(2)- 完整示例 Scrapy笔记(3)- Spider详解 Scrapy笔记(4 ...
- 关于js的<、>、=、<=、>=的比较
判断两个值的大小的时候.需要先转换为同一类型.比如parseInt转换. 示例:if(a<b) if(parseInt(a)<parseInt(b)) 后一种方式不容易出错.
- 交换机端口与Mac地址绑定(基于Cisco模拟器)
实验设备: 二层交换机一台,主机三台 实验步骤: 1.进入相应的接口 (以端口1设置Mac地址绑定,PC0接1端口举例) Switch>enable Switch#config Configur ...