不知不觉SaltStack系列写到第四篇,一同陪我走到这的同学,请坚持住,因为您本章非常重要,本章重点如下:
一、grains与jinja简介
1.jinja模板是什么?
Jinja2 是一个 Python 的功能齐全的模板引擎。它有完整的 unicode 支持,一个可选 的集成沙箱执行环境,被广泛使用,以 BSD 许可证授权
2.为什么叫做 Jinja ?
选择 Jinja 作为名字是因为 Jinja 是日本寺庙的名称,并且 temple 和 template 的发音类似。它并不是以乌干达的金贾市(Jinja)命名的。
jinja官网:jinja模板做什么用的
3.grains是什么?做什么用的?
RAINS
组件是saltstack中非常重要的一个组件,其主要用于记录Minion的一些静态信息,如比:CPU、内存、磁盘、网络等。grains信息是每次客户端启动后自动上报给master的,一旦这些静态信息发生改变需要重启minion 或者 重新同步下 grains。除此之外我们还可以自定义Grains的一些信息。
自定义的方法
有三种:
通过Minion配置文件定义;
通过Grains相关模块定义;
通过python脚本定义;
二、Saltstack的jinja用法
1.使用grains获取ip地址信息
使用fqdn_ip4获取,获取下来是一个列表元素,在jinja模板里面使用IPADDR: {{ grains [ 'fqdn_ip4'][0] }}表示
[root@node01 ~]# salt "node02*" grains.item fqdn_ip4
node02:
----------
fqdn_ip4:
- 192.168.56.12
修改lamp.sls文件
绿色部分为新添加
[root@node01 ~]# cd /srv/salt/base/web/
[root@node01 web]# cat lamp.sls
lamp-install:
pkg.installed:
- pkgs:
- httpd
- php
- php-pdo
- php-mysql
apache-config:
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://web/files/httpd.conf
- user: root
- group: root
- mode: 644
"- template: jinja
- defaults:
PORT: 8080 #变量PORT和模板文件的PORT变量要对应
IPADDR: {{ grains [ 'fqdn_ip4'][0] }} #支持python语法 可以把花括号的内容直接写在模板里面 但是不建议 结构不清晰 #变量很强大 支持cmd.run 返回结果等等"
- require:
- pkg: lamp-install
php-config:
file.managed:
- name: /etc/php.ini
- source: salt://web/files/php.ini
- user: root
- group: root
- mode: 644
lamp-service:
service.running:
- name: httpd
- enable: True
- reload: True
- watch:
- file: apache-config
apache-conf:
file.recurse:
- name: /etc/httpd/conf.d
- source: salt://web/files/apache-conf.d
apache-auth:
pkg.installed:
- name: httpd-tools
- require_in:
- cmd: apache-auth #如果没有这个rpm包下面的cmd.run就不运行,解决依赖关系
cmd.run:
- name: htpasswd -bc /etc/httpd/conf/htpasswd_file admin admin
- unless: test -f /etc/httpd/conf/htpasswd_file
2.执行状态模块
因为在top.sl
s里面已经编排好了任务可以使用高级方法
执行
[root@linux-node1 web]# salt "linux-node2*" grains.item fqdn_ip4
linux-node2.example.com:
----------
fqdn_ip4:
- 192.168.56.12
[root@linux-node1 web]# salt "*" state.highstate
linux-node2.example.com:
----------
ID: lamp-install
Function: pkg.installed
Result: True
Comment: All specified packages are already installed.
Started: 03:14:57.069948
Duration: 702.264 ms
Changes:
----------
ID: apache-config
Function: file.managed
Name: /etc/httpd/conf/httpd.conf
Result: True
Comment: File /etc/httpd/conf/httpd.conf updated
Started: 03:14:57.774499
Duration: 20.62 ms
Changes:
----------
diff:
---
+++
@@ -41,7 +41,7 @@
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
-Listen 80
+Listen 192.168.56.12:8080
#
# Dynamic Shared Object (DSO) Support
----------
ID: php-config
Function: file.managed
Name: /etc/php.ini
Result: True
Comment: File /etc/php.ini is in the correct state
Started: 03:14:57.795215
Duration: 5.237 ms
Changes:
----------
ID: lamp-service
Function: service.running
Name: httpd
Result: True
Comment: Service reloaded
Started: 03:14:58.015811
Duration: 232.47 ms
Changes:
----------
httpd:
True
----------
ID: apache-conf
Function: file.recurse
Name: /etc/httpd/conf.d
Result: True
Comment: The directory /etc/httpd/conf.d is in the correct state
Started: 03:14:58.248535
Duration: 36.039 ms
Changes:
----------
ID: apache-auth
Function: pkg.installed
Name: httpd-tools
Result: True
Comment: Package httpd-tools is already installed.
Started: 03:14:58.284678
Duration: 0.477 ms
Changes:
----------
ID: apache-auth
Function: cmd.run
Name: htpasswd -bc /etc/httpd/conf/htpasswd_file admin admin
Result: True
Comment: unless execution succeeded
Started: 03:14:58.286230
Duration: 6.097 ms
Changes:
Summary
------------
Succeeded: 7 (changed=2)
Failed: 0
------------
Total states run: 7
3.此时在查看node2节点
http监听的ip和端口
已改变
[root@linux-node2 ~]# netstat -an |more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 192.168.56.12:8080 0.0.0.0:* LISTEN
三、Salt的grains用法
[root@linux-node1 web]# salt 'linux-node2*' grains.items #获取node2主机所有grains信息
[root@linux-node1 web]# salt 'linux-node2*' grains.ls #查看grains可以调用的模块
1,使用grains获取信息(内存)
[root@linux-node1 web]# salt 'linux-node2*' grains.item mem_total
linux-node2.example.com:
----------
mem_total:
1823
注意:grains获取的信息是静态
的,因为是在minion启动的时候收集上来的,比如热插拔磁盘grains数据默认是不会发生变化
2.使用grains筛选特定的minion执行任务
比如筛选集群中 系统是:CentOS系统
的执行uptime
命令
[root@node01 base]# salt -G 'os:CentOS' cmd.run "uptime"
node01:
18:21:34 up 13:20, 2 users, load average: 0.00, 0.01, 0.05
node02:
18:21:34 up 14:49, 1 user, load average: 0.00, 0.01, 0.05
3.grains的使用场景有很多
- 1.过滤信息用于jinja模板
- 2.salt筛选指定的minion执行任务
- 3.可以收集服务器硬件信息然后格式化数据入库,再进行web展示百度有相关的开源产品
- 4.做监控数据采集
- 5.CMDB
至此将grains与jinja模板的使用介绍完。更多精彩文章:Saltstack相关文章
- QQ精品交流群
-
- 微信公众号
-