saltstack自动化运维---grains,Jinja模板


grains

Grains是SaltStack的一个组件,存放在SaltStack的minion端。
当salt-minion启动时会把收集到的数据静态存放在Grains当中,只有当minion重启时才会进行数据的更新。
由于grains是静态数据,因此不推荐经常去修改它。
应用场景:
信息查询,可用作CMDB。
在target中使用,匹配minion。
在state系统中使用,配置管理模块。

salt server2 grains.ls #列出所有
salt server2 grains.item ipv4 #查询
salt server2 grains.item fqdn
salt '*' grains.item fqdn

在这里插入图片描述

在这里插入图片描述

自定义grains项
方法一
server2上:

vim /etc/salt/minion
grains:
  roles:
    - apache
    
重启服务:
systemctl restart salt-minion.service

在这里插入图片描述

server1上:

salt server2 test.ping #重启服务会断开连接,检测是否通畅
salt server2 grains.item roles

在这里插入图片描述
方法二
在server3上:

vim /etc/salt/grains
roles:
  - nginx

在server1上同步数据:

salt server3 saltutil.sync_grains
salt '*' grains.item roles

在这里插入图片描述

方法三
编写grains模块

mkdir /srv/salt/_grains
vim /srv/salt/_grains/mygrains.py

def my_grain():
    grains = {}
    grains['salt'] = 'stack'
    grains['hello'] = 'world'
    return grains
    
同步:
salt '*' grains.item salt	#查看
salt '*' grains.item hello
salt '*' saltutil.sync_grains	#同步

在这里插入图片描述

salt '*' grains.item hello

在这里插入图片描述

grains匹配应用
salt -G roles:apache cmd.run hostname
salt -G roles:apache test.ping
salt -G roles:nginx test.ping
salt -G salt:stack test.ping

在这里插入图片描述
给server2部署apache,给server3传输nginx

编写top脚本
vim /srv/salt/top.sls
base:
 'roles:apache':
   - match: grain
   - apache
 'roles:nginx':
   - match: grain
   - nginx
mkdir /srv/salt/nginx
mkdir /srv/salt/nginx/files
将nginx-1.18.0.tar.gz传到files下

cd /srv/salt/nginx
vim init.sls

nginx:
  file.managed:
    - source: salt://nginx/files/nginx-1.18.0.tar.gz
    - name: /mnt/nginx-1.18.0.tar.gz
cd /srv/salt/apache
mv install.sls init.sls

执行:
salt '*' state.highstate #高级推

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

nginx

cd /srv/salt/nginx/files
vim nginx.service

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

在这里插入图片描述

cd /srv/salt/nginx
vim install.sls

nginx-install:
  pkg.installed:
    - pkgs:
      - gcc
      - pcre-devel
      - openssl-devel
  file.managed:
    - source: salt://nginx/files/nginx-1.18.0.tar.gz
    - name: /mnt/nginx-1.18.0.tar.gz
  cmd.run:
    - name: cd /mnt && tar zxf nginx-1.18.0.tar.gz && cd nginx-1.18.0 && ./configure --prefix=/usr/local/nginx --with-http_ssl_module &> /dev/null && make &> /dev/null && make install &> /dev/null
    - creates: /usr/local/nginx

在这里插入图片描述

cd /srv/salt/nginx
vim init.sls
include:
  - nginx.install

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

nginx-service:
  user.present:
    - name: nginx
    - shell: /sbin/nologin
    - home: /usr/local/nginx
    - createhome: false
  file.managed:
    - source: salt://nginx/files/nginx.service
    - name: /usr/lib/systemd/system/nginx.service
  service.running:
    - name: nginx
    - enable: true
    - reload: true
    - watch:
      - file: /usr/local/nginx/conf/nginx.conf

在这里插入图片描述

salt server3 state.sls nginx.install	#给server3安装nginx
scp server3:/usr/local/nginx/conf/nginx.conf . 	#文件导入后才能全局推
salt server3 state.sls nginx

在这里插入图片描述

也可以使用top高级推

salt -G roles:nginx test.ping
salt -G roles:apache test.ping
salt '*' state.highstate

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


Jinja模板

Jinja是一种基于python的模板引擎,在SLS文件里可以直接使用jinja模板来做一些操作。
通过jinja模板可以为不同服务器定义各自的变量。
两种分隔符: {% … %} 和 {{ … }},前者用于执行诸如 for 循环 或赋值的语句,后者把表达式的结果打印到模板上。

1)使用方式

vim /srv/salt/test.sls
/mnt/testfile:
  file.append:
    {% if grains['fqdn'] == 'server2' %}
    - text: server2
    {% elif grains['fqdn'] == 'server3' %}
    - text: server3
    {% endif %}

[root@server1 salt]# salt '*' state.sls test

在这里插入图片描述

[root@server2 ~]# ls /mnt
testfile

[root@server3 ~]# ls /mnt

在这里插入图片描述
2)引用变量

cd /srv/salt/apache
vim init.sls
  file.managed:
    - source: salt://apache/files/httpd.conf
    - name: /etc/httpd/conf/httpd.conf
    - template: jinja
    - context:
      port: 80
      bind: {{ grains['ipv4'][-1] }}

在这里插入图片描述

cd /srv/salt/apache/files
vim index.html
{{ grains['os'] }} - {{ grains['fqdn'] }}
{{ NAME }}

在这里插入图片描述

cd /srv/salt/apache/files
vim httpd.conf
Listen {{ bind }}:{{ port }}

在这里插入图片描述
执行:

[root@server1 files]# salt server2 state.sls apache

在这里插入图片描述
效果:
server2端口改变

[root@server2 ~]# vim /etc/httpd/conf/httpd.conf 

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值