2013-08-20 25 views
10

Chúng tôi có hai môi trường, dev và sản xuất khác nhau, được quản lý bởi một máy chủ Salt đơn lẻ. Something như thế này:Làm cách nào để tránh lặp lại chính mình ở các tiểu bang Salt?

base: 
    'dev-*': 
    - users-dev 
    'prod-*': 
    - users-prod 

user-devusers-prod bang được khá nhiều giống nhau, như thế này:

{% for user, data in pillar['users-dev'].items() %} 
{{ user }}-user: 
    user.present: 
    <...something...> 
{{ user }}_ssh_auth: 
    ssh_auth.present: 
    <...something...> 
{% endfor %} 

Chúng tôi không muốn lặp lại mã nên ý tưởng ban đầu của chúng tôi là để làm một cái gì đó như thế này :

{% users = pillar['users'].items() %} 
include: 
    - users-common 

và sau đó tham khảo users trong users-common, nhưng điều này không hoạt động sử dụng cú pháp Jinja thích hợp là set users = pillar['users'].items() và điều này không có ý định làm việc trên các tiểu bang Salt bao gồm.

Vì vậy, câu hỏi đặt ra là làm thế nào để làm điều đó đúng cách?

Trả lời

2

Tất cả jinja được đánh giá trước khi bất kỳ trạng thái nào (bao gồm câu lệnh include) được đánh giá.

Tuy nhiên, tôi cho rằng bạn chỉ có thể trực tiếp tham khảo pillar['users'].items() bên trong số users-common. Nó không cho phép bạn truy cập vào trụ cột từ trong trạng thái đó?

Các vấn đề liên quan