SaltStack应用grains和jinja模板-第四篇
目标需求
1.使用jinja模板让apache配置监听本地ip地址
2.了解grains的基本使用方法
说明:实验环境是在前面的第二篇和第三篇基础上完成
实现步骤
使用grains获取ip地址信息
使用fqdn_ip4获取,获取下来是一个列表元素,在jinja模板里面使用IPADDR: {{ grains [ 'fqdn_ip4'][0] }}表示
[root@linux-node1 web]# salt "linux-node2*" grains.item fqdn_ip4
linux-node2.example.com:
----------
fqdn_ip4:
- 192.168.56.12
修改lamp.sls文件
红色部分为新添加
[root@linux-node1 web]# pwd
/srv/salt/base/web
[root@linux-node1 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:
- 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: 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
执行状态模块
因为在top.sls里面已经编排好了任务可以使用高级方法执行
[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: ::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: ::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: ::57.795215
Duration: 5.237 ms
Changes:
----------
ID: lamp-service
Function: service.running
Name: httpd
Result: True
Comment: Service reloaded
Started: ::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: ::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: ::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: ::58.286230
Duration: 6.097 ms
Changes: Summary
------------
Succeeded: (changed=)
Failed:
------------
Total states run:
此时在查看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.0.0:* LISTEN
tcp 192.168.56.12: 0.0.0.0:* LISTEN
grains相关操作
[root@linux-node1 web]# salt 'linux-node2*' grains.items
linux-node2.example.com:
----------
SSDs:
biosreleasedate:
//
biosversion:
6.00
cpu_flags:
- fpu
- vme
- de
- pse
- tsc
- msr
- pae
- mce
- cx8
- apic
- sep
- mtrr
- pge
- mca
- cmov
- pat
- pse36
- clflush
- dts
- mmx
- fxsr
- sse
- sse2
- ss
- ht
- syscall
- nx
- pdpe1gb
- rdtscp
- lm
- constant_tsc
- arch_perfmon
- pebs
- bts
- nopl
- xtopology
- tsc_reliable
- nonstop_tsc
- aperfmperf
- eagerfpu
- pni
- pclmulqdq
- ssse3
- fma
- cx16
- pcid
- sse4_1
- sse4_2
- x2apic
- movbe
- popcnt
- tsc_deadline_timer
- aes
- xsave
- avx
- f16c
- rdrand
- hypervisor
- lahf_lm
- abm
- 3dnowprefetch
- ida
- arat
- epb
- pln
- pts
- dtherm
- hwp
- hwp_noitfy
- hwp_act_window
- hwp_epp
- fsgsbase
- tsc_adjust
- bmi1
- avx2
- smep
- bmi2
- invpcid
- rdseed
- adx
- smap
- xsaveopt
- xsavec
- xgetbv1
- xsaves
cpu_model:
Intel(R) Core(TM) i5-6200U CPU @ .30GHz
cpuarch:
x86_64
domain:
example.com
fqdn:
linux-node2.example.com
fqdn_ip4:
- 192.168.56.12
fqdn_ip6:
gpus:
|_
----------
model:
SVGA II Adapter
vendor:
unknown
host:
linux-node2
hwaddr_interfaces:
----------
eth0:
:0c::6d::0c
lo:
:::::
id:
linux-node2.example.com
init:
systemd
ip4_interfaces:
----------
eth0:
- 192.168.56.12
lo:
- 127.0.0.1
ip6_interfaces:
----------
eth0:
- fe80::20c:29ff:fe6d:870c
lo:
- ::
ip_interfaces:
----------
eth0:
- 192.168.56.12
- fe80::20c:29ff:fe6d:870c
lo:
- 127.0.0.1
- ::
ipv4:
- 127.0.0.1
- 192.168.56.12
ipv6:
- ::
- fe80::20c:29ff:fe6d:870c
kernel:
Linux
kernelrelease:
3.10.-327.28..el7.x86_64
locale_info:
----------
defaultencoding:
UTF-
defaultlanguage:
en_US
detectedencoding:
UTF-
localhost:
linux-node2
lsb_distrib_id:
CentOS Linux
machine_id:
14e217a8e7d7475391d62b10129baa2f
manufacturer:
VMware, Inc.
master:
192.168.56.11
mdadm:
mem_total: nodename:
linux-node2
num_cpus: num_gpus: os:
CentOS
os_family:
RedHat
osarch:
x86_64
oscodename:
Core
osfinger:
CentOS Linux-
osfullname:
CentOS Linux
osmajorrelease: osrelease:
7.2.
osrelease_info:
-
-
-
path:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
productname:
VMware Virtual Platform
ps:
ps -efH
pythonexecutable:
/usr/bin/python
pythonpath:
- /usr/bin
- /usr/lib64/python27.zip
- /usr/lib64/python2.
- /usr/lib64/python2./plat-linux2
- /usr/lib64/python2./lib-tk
- /usr/lib64/python2./lib-old
- /usr/lib64/python2./lib-dynload
- /usr/lib64/python2./site-packages
- /usr/lib/python2./site-packages
pythonversion:
-
-
-
- final
-
saltpath:
/usr/lib/python2./site-packages/salt
saltversion:
2015.5.
saltversioninfo:
-
-
-
-
selinux:
----------
enabled:
False
enforced:
Disabled
serialnumber:
VMware- 4d b6 6a 0d-ff 3e 6d 0c
server_id: shell:
/bin/sh
systemd:
----------
features:
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
version: virtual:
VMware
zmqversion:
3.2.
salt 'linux-node2*' grains.items
[root@linux-node1 web]# salt 'linux-node2*' grains.ls
linux-node2.example.com:
- SSDs
- biosreleasedate
- biosversion
- cpu_flags
- cpu_model
- cpuarch
- domain
- fqdn
- fqdn_ip4
- fqdn_ip6
- gpus
- host
- hwaddr_interfaces
- id
- init
- ip4_interfaces
- ip6_interfaces
- ip_interfaces
- ipv4
- ipv6
- kernel
- kernelrelease
- locale_info
- localhost
- lsb_distrib_id
- machine_id
- manufacturer
- master
- mdadm
- mem_total
- nodename
- num_cpus
- num_gpus
- os
- os_family
- osarch
- oscodename
- osfinger
- osfullname
- osmajorrelease
- osrelease
- osrelease_info
- path
- productname
- ps
- pythonexecutable
- pythonpath
- pythonversion
- saltpath
- saltversion
- saltversioninfo
- selinux
- serialnumber
- server_id
- shell
- systemd
- virtual
- zmqversion
salt 'linux-node2*' grains.ls
获取内存
[root@linux-node1 web]# salt 'linux-node2*' grains.item mem_total
linux-node2.example.com:
----------
mem_total:
注意:grains获取的信息是静态的,因为是在minion启动的时候收集上来的,比如热插拔磁盘grains数据默认是不会发生变化
salt使用grains筛选特点的minion执行任务
比如筛选CentOS系统执行uptime命令
[root@linux-node1 web]# salt -G 'os:CentOS' cmd.run "uptime"
linux-node2.example.com:
:: up :, user, load average: 0.00, 0.01, 0.05
grains的使用场景有很多
1.过滤信息用于jinja模板
2.salt筛选指定的minion执行任务
3.可以收集服务器硬件信息然后格式化数据入库,再进行web展示,百度有相关的开源产品(http://echarts.baidu.com/examples.html)
4.做监控数据采集
5.CMDB
....
https://github.com/unixhot/saltbook-code/tree/master
SaltStack应用grains和jinja模板-第四篇的更多相关文章
- saltstack通过jinja模板,grains方式将配置的变量值写入到配置文件中?
		
需求描述: 在通过saltstack进行jinja模板获取值的时候,可以通过grains的方式,获取一些操作系统相关的信息,比如,OS,ip地址等,在这里演示下,做个记录. 演示: 1.修改sls文件 ...
 - SaltStack配置管理-jinja模板
		
上一篇:SaltStack配置管理-状态间关系 需求:需要apache配置文件里面监听的端口是每个minion本地的地址 saltstack默认的模板是jinjia模板 参考文档:http://doc ...
 - saltstack通过jinja模板,将变量值增加到配置文件中?通过引用变量值修改配置文件?
		
需求描述: 在使用saltstack的时候,有的时候,需要根据不同的变量来增加配置,比如,bind,监听端口,这些都可以通过变量写入,并且在配置的时候引用,下面是一个例子,用来演示,如何使用jinja ...
 - 自动化运维工具saltstack04 -- 之jinja模板
		
jinjia模板 需求:想让saltstack的file模块分发到minion端的配置文件监听minion端的IP和端口,如何用变量实现?看下面!! 1.jinja模板加grains使apache监听 ...
 - [salt] jinja模板中变量使用pillar的几种方法
		
先转载下jinja模板中使用变量的方法,后文主要讲解pillar的变量使用方法 一.jinja模版的使用方法: 1.file状态使用template参数 - template:jinja 2.模版文件 ...
 - 5 LAMP配置管理:模块(state、file、pkg、service)、jinja模板、job管理、redis主从
		
1. 配置管理:state和file https://docs.saltstack.com/en/latest/topics/states/index.html Full list of states ...
 - 架构师成长之路5.6-Saltstack配置管理(jinja模板)
		
点击架构师成长之路 架构师成长之路5.6-Saltstack配置管理(jinja模板) 配置管理工具: Pupper:1. 采用ruby编程语言:2. 安装环境相对较复杂:3.不支持远程执行,需要FU ...
 - 2. SaltStack数据系统: Grains、Pillar
		
1. SaltStack数据系统 Grains (谷物) Pillar (支柱) 2.Grains Grains存放着Salt命令启动时收集的信息,运行时不收集 2.1 信息查询 收集资产 网卡,i ...
 - Flask最强攻略 - 跟DragonFire学Flask - 第四篇 Flask 中的模板语言 Jinja2 及 render_template 的深度用法
		
是时候开始写个前端了,Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符 ...
 
随机推荐
- 《Django By Example》第十二章(终章) 中文 翻译 (个人学习,渣翻)
			
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第十二章,全书最后一章,终于到这章 ...
 - 2017 Multi-University Training Contest - Team 5——HDU6095&&HDU6090&&HDU
			
HDU6095——Rikka with Competition 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6095 题目意思:抱歉虽然是签到题,现场 ...
 - 小程序 Expecting 'EOF','}',',',']', got INVALID
			
修改了app.json中的东西,做了注释操作,报如下错误: 修改了好一阵,一直报错,原来是json文件中无法使用注释惹的祸,具体查看:官方文档
 - ntopng基础
			
当你在本地网络监控网络流量,根据流量大小.监控平台/接口.数据库类型等等,可以有许多不同的选择.ntopng是一套开源(遵循GPLv3协议)网络流量分析解决方案,提供基于web界面的实时网络流量监控. ...
 - Ansible安装过程中常遇到的错误(FAQ)
			
1.安装完成后允许命令报错 Traceback (most recent call last): File , in <module> (runner, results) = cli.ru ...
 - apt-get 报  The following signatures were invalid: KEYEXPIRED 错误
			
apt-get 原理: 参考:https://blog.csdn.net/a13526758473/article/details/79247478 apt对它所管理的每一个程序包都有一对公钥和私钥, ...
 - 饭卡---hdu2546(01背包)
			
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2546 这是一个变形的01背包问题,首先如果金额小于5元,剩余金额不变,为已有金额.如果大于等于5元 我 ...
 - 前端 javascript 定时器
			
setInterval("执行的代码",间隔时间)毫秒单位 每5秒一次会提示出弹框 <!DOCTYPE html> <html lang="en&quo ...
 - C#建WindowForm调用R可视化
			
众所周知R软件功能非常强大,可以很好的进行各类统计,并能输出图形.下面介绍一种R语言和C#进行通信的方法,并将R绘图结果显示到WinForm UI界面上的方法,文中介绍的很详细,需要的朋友可以参考下. ...
 - linux内核介绍
			
linux系统可以分为:包括用户空间和内核空间两个部分. 现代cpu通常实现了不同的工作模式,以ARM为例,实现了7种工作模式: 用户模式.快速中断.外部中断.管理模式.数据访问中止.系统模式.未定义 ...