saltstack远程执行,配置管理,grains与pillar

1.远程执行shell命令

1. 1Salt命令由三个主要部分构成:

salt '<target>' <function> [arguments]

target: 指定哪些minion, 默认的规则是使用glob匹配minion id.

salt '*' test.ping

在这里插入图片描述
Targets也可以使用正则表达式:

 salt -E 'server[1-3]' test.ping

Targets也可以指定列表:

salt -L 'server2,server3' test.ping

funcation是module提供的功能,Salt内置了大量有效的functions.

 salt '*' cmd.run 'uname -a'

在这里插入图片描述
arguments通过空格来界定参数:

salt 'server2' sys.doc pkg			#查看模块文档

在这里插入图片描述

 salt 'server2' pkg.install httpd
 salt 'server2' pkg.remove httpd

server1操作:
在这里插入图片描述
server2查看

cat /var/log/messages

在这里插入图片描述
salt内置的执行模块列表:

http://docs.saltstack.cn/ref/modules/all/index.html

2.远程执行模块

1.master配置文件:

vim /etc/salt/master

file_roots:

  base:

    - /srv/salt

2.手动建立目录

mkdir /srv/salt

3.重启master服务:

 systemctl restart salt-master	

4.创建模块目录:

 mkdir /srv/salt/_modules

5.编写模块文件:

vim /srv/salt/_modules/mydisk.py
def df():
  return __salt__['cmd.run']('df -h')

6.同步模块:

 salt server2 saltutil.sync_modules
 

在这里插入图片描述
在这里插入图片描述
测试:
在这里插入图片描述

3.配置管理

Salt 状态系统的核心是SLS,或者叫SaLt State 文件。
SLS表示系统将会是什么样的一种状态,而且是以一种很简单的格式来包含这些数据,常被叫做配置管理。
sls文件命名:
sls文件以”.sls”后缀结尾,但在调用是不用写此后缀
使用子目录来做组织是个很好的选择。
init.sls 在一个子目录里面表示引导文件,也就表示子目录本身, 所以apache/init.sls 就是表示apache.
如果同时存在apache.sls 和 apache/init.sls,则 apache/init.sls 被忽略,apache.sls将被用来表示 apache.

3.1了解YAML语法

规则一: 缩进
Salt需要每个缩进级别由两个空格组成,不要使用tabs。

规则二: 冒号
字典的keys在YAML中的表现形式是一个以冒号结尾的字符串。

my_key: my_value

规则三: 短横杠
想要表示列表项,使用一个短横杠加一个空格。

 - list_value_one
 - list_value_two

准备Top文件:

 vim /srv/salt/top.sls
base:

  '*':
    - apache

批量执行:

salt '*' state.highstate

创建一个sls文件:

3.2.sls文件编写规则

实验一:

vim /srv/salt/apache.sls

httpd:                 	# ID声明

  pkg:                  	# 状态声明

    - installed           	# 函数声明

指定主机执行:

salt server2 state.sls apache

在这里插入图片描述
在这里插入图片描述

实验二:安装Apache

安装apache,并将配置文件复制到minion并启用

server1操作

mkdir apache
vim init.sls   #引导文件
mkdir apache/files
cp /etc/httpd/conf/http apache/files/

在这里插入图片描述
执行测试:
在这里插入图片描述
f在这里插入图片描述
file.managed也可作如下定义
在这里插入图片描述

实验三.源码编译安装nginx

在这里插入图片描述
nginx.service的编写可以去nginc.com官网去下载
在这里插入图片描述
下载后需要自己更改一下路径
在这里插入图片描述
init.sls文件编写:
在这里插入图片描述

nginx-install:
  pkg.installed:
    - pkgs:
      - openssl-devel
      - pcre-devel
      - gcc
  file.managed:
    - name: /mnt/nginx-1.18.0.tar.gz
    - source: salt://nginx/files/nginx-1.18.0.tar.gz
  cmd.run:
    - name: cd /mnt/ && tar zxf nginx-1.18.0.tar.gz && cd nginx-1.18.0 && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx --with-http_ssl_module &> /dev/null && make &> /dev/null && make install &> /dev/null
    - creates: /usr/local/nginx

/usr/local/nginx/conf/nginx.conf:
  file.managed:
    - source: salt://nginx/files/nginx.conf

nginx-service:
  file.managed:
    - name: /usr/lib/systemd/system/nginx.service
    - source: salt://nginx/files/nginx.service
  service.running:
    - name: nginx
    - reload: True
    - enable: True
    - watch:
      - file: /usr/local/nginx/conf/nginx.conf

测试:

salt server5 state.sls nginx

测试成功:
在这里插入图片描述
在server5上已安装nginx
在这里插入图片描述

4.grains

4.1 grains简介

Grains是SaltStack的一个组件,存放在SaltStack的minion端。

当salt-minion启动时会把收集到的数据静态存放在Grains当中,只有当minion重启时才会进行数据的更新。

由于grains是静态数据,因此不推荐经常去修改它。

应用场景:

信息查询,可用作CMDB。

在target中使用,匹配minion。

在state系统中使用,配置管理模块。

4.2 信息查询

1.用于查询minion端的IP、FQDN等信息。
默认可用的grains:

salt '*' grains.ls

在这里插入图片描述
2.查看每一项的值:

salt '*' grains.items

在这里插入图片描述
在这里插入图片描述
取单项的值:

salt server3 grains.item ipv4
salt server3 grains.item fqdn

在这里插入图片描述

4.3自定义grains项

有三种方法:
1.在/etc/salt/minion中定义
2.在/etc/salt/grains中定义
3.在salt-master端创建_grains目录

4.3.1 在/etc/salt/minion中定义(在minion上定义)

vim /etc/salt/minion
grains:

  roles:

    - apache

    - httpd

重启salt-minion,否则数据不会更新:

systemctl  restart salt-minion

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3.2 .在/etc/salt/grains中定义

vim /etc/salt/grains:
deployment:  datacenter1

同步数据:(重要)在master几点操作

salt server5 saltutil.sync_grains 

查询自定义项:

salt server3 grains.item deployment
在这里插入图片描述

在这里插入图片描述
将server5 minion的数据同步
在这里插入图片描述

4.3.3 在salt-master端创建_grains目录

在salt-master端创建_grains目录:

 mkdir /srv/salt/_grains

 vim /srv/salt/_grains/my_grain.py
def my_grain():

    grains = {}

    grains['roles'] = 'nginx'

    grains['hello'] = 'world'

    return grains
salt '*' saltutil.sync_grains	#同步grains到minion端

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查看:
在这里插入图片描述

4.4grains匹配运用

1.在target中匹配minion:

salt -G roles:apache cmd.run hostname

2.在top文件中匹配:

vim /srv/salt/top.sls

在这里插入图片描述

base:

  'roles:apache':
    - match: grain
    - apache.install

让标签为apache的server安装Apache,标签为nginx的安装nginx
在这里插入图片描述

salt '*' state.highstate

在这里插入图片描述

5.pillar

5.1 pillar简介

pillar和grains一样也是一个数据系统,但是应用场景不同。

pillar是将信息动态的存放在master端,主要存放私密、敏感信息(如用户名密码等),而且可以指定某一个minion才可以看到对应的信息。

pillar更加适合在配置管理中运用。

5.2声明pillar

定义pillar基础目录:

vim /etc/salt/master 
pillar_roots:

  base:

    - /srv/pillar
mkdir /srv/pillar

重启salt-master服务:

 /etc/init.d/salt-master restart

在这里插入图片描述

5.3自定义pillar项

vim /srv/pillar/top.sls
base:

  '*':

    - packages

在这里插入图片描述

vim /srv/pillar/packages.sls
{% if grains['fqdn'] == 'server2' %}

package: httpd

{% elif grains['fqdn'] == 'server5' %}

package: nginx

{% endif %}

在这里插入图片描述
刷新pillar数据:

salt '*' saltutil.refresh_pillar

在这里插入图片描述
查询pillar数据:

salt '*' pillar.items

在这里插入图片描述
在这里插入图片描述

5.4pillar数据匹配

命令行中匹配:

 salt -I 'roles:apache' test.ping

state系统中使用:

vim /srv/salt/apache.sls
apache:

  pkg.installed:

    - name: {{ pillar['package'] }}

在这里插入图片描述
推成功:
在这里插入图片描述

6.Jinja模板

6.1Jinja模板简介

Jinja是一种基于python的模板引擎,在SLS文件里可以直接使用jinja模板来做一些操作。

通过jinja模板可以为不同服务器定义各自的变量。

两种分隔符: {% … %} 和 {{ … }},前者用于执行诸如 for 循环 或赋值的语句,后者把表达式的结果打印到模板上。

6.2Jinja模板使用方式

1.Jinja最基本的用法是使用控制结构包装条件:

vim /srv/salt/test.sls

/mnt/testfile:

  file.append:

    {% if grains['fqdn'] == 'server2' %}

    - text: server2

    {% elif grains['fqdn'] == 'server3' %}

    - text: server3

    {% endif %}

2.Jinja在普通文件的使用:

vim /srv/salt/apache.sls

/etc/httpd/conf/httpd.conf:

file.managed:

  • source: salt://httpd.conf

  • template: jinja

  • context:

    bind: 192.168.1.17
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
2.

vim /srv/salt/apache/files/ httpd.conf

在这里插入图片描述

vim /srv/pillar/packages.sls

在这里插入图片描述
测试:
在这里插入图片描述
3.常用方法:

vim /srv/salt/apache/init.sls

在这里插入图片描述
在这里插入图片描述
测试:
在这里插入图片描述

import方式,可在state文件之间共享:

定义变量文件:

vim lib.sls

{% set port = 80 %}
在这里插入图片描述
导入模板文件:

vim httpd.conf

{% from 'lib.sls' import port %}

Listen {{ prot }

在这里插入图片描述
测试:优先级的问题,lib.sls 覆盖了之前的端口
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值