1、配置pillar的top.sls:


base:

  nova:
    - match: nodegroup
    - nova
  neutron:
    - match: nodegroup
    - neutron


2、pillar的nova和neutron的配置:


apache:

  name: httpd
  ip: 172.16.171.120
  root: /var/www/neutron
apache:
  name: httpd
  ip: 172.16.171.110
  root: /var/www/nova


3、配置state的top.sls:


base:

  '*':
    - apache.start
    - apache.stop


4、配置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: True


4、配置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'] }}:80

DocumentRoot {

{ 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没定义时,可以使用默认值,而不会出现执行异常。