使用salt-stack中的include传递变量

时间:2016-08-11 19:07:06

标签: salt-stack

我有几个几乎相同的状态。他们都部署项目,创建virtualenv并配置主管。区别仅在于回购,项目名称和一些其他操作。

许多代码都是重复的。是否可以将相同的部分放入文件中并将其包含在其他变量中?

在Ansible中可以这样做:

tasks:
  - include: wordpress.yml
    vars:
        wp_user: timmy
        ssh_keys:
          - keys/one.txt
          - keys/two.txt

3 个答案:

答案 0 :(得分:5)

此问题与this one

类似

如果我理解你的问题 - 我相信达到你想要的最好方法是使用Salt Macros

这样你的大部分状态都会转到带有占位符的宏,例如:

# lib.sls
{% macro create_user(user, password) %}
{{user}}:
  user.present:
    - home: /home/{{user}}
    - password: {{password}}
{% endmacro %}

然后你的州将会是这样的:

# john.sls
{% from 'lib.sls' import create_user with context %}
{{ create_user('john', '<password hash>') }}

# jane.sls
{% from 'lib.sls' import create_user with context %}
{{ create_user('john', '<password hash>') }}

答案 1 :(得分:1)

正如我发现还有另一种方法可以将其存档而不会弄乱模板(更多的Ansible方式)。创建一个抽象状态&#34; python-project&#34;。然后创建具体角色并为这些角色提供不同的支柱:

<强>盐/ top.sls:

base:
  'roles:python-project-1':
    - match: grain
    - python-project

  'roles:python-project-2':
    - match: grain
    - python-project

<强>支柱/ top.sls:

base:
  'roles:python-project-1':
    - match: grain
    - common-pillars
    - pillars-for-the-first

  'roles:python-project-2':
    - match: grain
    - common-pillars
    - pillars-for-the-second

结构:

pillar/top.sls
pillar/common-pillars/init.sls
pillar/pillars-for-the-first/init.sls
pillar/pillars-for-the-second/init.sls
salt/top.sls
salt/python-project/init.sls

答案 2 :(得分:1)

您可以使用Jinja导入来做到这一点:

top.sls

{% set user = 'john' %}
{% include 'config.sls' %}

config.sls

file.managed:
  - name: '/Users/{{ user }}/.config
  - user: {{ user }}