塩柱を介してマスターからミニオンにsshキーを展開する


11

ミニオンの1つに展開しようとしている2つのsshキーがあります。しかし、私はそれを展開させることができないようです。エラーが発生します。ここinit.slsに柱があります:

/xxx/yyy/zzz/id_rsa:
  file.managed:
    - source: salt://private/id_rsa

/xxx/yyy/zz/id_rsa.pub:
  file.managed:
    - source: salt://private/id_rsa.pub

私のinit.sls状態は次のとおりです。

ssh:
  file.managed:
    - name: {{ pillar['private'] }}

私は何か間違ったことをしているに違いありません(もちろん)。助言がありますか?


手伝いたいのですが、提供された情報ではお答えできません。その理由の一部は、yamlフォーマットです。質問を編集しますが、各コードブロックの上下に空白のリンクを残し、コードブロック内の各行を少なくとも4スペース分インデントします。第二に、方程式の柱なしでこれを行うことにすでに成功しましたか?柱のデータが設定されているように設定されているのを見たことはありません。
ダンガースウェイト

あなたの質問に対する答えを見つけましたか?
ダンガースウェイト

はい、そうだと思います
secure212

回答:


13

Salt Pillarシステムには、init.slsファイルがありません。州と柱の両方にtop.slsファイルがあります。サブディレクトリである状態には、init.slsファイルがある場合があります。

ステップ1:/srv/pillar/users.slsでユーザーを定義します

users:

  - name: fred
    fullname: Fred Flintstone
    email: fflintstone@slaterockandgravel.com
    uid: 4001
    gid: 4001
    shell: /bin/bash
    groups:
      - bowling
    shadow: $6$Sasdf/Ss$asdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfsadfasdfsadfsadfsdf
    authkey: ssh-dss AAAAasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafa = fflinstone@slaterockandgravel.com
    sshpub: ssh-dss AAAAasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafaasdfasdfasdfasdfasdfsadfsadfsadfsadfasdfasdfsdafsdafa = fflinstone@slaterockandgravel.com

  - name: barney
    fullname: Barney Rubble
    email: brubbel@slaterockandgravel.com
    uid: 4002
    gid: 4002
    shell: /bin/bash
    groups:
      - bowling
    shadow: $6$Suiop/Ss$uiopuiopuiopuiopuiopuiopuiopuiopuiopuiopuiopsadfuiopsadfsadfsdf
    authkey: ssh-dss AAAAuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafa = fflinstone@slaterockandgravel.com
    sshpub: ssh-dss AAAAuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafauiopuiopuiopuiopuiopsadfsadfsadfsadfuiopuiopsdafsdafa = fflinstone@slaterockandgravel.com

ステップ2:新しい柱を/srv/pillar/top.slsに追加します

base:
  'testminion':
    - users

ステップ3:jinjaを使用して、/ srv / salt / user / init.slsの状態にピラーをマッピングします

{% for user in pillar['users'] %}
user_{{user.name}}:
  group.present:
    - name: {{user.name}}
    - gid: {{user.gid}}

  user.present:
    - name: {{user.name}}
    - fullname: {{user.fullname}}
    - password: {{user.shadow}}
    - shell: {{user.shell}}
    - uid: {{user.uid}}
    - gid: {{user.gid}}
    {% if user.groups %}
    - optional_groups:
      {% for group in user.groups %}
      - {{group}}
      {% endfor %}
    {% endif %}
    - require:
      - group: user_{{user.name}}

  file.directory:
    - name: /home/{{user.name}}
    - user: {{user.name}}
    - group: {{user.name}}
    - mode: 0751
    - makedirs: True

user_{{user.name}}_forward:
  file.append:
    - name: /home/{{user.name}}/.forward
    - text: {{user.email}}

user_{{user.name}}_sshdir:
  file.directory:
    - name: /home/{{user.name}}/.ssh
    - user: {{user.name}}
    - group: {{user.name}}
    - mode: 0700

{% if 'authkey' in user %}
user_{{user.name}}_authkeys:
  ssh_auth.present:
    - user: {{user.name}}
    - name: {{user.authkey}}
{% endif %}

{% if 'sshpriv' in user %}
user_{{user.name}}_sshpriv:
  file.managed:
    - name: /home/{{user.name}}/.ssh/id_rsa
    - user: {{user.name}}
    - group: {{user.name}}
    - mode: 0600
    - contents_pillar: {{user.sshpriv}}
{% endif %}

{% if 'sshpub' in user %}
user_{{user.name}}_sshpub:
  file.managed:
    - name: /home/{{user.name}}/.ssh/id_rsa.pub
    - user: {{user.name}}
    - group: {{user.name}}
    - mode: 0600
    - contents_pillar: {{user.sshpub}}
{% endif %}
{% endfor %} # user in users
# vim: ft=yaml tabstop=2 sts=2 sw=2 et ai si

ミニオンを新しい柱と同期することを忘れないでください!

salt targetminions saltutil.refresh_pillar

このサンプルをSalt 2014.7.1で動作させることができませんでした。「Jinja変数 'str object'には属性 'name'がありません」というエラーが表示されます。私はuser / init.slsで次のようなことをすることに頼りました。 {% for user, data in salt['pillar.get']('users', {}).iteritems() %}これにより、slsファイルが大幅に変更されます。実用的な例を思いついたら投稿します。
マイクS

フォローアップ:トラベラーの皆さん、このコードの利用を検討しているのであれば、いくつかのエラーがあると思います。たとえば、「fred」および「barney」の後のコロンは、「end for」および「end if」と同様に、saltをbarfにさせます(スペースを入れるべきではありません)。繰り返しになりますが、コンストラクトのイニシャルは間違っていると思いますが、現時点では塩についてあまり知りませんので、確信が持てません。警告プログラマ。私自身は、iteritems()の概念を使用します。
マイクS

申し訳ありませんが、私はまだtestminionを取得します:データのコンパイルに失敗しました:---------- SLS 'base:users'のレンダリングに失敗しました:実行時にJinja変数 'str object'に属性 'name'がありません:salt testminion state.highstate test = True ....上記のテキストを逐語的にコピーしました。唯一の追加は、/ srv / salt / top.slsファイルで、これは単純な3ライナー(base:、 '*' :、および-users)です。
マイクS

最初に到達しない限り、Dockerコンテナをスピンアップして整理しますか?
ダンガースウェイト

「データのコンパイルに失敗しました」は、/ srv / pillar / top.slsのファイル名サフィックス「.sls」が原因でした。私も問題に遭遇しました。注意してください、私はそれの多くを書き直しました。私は今のところuser.sshprivを削除しなければなりませんでしたが、それはちょうど遅れてしまい、テキストコンテンツで---に悩まされ続けています。
ダンガースウェイト

0

それはおそらく場合は、元の質問に関連して、別の簡単な解決策があることに注意すべきsource: salt://...形式が動作しませんfile.managed-それはまだで起こったsalt-sshバグのためhttps://github.com/saltstack/salt/issues/38458たこと修正されたので-そしてcontents:、それはマスター上のファイルによっても裏付けられているファイルツリー外部ピラーで切り替えることです。

file_tree ext_pillarで文書化されてhttps://docs.saltstack.com/en/latest/ref/pillar/all/salt.pillar.file_tree.html#module-salt.pillar.file_tree頃は。バージョン2015.5.0以降に存在しているため、元の質問と回答よりも新しいものですが、今日では合理的に利用可能なソリューションです。

実際、https://docs.saltstack.com/en/latest/faq.html#is-it-possible-to-deploy-a-file-to-a-specific-minion-withoutのFAQにもあります-他の手下がそれへのアクセスを持っている

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.