SaltStack--镜像管理
原创SaltStack--配置管理
saltstack配置管理 #
Saltstack状态模块 #
远程执行模块的执行是程序性的,而状态是正确的。 minion 一个描述和定义,管理者不需要描述部署任务是如何完成的,只需描述它。 minion 状态描述。
它的和声是写下来的 sls(Salt State file) 文件, sls 该文件的默认格式为 YAML 格式,并默认使用它。 jinja 模板, jinja 是根据 django 模板语言是从该语言发展而来的,简单而强大,支持 for if 和其他循环语句。 salt state 它主要用于描述系统、服务和配置文件的状态,通常称为配置管理。

mysql-install: #ID声明,必须唯一 pkg.installed: #state状态声明
- pkgs: #选项声明
- mariadb: #选项列表
- mariadb-server
说明: 一个ID只能出现一次 一个ID同一模块只能使用一次。 一个ID下不能使用多个不同的模块

模块帮助手册

列出所有状态模块
[root@salt-master ~]# salt * sys.list_modules
查看指定模块的所有方法。
[root@salt-master ~]# salt * sys.list_state_functions pkg
查看如何使用指定的模块。
[root@salt-master ~]# salt * sys.state_doc pkg
查看指定模块的指定方法的用法。
[root@salt-master ~]# salt * sys.state_doc pkg.installed

pkg软件模块 #
pkg.installed 软件安装

php-install: pkg.installed:
- pkgs:
- php
- php-mysql: ">=5.4.16" #指定安装版本
- php-pdo
- php-cli

指定安装最新版本的软件

php-install: pkg.latest:
- pkgs:
- php
- php-mysql
- php-pdo
- php-cli

file文件模块 #
file.managed 签发文件以确保文件的存在

[root@salt-master ~]# mkdir /srv/salt/base/files [root@salt-master ~]# cp /etc/httpd/conf/httpd.conf /srv/salt/base/files/ [root@salt-master ~]# cat /srv/salt/base/apache_conf.sls apache-config: file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://files/httpd.conf
- user: root
- group: root
- mode: 644
说明:
- name: 指示要存储的目标地址
- source: 指明本文件的出处(声明本文件必须事先准备)
或者以这种方式写入,直接使用目标地址命令ID,这样ID还指示目标地址 [root@salt-master ~]# cat /srv/salt/base/apache_conf.sls /etc/httpd/conf/httpd.conf: file.managed:
- source: salt://files/httpd.conf
- user: root
- group: root
- mode: 644


小示例: [root@salt-master ~]# cat /srv/salt/base/test.sls /tmp/passwd_back: file.managed:
- source: salt://files/passwd
- user: root
- group: root
- mode: 644 [root@salt-master ~]# cp /etc/passwd /srv/salt/base/files/ [root@salt-master ~]# salt state.sls test [root@salt-master ~]# salt cmd.run "ls -l /tmp/passwd_back" salt-minion03: -rw-r--r-- 1 root root 2098 May 15 16:21 /tmp/passwd_back salt-minion02: -rw-r--r-- 1 root root 2098 May 15 16:21 /tmp/passwd_back salt-minion01: -rw-r--r-- 1 root root 2098 May 15 16:21 /tmp/passwd_back

file.directory 建立目录

[root@salt-master ~]# cat /srv/salt/base/directory.sls /tmp/saltdir: file.directory:
- user: root
- group: root
- mode: 755
- makedirs: True #如果先前的目录不存在,则自动创建;类似(mkdir -p)
[root@salt-master ~]# salt state.sls directory [root@salt-master ~]# salt cmd.run "ls -d /tmp/saltdir" salt-minion03: /tmp/saltdir salt-minion02: /tmp/saltdir salt-minion01: /tmp/saltdir

file.recurse 发行整个目录

[root@salt-master ~]# cat /srv/salt/base/httpd_conf_dir.sls httpd_conf_dir: file.recurse:
- name: /etc/httpd/conf.d
- source: salt://files/conf.d
- file_mode: 600 #文件权限
- dir_mode: 755 #目录权限
- include_empty: True #同步空目录
- clean: True #使用后minion与master保持一致
[root@salt-master ~]# rsync -avh /etc/httpd/conf.d /srv/salt/base/files/

file.symlink 建立软链接

[root@salt-master ~]# cat /srv/salt/base/target_link.sls /etc/grub.cfg: file.symlink:
- target: /etc/grub2.cfg
[root@salt-master ~]# salt state.sls target_link [root@salt-master ~]# salt cmd.run "ls -l /etc/grub.cfg" salt-minion03: lrwxrwxrwx 1 root root 14 May 15 16:42 /etc/grub.cfg -> /etc/grub2.cfg salt-minion01: lrwxrwxrwx 1 root root 14 May 15 16:42 /etc/grub.cfg -> /etc/grub2.cfg salt-minion02: lrwxrwxrwx 1 root root 14 May 15 16:42 /etc/grub.cfg -> /etc/grub2.cfg

service服务模块 #

[root@salt-master ~]# cat /srv/salt/base/service_httpd.sls httpd: service.running:
- name: httpd #服务名称
- enable: True #启动自启动
- reload: True #允许重新加载配置文件,而不是写入restart
或者像这样写 [root@salt-master ~]# cat /srv/salt/base/service_httpd.sls httpd: #即表示ID,它还表示服务名称 service.running:
- enable: True
- reload: True

高级状态模块 #
当我们希望不同的主机应用不同的配置时,我们可以使用高级状态管理。 top file
去管理。可以通过常规的、 grain 模块或组名进行匹配,然后执行下一级。 state 文件
可以改变我们的配置要求 YAML 并在 Top file 文件指出:
Top file 示例

base: *: #按常规进行全部匹配minion
-
app.nginx
webserver: #已定义的组名
- match: nodegroup
-
app.cron
os:centos: #通过grains模块匹配
- match: grains
- nginx

Top file 执行高级状态
[root@salt-master ~]# salt * state.highstate
LAMP架构案例 #
说明 :案子在里面 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 /srv/salt/prod/{httpd,php,mysql,files}
3配置文件准备和测试文件准备。

[root@salt-master ~]# cp /etc/my.cnf /srv/salt/prod/files/ [root@salt-master ~]# cp /etc/httpd/conf/httpd.conf /srv/salt/prod/files/ [root@salt-master ~]# cp /etc/php.ini /srv/salt/prod/files/ [root@salt-master ~]# echo "
LAMP html
" >>/srv/salt/prod/files/index.html [root@salt-master ~]# echo "<?php phpinfo(); ?>" >> /srv/salt/prod/files/index.php
4)编写 state sls 状态文件

httpd
[root@salt-master ~]# cat /srv/salt/prod/httpd/init.sls apache-install: pkg.installed:
- pkgs:
- httpd
- httpd-tools
apache-config: file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://files/httpd.conf
- user: root
- group: root
- mode: 644
apache-service: service.running:
- name: httpd
- enable: True
php
[root@salt-master ~]# cat /srv/salt/prod/php/init.sls php-install: pkg.installed:
- pkgs:
- php
- php-mysql
- php-pdo
- php-cli
php-config: file.managed:
- name: /etc/php.ini
- source: salt://files/php.ini
- user: root
- group: root
- mode: 644
mysql
[root@salt-master ~]# cat /srv/salt/prod/mysql/init.sls mariadb-install: pkg.installed:
- pkgs:
- mariadb-server
- mariadb
mariadb-config: file.managed:
- name: /etc/my.cnf
- source: salt://files/my.cnf
- user: root
- group: root
- mode: 644
mariadb-service: service.running:
- name: mariadb
- enable: True
测试文件
[root@salt-master ~]# cat /srv/salt/prod/testfile.sls /var/www/html/index.html: file.managed:
- source: salt://files/index.html
/var/www/html/index.php: file.managed:
- source: salt://files/index.php

6) topfile 文件编写

[root@salt-master ~]# cat /srv/salt/base/top.sls prod: salt-minion*:
- httpd.init
- php.init
- mysql.init
- testfile

7)部署 LAMP 整体 state 文件查看

[root@salt-master ~]# tree /srv/salt/ /srv/salt/ ├── base │ └── top.sls ├── dev └── prod ├── files │ ├── httpd.conf │ ├── index.html │ ├── index.php │ ├── my.cnf │ └── php.ini ├── httpd │ └── init.sls ├── mysql │ └── init.sls ├── php │ └── init.sls └── testfile.sls

8)执行 topfile
[root@salt-master ~]# salt * state.highstate
States状态依赖 #
通过以上几点 lamp 可以看出,它已经可以使用了。 state 要定义的模块 minion 但是,如果主机涉及多个状态,并且这些状态彼此相关,则存在执行顺序,则必须引用它。 requisites 去控制
关系描述:
1、 require 我依赖于某个国家,我依赖于谁
2、 require_in 我依赖于某种状态,谁依赖于我
3、 watch 我专注于某个状态,当状态发生变化时,继续进行。 restart 或者 reload 操作
4、 watch_in 我担心的是某个州
5、 include 我引用谁
1)修改上述内容 lamp 州际附属地

httpd
[root@salt-master ~]# cat /srv/salt/prod/httpd/init.sls apache-install: pkg.installed:
- pkgs:
- httpd
- httpd-tools
apache-config: file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://files/httpd.conf
- user: root
- group: root
- mode: 644
- require:
- pkg: apache-install #表示上面apache-install先执行成功后执行apache-config
apache-service: service.running:
- name: httpd
- enable: True
- require:
- file: apache-config
- watch:
- file: apache-config
php
[root@salt-master ~]# cat /srv/salt/prod/php/init.sls php-install: pkg.installed:
- pkgs:
- php
- php-mysql
- php-pdo
- php-cli
- reqiure_in:
- file: php-config
php-config: file.managed:
- name: /etc/php.ini
- source: salt://files/php.ini
- user: root
- group: root
- mode: 644
mysql
[root@salt-master ~]# cat /srv/salt/prod/mysql/init.sls mariadb-install: pkg.installed:
- pkgs:
- mariadb-server
- mariadb
mariadb-config: file.managed:
- name: /etc/my.cnf
- source: salt://files/my.cnf
- user: root
- group: root
- mode: 644
- require:
- pkg: mariadb-install
mariadb-service: service.running:
- name: mariadb
- enable: True
- reload: True
- require:
- file: mariadb-config
- watch:
- file: mariadb-config

2)修改参照关系后 include

[root@salt-master ~]# tree /srv/salt/ /srv/salt/ ├── base │ └── top.sls ├── dev └── prod ├── files │ ├── httpd.conf │ ├── index.html │ ├── index.php │ ├── my.cnf │ └── php.ini ├── httpd │ └── init.sls ├── lamp.sls ├── mysql │ └── init.sls ├── php │ └── init.sls └── testfile.sls
[root@salt-master ~]# cat /srv/salt/prod/lamp.sls include:
- httpd.init
- php.init
- mysql.init
- testfile
[root@salt-master ~]# cat /srv/salt/base/top.sls prod: salt-minion*:
- lamp

3)编写 SLS 技巧
1,根据状态分类,如果单独使用,则清除 2根据服务分类,可以是其他。SLS引用
Jinja模板使用 #
配置文件通常是灵活的,例如配置。 apache 的 IP 地址或端口 PORT 依此类推,您可以动态传递该值。
Jinja2 该模板包含使用的变量和表达式。 { { … }} 请附上,表达式。 {% … %} 被包围了。变量用法示例:

[root@salt-master ~]# cat /srv/salt/base/var.sls {% set var= hello world! %} test_var: cmd.run:
- name: echo "测试变量 {{ var }}"
[root@salt-master ~]# salt salt-minion01 state.sls var salt-minion01:
ID: test\_var
Function: cmd.run
Name: echo "测试变量 hello world!"
Result: True
Comment: Command "echo "测试变量 hello world!"" run
Started: 14:50:58.302424
Duration: 12.358 ms
Changes:
----------
pid:
22510
retcode:
0
stderr:
stdout:
测试变量 hello world!
Summary for salt-minion01
Succeeded: 1 (changed=1) Failed: 0
Total states run: 1 Total run time: 12.358 ms

jinja2 常用变量
1,字符串类型
{% set var = test %} #定义变量 {{ var }} #调用变量
2,列表类型
{% set list = [one, two, three] %} {{ list[1] }} #获取变量的第一个值
3,词典类型
{% set dict = {key1:value1, key2:value2} %} {{ dict[key1] }} #获取key1的值
示例1: Saltstack 使用 jinja 模块配置 apache 监听端口

1.告诉fileStatus模块,需要使用jinja
- template: jinja
2.参数列表
- defaults:
PORT: 8000
3.纵断面参照jinja模板
{{ PORT }}
配置示例
apache-config: file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://files/httpd.conf
- user: root
- group: root
- mode: 644
- template: jinja
- defaults: PORT: 8000
修改httpd.conf纵断面参照变量
Listen {{ PORT }}

示例2: 使用 grinas 赋值方式

配置示例
apache-config: file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://files/httpd.conf
- user: root
- group: root
- mode: 644
- template: jinja
- defaults: PORT: 8000 IPADDR: {{ grains[fqdn_ip4][0] }}
修改httpd.conf纵断面参照变量
Listen {{ IPADDR }}:{{ PORT }}

示例3 :通过 jinja+grains 取决于系统安装 apache

[root@salt-master ~]# cat /srv/salt/base/httpd.sls
根据grains获得价值辨别系统后,安装软件
httpd-install: pkg.installed: {% if grains[os] == CentOS %}
- name: httpd {% elif grains[OS] == Debin %}
- name: apache2 {% endif %}

版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
itfan123



