写在前面的话

当我们需要进行一系列可重复且复杂的操作的时候,如果还继续用传统的 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 在生产中到底如何使用。

【04】Saltstack:配置管理的更多相关文章

  1. SaltStack配置管理-jinja模板

    上一篇:SaltStack配置管理-状态间关系 需求:需要apache配置文件里面监听的端口是每个minion本地的地址 saltstack默认的模板是jinjia模板 参考文档:http://doc ...

  2. SaltStack配置管理-状态间关系

    上一篇:SaltStack配置管理-LAMP状态设计 include包含 上篇安装LAMP环境是一个个环境安装,可以通过include模块全部安装 lamp.sls include: - apache ...

  3. SaltStack配置管理-LAMP状态设计

    上一篇:SaltStack之Salt-ssh 配置文件模板 apache: pkg.installed: - name: httpd service.running: - name: httpd /e ...

  4. SaltStack配置管理之状态模块和jinja2(五)

    官方文档 https://docs.saltstack.com/en/latest/topics/states/index.html 配置管理之SLS Salt  State  SLS描述文件(YAM ...

  5. saltstack配置管理之states

    states是saltstack中的配置语言,我们安装一个包,管理一个配置文件,最后保证服务的正常运行,都需要我们编写一些states sls文件(描述状态的文件)去描述和实现我们的功能.sls文件都 ...

  6. Saltstack配置管理(2)

    1.SaltStack批量安装zabbix_agent端. vim /etc/salt/states/init/zabbix_agnet.sls zabbix_install.conf: pkg.in ...

  7. Saltstack配置管理

    制作简单初始化模块(在minion主机安装软件): 1.定义master配置文件file_roots [root@localhost~]# cat /etc/salt/master file_root ...

  8. SaltStack配置管理--状态间的关系(六)

    一.include的引用 需求场景:用于含有多个SLS的状态,使用include可以进行多个状态的组合,将安装apache,php,mysql集合在一个sls中 [root@7mini-node1 p ...

  9. saltStack 配置管理(也就是替换文件)

    目录  /srv/salt/base下面新建一个文件dns.sls /opt/resolv.conf_bak:     #这个是文件替换的位置,也就说替换到远程文件的/opt/resolv.conf_ ...

  10. 自动化运维工具saltstack02 -- 之SaltStack的配置管理

    SaltStack的配置管理 1.配置管理说明 配置管理,顾名思义及配置与管理, salt-master的配置文件编写格式之YAML语法说明: 数据的结构通过缩进来表示,每一级用两个空格来表示缩进,如 ...

随机推荐

  1. python 排序和查找算法

    一.搜索 1.顺序查找 数据存储在具有线性或顺序关系的结构中时,可顺序访问查找 def sequential_search(ilist, item): pos = 0 while pos < l ...

  2. ios--NavigationViewController跳转、返回传值

      使用NavigationViewController进行页面跳转时,应该使用pushViewController方法来跳转至下一页面,这样的话,下一页面同样在NavigationViewContr ...

  3. Violet音乐社区 - 总结报告

    目录 一.项目概述 1.1 项目背景 1.2 编写目的 1.3 项目文档 1.4 项目源码 1.5 项目成果 二.个人工作总结 1.1 工作概览 1.1.1 作为项目组组长 1.1.2 作为项目组成员 ...

  4. Xml格式数据转map工具类

    前言[ 最近在写一个业务,由于调UPS物流的接口返回的是一个xml格式的数据结果,我现在要拿到xml中某个节点的值,而这个xml数据是多节点多层级的,并且这某个节点的值有可能只有一条值,有可能有多条, ...

  5. updataStateByKey算子的使用

    updataStateByKeyApp.scala import org.apache.spark.SparkConf import org.apache.spark.streaming.{Secon ...

  6. odoo10学习笔记十五:仪表板

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/11189353.html 仪表盘可以通过外部ID引用其他视图文件的内容,整合到一个界面进行显示. 一:建立仪表 ...

  7. openstack Train 版本dashaboard 404问题

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明本文链接:https://blog.csdn.net/weixin_28738845/articl ...

  8. 201871010112-梁丽珍《面向对象程序设计(java)》第十五周学习总结

    博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.co ...

  9. 201971010131-张兴盼《面向对象程序设计(java)》第十二周学习总结

      内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/ ...

  10. 【使用篇二】SpringBoot异常处理(9)

    异常的处理方式有多种: 自定义错误页面 @ExceptionHandler注解 @ControllerAdvice+@ExceptionHandler注解 配置SimpleMappingExcepti ...