1、配置pillar的top.sls:
base:
nova: - match: nodegroup - nova neutron: - match: nodegroup - neutron2、pillar的nova和neutron的配置:
apache:
name: httpd ip: 172.16.171.120 root: /var/www/neutronapache: name: httpd ip: 172.16.171.110 root: /var/www/nova3、配置state的top.sls:
base:
'*': - apache.start - apache.stop4、配置apache.start:
apache.start:
pkg.installed: - name: { { pillar['apache']['name'] }} service.running: - name: { { pillar['apache']['name'] }} - watch: - pkg: { { pillar['apache']['name'] }} - file: /etc/httpd/conf/httpd.conf - user: apache user.present: - name: apache - shell: /sbin/nologin - home: { { pillar['apache']['root'] }} - require: - group: apache group.present: - name: apache - require: - pkg: { { pillar['apache']['name'] }} file.managed: - name: /etc/httpd/conf/httpd.conf - source: salt://apache/httpd.conf - user: root - group: root - mode: 644 - template: jinja 注:必须指定,否则httpd.conf中的pillar变量无法替换。{ { pillar['apache']['root'] }}/new: file.directory: - file_mode: 640 - dir_mode: 750{ { pillar['apache']['root'] }}/test/process.sh: file.managed: - source: salt://apache/process.sh - makedirs: True4、配置apache.stop:
apache.stop:
pkg.removed: - name: { { pillar['apache']['name'] }} - require: - service: { { pillar['apache']['name'] }} service.dead: - name: { { pillar['apache']['name'] }} user.absent: - name: apache - purge: True - require: - pkg: { { pillar['apache']['name'] }}5、在httpd.conf配置文件中指定:
Listen {
{ pillar['apache']['ip'] }}:80DocumentRoot {
{ pillar['apache']['root'] }}6、如果在httpd.conf中不指定pillar变量,直接指定自定义变量名,即如下:
Listen ` addr `:80
DocumentRoot ` dir `
7、即可在apache.start指定defaults或context,具体如下:
apache.start:
pkg.installed: - name: { { pillar['apache']['name'] }} service.running: - name: { { pillar['apache']['name'] }} - watch: - pkg: { { pillar['apache']['name'] }} - file: /etc/httpd/conf/httpd.conf - user: apache user.present: - name: apache - shell: /sbin/nologin - home: { { pillar['apache']['root'] }} 或者 { { salt['pillar']('apache:root','/var/www/html') }} - require: - group: apache group.present: - name: apache - require: - pkg: { { pillar['apache']['name'] }} file.managed: - name: /etc/httpd/conf/httpd.conf - source: salt://apache/httpd.conf - user: root - group: root - mode: 644 - template: jinja - context: addr: { { pillar['apache']['ip'] }} 或者 { { salt['pillar']('apache:ip','0.0.0.0') }} dir: { { pillar['apache']['root'] }} 或者 { { salt['pillar']('apache:root','/var/www/html') }}注:后者可以指定个默认值,当个另minion没定义时,可以使用默认值,而不会出现执行异常。