写在前面的话

当我们需要进行一系列可重复且复杂的操作的时候,如果还继续用传统的 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 基础用法可以看文档:

http://docs.jinkan.org/docs/jinja2/

简单的使用方法:

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 在生产中到底如何使用。

最新文章

  1. Hadoop学习笔记—13.分布式集群中节点的动态添加与下架
  2. java并发编程学习: 阻塞队列 使用 及 实现原理
  3. hadoop2.4.1集群搭建
  4. SDAccel-FPGA将带来至多25倍单位功耗性能提升
  5. HTML笔记(七)head相关元素<base> & <meta>
  6. Oracle11g数据库安装
  7. Oracle 版本查看及版本号说明
  8. jQuery选择器解释和说明
  9. 读书笔记_Effective_C++_条款二十二:将成员变量声明为private
  10. TopCoder中插件的用法
  11. Eclipse中GIT插件更新工程到之前版本
  12. 201521123022 《Java程序设计》 第五周学习总结
  13. Spring Boot + Vue 前后端分离,两种文件上传方式总结
  14. java 编译
  15. linux 下将tomcat注册成服务并开机启动
  16. Window环境下,PHP调用Python脚本
  17. SQL Fundamentals || Single-Row Functions || 数字函数number functions
  18. PHP导出为Word格式
  19. 葡萄城报表介绍:B/S 报表软件
  20. python webdriver 报错WebDriverException: Message: can't access dead object的原因(pycharm中)

热门文章

  1. affine_trans_pixel 和 affine_trans_point_2d的区别
  2. foreachRDD
  3. oracle查询中会使索引无效的情况总结
  4. python_数据分析_正态分布
  5. UGUI 逻辑以及实用性辅助功能
  6. SpringMVC Junit Demo
  7. angular 学习记录
  8. Umi + Dva的数据传递学习Demo(代码有详细注释)
  9. nowcoder911J 异或的路径
  10. [BJOI2019]奥术神杖(AC自动机,DP,分数规划)