我有几个几乎相同的状态。他们都部署项目,创建virtualenv并配置主管。区别仅在于回购,项目名称和一些其他操作。
许多代码都是重复的。是否可以将相同的部分放入文件中并将其包含在其他变量中?
在Ansible中可以这样做:
tasks:
- include: wordpress.yml
vars:
wp_user: timmy
ssh_keys:
- keys/one.txt
- keys/two.txt
答案 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 }}