saltstack的jinja模

[root@master ~]# cd /srv/salt/base/
[root@master base]# ll
总用量 12
-rw-r--r-- 1 root root 172 11月 14 21:26 apache.sls
-rw-r--r-- 1 root root 128 11月 16 00:12 dns.sls
drwxr-xr-x 2 root root  25 11月 16 00:23 files
-rw-r--r-- 1 root root  28 11月 16 00:22 top.sls
[root@master base]# vim dns.sls 
[root@master base]# cat dns.sls 
/etc/resolv.conf:
  file.managed:
     - source: salt://files/resolv.conf
     - user: root
     - group: root
     - mode: 777
     - template: jinja
     - defaults:    #定义变量
       DNS_SERVER: 192.168.43.118

[root@master base]# vim files/resolv.conf 
[root@master base]# cat files/resolv.conf
#jjjjjjjjjjjjjjjjjj
nameserver {{ DNS_SERVER }}   #2个大括号表示变量

[root@master base]# salt '*'  state.highstate
192.168.43.118:
----------
          ID: /etc/resolv.conf
    Function: file.managed
      Result: True
     Comment: File /etc/resolv.conf updated
     Started: 00:43:27.222821
    Duration: 21.809 ms
     Changes:   
              ----------
              diff:
                  --- 
                  +++ 
                  @@ -1,2 +1,3 @@
                   #jjjjjjjjjjjjjjjjjj
                  -nameserver 192.168.43.1
                  +nameserver 192.168.43.118
                  +

Summary
------------
Succeeded: 1 (changed=1)
Failed:    0

[root@master base]# vim files/resolv.conf 
[root@master base]# cat files/resolv.conf
#jjjjjjjjjjjjjjjjjj
#  {{ grains['fqdn_ip4'] }}
nameserver {{ DNS_SERVER }}
[root@master base]# salt '*'  state.highstate
192.168.43.118:
----------
          ID: /etc/resolv.conf
    Function: file.managed
      Result: True
     Comment: File /etc/resolv.conf updated
     Started: 00:47:03.799795
    Duration: 32.514 ms
     Changes:   
              ----------
              diff:
                  --- 
                  +++ 
                  @@ -1,3 +1,3 @@
                   #jjjjjjjjjjjjjjjjjj
                  +#  ['192.168.43.118']
                   nameserver 192.168.43.118
                  -

Summary
------------
Succeeded: 1 (changed=1)
Failed:    0

系统初始化配置:

[root@master base]# pwd
/srv/salt/base
[root@master base]# mkdir init
[root@master base]# mv apache.sls dns.sls files/ /tmp/
[root@master base]# tree
.
├── init
└── top.sls

1 directory, 1 file

[root@master base]# cp /tmp/dns.sls init/
[root@master base]# ll
总用量 4
drwxr-xr-x 2 root root 21 11月 16 00:55 init
-rw-r--r-- 1 root root 28 11月 16 00:22 top.sls
[root@master base]# cd init/
[root@master init]# ls
dns.sls

[root@master init]# vim dns.sls 
[root@master init]# cat dns.sls
/etc/resolv.conf:
  file.managed:
     - source: salt://init/files/resolv.conf
     - user: root
     - group: root
     - mode: 777

[root@master init]# mkdir files
[root@master init]# cp /etc/resolv.conf files/
[root@master init]# cp /etc/resolv.conf files/
[root@master init]# vim history.sls
[root@master init]# cat history.sls
/etc/profile:
  file.append:  #file模块的追加方法
    - text:
      - export HISTTIMEFORMAT="%F %T 'whoami'"

[root@master init]# export  PROMPT_COMMAND=' { msg=$(history 1 | { read x y; echo $y; });logger "[euid=$(whoami)]":$(who am i):['pwd']"$msg";} '
[root@master init]# who
root     pts/0        2018-11-16 00:29 (desktop-4a0ohej)
root     pts/1        2018-11-16 00:38 (desktop-4a0ohej)
[root@master init]# tail -f /var/log/messages
Nov 16 01:01:01 master systemd: Starting Session 34 of user root.
Nov 16 01:10:01 master systemd: Started Session 35 of user root.
Nov 16 01:10:01 master systemd: Starting Session 35 of user root.
Nov 16 01:14:00 master root: [euid=root]:root pts/0 2018-11-16 00:29 (desktop-4a0ohej):[pwd]export PROMPT_COMMAND=' { msg=$(history 1 | { read x y; echo $y; });logger "[euid=$(whoami)]":$(who am i):['pwd']"$msg";} '
Nov 16 01:14:04 master root: [euid=root]:root pts/0 2018-11-16 00:29 (desktop-4a0ohej):[pwd]uptime
Nov 16 01:14:39 master root: [euid=root]:root pts/0 2018-11-16 00:29 (desktop-4a0ohej):[pwd]tail -f /var/log/messages
Nov 16 01:14:42 master root: [euid=root]:root pts/0 2018-11-16 00:29 (desktop-4a0ohej):[pwd]uptime
Nov 16 01:15:06 master root: [euid=root]:root pts/0 2018-11-16 00:29 (desktop-4a0ohej):[pwd]tail -f /var/log/messages
Nov 16 01:15:12 master root: [euid=root]:root pts/0 2018-11-16 00:29 (desktop-4a0ohej):[pwd]tail -f /var/log/messages
Nov 16 01:15:17 master root: [euid=root]:root pts/0 2018-11-16 00:29 (desktop-4a0ohej):[pwd]who

[root@master init]# ll
总用量 12
-rw-r--r-- 1 root root 172 11月 16 01:17 audit.sls
-rw-r--r-- 1 root root 137 11月 16 00:57 dns.sls
drwxr-xr-x 2 root root  25 11月 16 00:58 files
-rw-r--r-- 1 root root  88 11月 16 01:03 history.sls
[root@master init]# cat audit.sls 
/etc/bashrc:
  file.append:
    - text:
      - export  PROMPT_COMMAND=' { msg=$(history 1 | { read x y; echo $y; });logger "[euid=$(whoami)]":$(who am i):['pwd']"$msg";} '

[root@master init]# cat sysctl.sls
vm.swappinese:   #尽量不适用swap分区
  sysctl.present:
    - value: 0

net.ipv4.ip_local_port_range:
  sysctl.present:
    - value: 10000 65000

fs.file-max:    #最大打开文件数
  sysctl.present:
    - value: 100000

[root@master init]# vim env_init.sls
[root@master init]# cat env_init.sls
include:
  - init.dns
  - init.history
  - init.audit
  - init.sysctl

[root@master init]# cd ..
[root@master base]# ls
init  top.sls
[root@master base]# vim top.sls 
[root@master base]# cat top.sls
base:
  '*':
    - init.env_init  #在base路径下去init目录找env_init文件并执行

[root@master base]# salt '*' state.highstate test=True  测试不执行
[root@master base]# salt '*' state.highstate

Saltstack (grains、pillar、jinja模版、haproy+keeplived)

配置内容接上篇

  • redhat6.5

  • server1 172.25.29.1 salt-master

  • server2 172.25.29.2 salt-minion haproy+keeplived

  • server3 172.25.29.3 salt-minion nginx

  • server4 172.25.29.4 salt-minion nginx

  • server5 172.25.29.5 salt-minion haproy+keeplived

做之前配置好本地解析

一、Grains

grains是minion第一次启动的时候采集的静态数据,可以用在salt的模块和其他组件中。其实grains在每次的minion启动(重启)的时候都会采集,即向master汇报一次的。

二、minion端配置grains

修改server3和server4的salt-minion,设定nginx角色

未分类

在server3和server4的/etc/salt下创建grains,内容如下

未分类

未分类

未分类

1. 测试grains的数据

未分类

未分类

2. 修改top.sls文件并推送

未分类

未分类

推送成功

未分类

三、mster端配置grains,不用重启服务

1. 在master端创建_grains文件

未分类

未分类

2. 修改server3和server4的grains或者是删除grains文件,做到不影响下面master这边的grains

未分类

未分类

未分类

3. 向server3和server4同步grains

未分类

查看server3和server4的salt缓存

未分类

未分类

4. 修改top.sls推送文件

未分类

推送成功

未分类

四、pillar用法

grain和pillar区别

(1)grains存储的是静态、不常变化的内容,pillar则相反

(2)grains是存储在minion本地,而pillar存储在master本地

(3)minion有权限操作自己的grains值,如增加、删除,但minion只能查看自己的pillar,无权修改

1. 配置pillar

修改server1上的master配置文件,开通pillar base目录,可以与grains共存

未分类

未分类

采集主机名

未分类

2. 设置不同的主机名推送安装不同的服务

未分类

未分类

未分类

3. 在pillar下创建一个新的top.sls推送文件

未分类

刷新

未分类

4. 检测和查看的相关命令

查看采集的推送项目,按照不同的主机名通过pillar下的web.sls做不同的事情

未分类

未分类

未分类

未分类

通过salt采集server3开启的服务

未分类

远程重启server3的nginx服务

未分类

将master server1上的文件群传给minion端

未分类

群查看minion的/tmp下的文件,已经传过来了

未分类

远程查看passwd文件

未分类

远程给server4安装htppd文档

未分类

远程给server4安装losf工具

未分类

五、jinja模版的使用

Jinja是基于python的模板引擎,在saltstack中我们使用yaml_jinja渲染器来根据模板生产对应的配置文件,对于不同的操作系统或者不同的情况通过jinja可以让配置文件或者操作形成一种模板的编写方式。

模版文件里面变量使用{{名称}},例如{{PORT}}
变量使用Grains:{{ grains[‘fqdn_ip4’] }}
变量使用执行模块:{{ salt‘network.hw_addr’ }}
变量使用Pillar:{{ pillar[‘apache’][‘PORT’] }}

1. jinja模版配置

以httpd下的web.sls为例,添加模版,端口,地址

未分类

未分类

2. 修改files下的httpd.conf配置文件为变量格式

未分类

未分类

3. 用jinja模版推送httpd服务

未分类

未分类

server3 httpd服务8080端口正常

未分类

六、jinja模版的另外三种实现方法

1. 方法一

未分类

在httpd.conf配置文件的最上面添加变量模块

未分类

下面的监听端口上按python的方式取值

未分类

在files下面新建 vim lib.sls

未分类

将之前的web.sls里的template下面注释掉

未分类

用jinja模版给server3推送httpd服务

未分类

未分类

2. 方法二

将httpd.conf里刚才上面写的删除,因为会与下面的这个方法冲突

未分类

监听端口修改为下图所示

未分类

将web.sls文件修改为以下设置

未分类

vim lib.sls

未分类

未分类

3. 方法三:使用pillar

进入到pillar的base目录下

未分类

(1)配置文件第一种写法

未分类

vim httpd.conf

未分类

(2)配置文件第二种写法

未分类

vim httpd.conf

未分类

推送

未分类

salt server4 state.sls httpd.web

未分类

七、salt自动化推送keepalived+nginx

1. 配置keepalived salt文件

未分类

vim keepalived.conf,添加vip

未分类

vim install.sls

未分类

未分类

vim service.sls

未分类

单击keepalived推送成功

2. 由于keepalived高可用,主备的配置文件不一样,需要添加jinja模版

未分类

在install.sls里添加jinja模版

未分类

keepalived.conf里的state和priority写成变量

未分类

3.新添加一台虚拟机server5做keepalived的高可用

未分类

将server5加入到salt-key

未分类

未分类

4. 修改top.sls文件并推送

未分类

5. 查看推送结果

haproy+keeplived正常启动,vip在主上

未分类

将主server2上的keepalived关闭,服务到备server5上

未分类

负载均衡haproxy正常

未分类

未分类