取变量的值
以apache为例:[root@server1 pillar]# cd /srv/salt/apache/
第一种
install-apache:
pkg.installed:
- pkgs:
- httpd
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- template: jinja #加入模版
- context:
port: 80
host: 172.25.11.2 #直接写入主机ip以及端口
service.running:
- name: httpd
- reload: True #重载 只有重启服务后才会改变端口 不加为restart
- watch:
- file: install-apache
[root@server1 apache]# cd files/
[root@server1 files]# vim httpd.conf
42 Listen {{ host }}:{{ port }}
[root@server1 apache]# salt server2 state.sls apache.install
[root@server2 salt]# netstat -antlp 此时没有80端口,因为为reload 注释掉reload端口就改便了
[root@server1 apache]# vim install.sls
[root@server1 apache]# salt server2 state.sls apache.install
[root@server2 salt]# netstat -antlp #reload的时候 有的时候不会生效 默认为restart
第二种
[root@server1 apache]# salt server2 grains.ls | grep ip
[root@server1 apache]# salt server2 grains.item ipv4 #取值为列表形式 所以我们要取索引
[root@server1 apache]# vim files/httpd.conf
Listen {{ host }}:{{ port }}
[root@server1 apache]# vim install.sls
install-apache:
pkg.installed:
- pkgs:
- httpd
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- template: jinja
- context:
port: 80
host: {{ grains['ipv4'][-1] }} #取索引 -1
service.running:
- name: httpd
- watch:
- file: install-apache
[root@server1 apache]# salt server2 state.sls apache.install
[root@server2 salt]# vim /etc/httpd/conf/httpd.conf
[root@server2 salt]# netstat -antlp
或者是:
注释install.sls中取索引的行 直接写入apache的配置文件中。
[root@server1 apache]# vim install.sls
# host: {{ grains['ipv4'][-1] }}
[root@server1 apache]# vim files/httpd.conf
Listen {{ grains['ipv4'][-1] }}:{{ port }}
[root@server1 apache]# salt server2 state.sls apache.install
[root@server2 salt]# vim /etc/httpd/conf/httpd.conf
[root@server2 salt]# netstat -antlp
注意:install.sls文件中必须有写模版template 否则http不能解析 会报错
第三种
使用pillar
[root@server1 apache]# vim install.sls
install-apache:
pkg.installed:
- pkgs:
- httpd
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- template: jinja
- context:
port: 80
host: {{ pillar['ip'] }}
service.running:
- name: httpd
- watch:
- file: install-apache
[root@server1 apache]# vim files/httpd.conf
42 Listen {{ host }}:{{ port }}
[root@server1 apache]# salt server2 state.sls apache.install
报错 所以得新建文件写:
[root@server1 apache]# cd /srv/pillar/
[root@server1 pillar]# vim web/vars.sls
{% if grains['fqdn'] == 'server2' %}
webserver: httpd
ip: 172.25.11.2 #加入ip
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
{% endif %}
[root@server1 pillar]# salt server2 state.sls apache.install #推
server2:再次查看
[root@server2 salt]# vim /etc/httpd/conf/httpd.conf
[root@server2 salt]# netstat -antlp
或者是:
注释install.sls中的pillar行
[root@server1 pillar]# vim /srv/salt/apache/install.sls
install-apache:
pkg.installed:
- pkgs:
- httpd
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- template: jinja
- context:
port: 80
# host: {{ pillar['ip'] }}
service.running:
- name: httpd
- watch:
- file: install-apache
直接修改文件 写入取的ip和端口:
[root@server1 pillar]# vim /srv/salt/apache/files/httpd.conf
42 Listen {{ pillar['ip'] }}:{{ port }}
[root@server1 pillar]# salt server2 state.sls apache.install
server2查看:
[root@server2 salt]# vim /etc/httpd/conf/httpd.conf
[root@server2 salt]# netstat -antlp
第四种
取ip 将端口新建文件写入:
[root@server1 pillar]# vim /srv/salt/apache/files/httpd.conf
Listen {{ host }}:{{ port }}
[root@server1 pillar]# vim /srv/salt/apache/install.sls
install-apache:
pkg.installed:
- pkgs:
- httpd
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- template: jinja
- context:
# port: 80
host: {{ pillar['ip'] }}
service.running:
- name: httpd
- watch:
- file: install-apache
[root@server1 pillar]# cd /srv/salt/apache/
[root@server1 apache]# vim lib.sls
{% set port = '80' %}
[root@server1 apache]# vim files/httpd.conf
1 {% from 'apache/lib.sls' import port %}
[root@server1 apache]# salt server2 state.sls apache.install
再推查看。
与上面方法三相同
[root@server1 apache]# vim install.sls
install-apache:
pkg.installed:
- pkgs:
- httpd
file.managed:
- name: /etc/httpd/conf/httpd.conf
- source: salt://apache/files/httpd.conf
- template: jinja
- context:
port: 80
host: {{ pillar['ip'] }}
service.running:
- name: httpd
- watch:
- file: install-apache
[root@server1 apache]# salt server2 state.sls apache.install
修改nginx版本,这种方式简便 只用改最上边的 底下的引用都是随着他的改变而改变:
[root@server1 apache]# cd /srv/salt/nginx/
[root@server1 nginx]# ls
files install.sls service.sls
[root@server1 nginx]# vim install.sls
{% set nginx_version = '1.15.8' %}
include:
- pkgs.install
install-nginx:
file.managed:
- name: /mnt/nginx-{{ nginx_version }}.tar.gz
- source: salt://nginx/files/nginx-{{ nginx_version }}.tar.gz
cmd.run:
- name: cd /mnt && tar zxf nginx-{{ nginx_version }}.tar.gz && cd nginx-{{ nginx_version }} && sed -i 's/CFLAGS="$CFLAGS -g"/#CFLAGS="$CFLAGS -g"/g' auto/cc/gcc && ./configure --prefix=/usr/local/nginx && make && make install
- creates: /usr/local/nginx
[root@server1 nginx]# salt server3 state.sls nginx.install