Salt Pillar: prod/dev에 서로 다른 값을 사용하는 방법은 무엇입니까?

Salt Pillar: prod/dev에 서로 다른 값을 사용하는 방법은 무엇입니까?

내가 이것을 올바른 방식으로 생각하고 있는지 잘 모르겠지만 여기에 내 문제가 있습니다.

프로덕션, 개발 및 테스트 서버에 동일한 Salt 상태 및 기둥 구성을 사용하고 싶습니다. 유일한 차이점은 다음과 같습니다.

  1. 어떤 미니언이 사용되나요?
  2. 비밀번호나 사용자 이름과 같은 기둥 키의 값

계속해서 다른 Pillar 환경을 만들 수 있지만 이로 인해 sls 파일이 분리되어 구성이 서로 다를 수 있음을 의미합니다. 또 다른 접근법은 각 환경마다 하나씩 다른 git 브랜치를 사용하는 것입니다. 그러나 나는 이것이 많은 병합 충돌로 이어질 것이라고 상상합니다.

문제가 구조를 가진 기둥 파일로 귀결된다고 생각되면. 예를 들어 다음을 활성화한 서버의 기둥 파일은 다음과 같습니다 collectd.

#!yaml|gpg

collectd:
  host:
    ip: 1.2.3.4
    port: 123
    username: my_username
    password: |
      -----BEGIN PGP MESSAGE-----
      ...
      -----END PGP MESSAGE-----

다음과 같이 다른 값을 사용하여 모든 환경에서 이 파일을 사용할 수 있기를 바랍니다.

#!yaml|gpg

collectd:
  host:
    ip: $HOST_COLLECTD
    port: 123
    username: $USER_COLLECTD
    password: $PASS_COLLECTD

이와 같은 것이 가능합니까, 아니면 Salt를 잘못된 방식으로 사용하고 있습니까?

감사해요!

편집하다, 몇 가지 정보를 추가하려면 다음을 수행하세요.

git_pillargit에서 직접 파일을 가져오는 데 사용하고 있습니다 . 이를 통해 각 분기가 환경이 될 수 있으므로 여러 디렉터리를 만들지 않고도 여러 환경을 가질 수 있습니다. ~에해결책나는 템플릿을 사용하여 saltenv. 이것은 약간 해킹된 것처럼 느껴지지만 지금은 내가 원하는 것을 수행할 것입니다.

#!yaml|gpg

collectd:
  host:
    ip: 1.2.3.4
    port: 123
    username: my_username
    password: |
      {% if saltenv == 'dev' %}
      -----BEGIN PGP MESSAGE-----
      ...
      -----END PGP MESSAGE-----
      {% else %}
      -----BEGIN PGP MESSAGE-----
      ...
      -----END PGP MESSAGE-----
      {% endif %}

그래도 여전히 문제를 해결하기 위한 더 나은 방법을 찾고 있습니다.

답변1

결과가 전적으로 만족스럽지는 않지만, 같은 문제를 겪는 다른 사람들을 위해 제가 지금 사용하고 있는 것을 게시하고 싶습니다.

환경에 따라 다른 값이 필요한 모든 파일의 상단에 jinja 변수를 선언합니다. 이는 여전히 모든 파일에 자체 코딩된 논리가 있음을 의미하지만 최소한 기본 데이터의 실제 구조는 이해하기 쉽습니다. 일부 형식 문제가 있지만 필요한 모든 것에 작동합니다. 예는 다음과 같습니다.

#!jinja|yaml|gpg

{# Set values based on saltenv #}
{% if saltenv == 'test' %}
  {% set ip = 1.2.3.4 %}
  {% set username = 'user_test'%}
  {% set password = '
      -----BEGIN PGP MESSAGE-----
      ...
      -----END PGP MESSAGE-----'%}
{% elif saltenv == 'production' %}
  {% set ip = 5.6.7.8 %}
  {% set username = 'user_prod' %}
  {% set password = '
      -----BEGIN PGP MESSAGE-----
      ...
      -----END PGP MESSAGE-----'%}
{% else %}
  {{ raise('Invalid / Unknown saltenv:' ~ saltenv)}}
{% endif %}

collectd:
  host:
    ip: {{ ip }}
    port: 123
    username: {{ username }}
    password: |- {{ password }}

PGP 메시지처럼 여러 줄로 된 문자열을 들여쓰기하는 데 매우 조심해야 합니다!

관련 정보