使用不同的支柱数据运行盐状态两次?

时间:2015-02-04 23:40:35

标签: salt-stack

我为网站设置了支柱数据,例如web_root,virtualhost和mysql:

web_root:
  config_file: salt://some/path.conf
  key: some data
  directory_name: directoryA

virtualhost:
  config_file: salt://some/path.conf
  name: websiteA

mysql:
  database:
    - websiteA_db

这些映射到web_root,virtualhost和mysql的状态(使用公式)。

我想使用一个小兵运行这些状态多次,使用单独的支柱数据,例如

include:
    - apache
    - php
{% for instance in [instanceA, instanceB] -%}
    {% load pillar data /pillar/{{ instance }} -%}
    - web_root #run the state
    - virtualhost #run the state
    - mysql #run the state
{% endfor -%}

这可能吗?我知道我可以像这样设置支柱数据:

web_root:
  instanceA:
    config_file: salt://some/pathA.conf
    key: some data
    directory_name: directoryA
  instanceB:
    config_file: salt://some/pathB.conf
    key: some data
    directory_name: directoryB

virtualhost:
  instanceA:
    config_file: salt://some/pathA.conf
    name: websiteA
  instanceB:
    config_file: salt://some/pathB.conf
    name: websiteB

mysql:
  database:
    - websiteA_db
    - websiteB_db

但这意味着我必须为每个状态文件添加循环,使其可读性降低,并使用不同的语法,例如对于mysql,这是一个具有设置语法要求的公式。

1 个答案:

答案 0 :(得分:0)

你会想做这样的事情:

支柱数据

web_root:
  instances:
    A:
      - name: A
      - key: key_A_data
    B:
      - name: B
      - key: key_B_data

州档案

{% set names = salt['pillar.get']('web_root:instances') %}

apache:
  pkg.installed: []

{% for name in names %}
instance{{ name }}:
  - config_file: salt://some/path{{ name }}.conf
  - key: {{ key }}
  - directory_name: directory{{ name }}
{% endfor %}

然后对其余的对象做同样的事情。这样,在向柱子添加对象时,您不必更改状态文件。