saltstack自动部署apache实例


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

你可能感兴趣的:(httpd,saltstack)