一千萬個為什麽

搜索

我怎樣才能分享鹽國之間的(全球)變量?



我使用Salt進行部署和配置管理。為了連接到FreeIPA服務器,我需要隨機生成一個OTP令牌,然後用它連接到IPA。我如何在SLS文件之間共享一個變量?

例如,

init.sls:

{%- from "freeipa/map.jinja" import client, ipa_host with context %}
include:
  - freeipa.example

freeipa_client_install:
  cmd.run:
  - name: >
    ipa-client-install
    --server server.example.com
    --domain example.com
    --realm EXAMPLE.COM
    --hostname client.example.com
    -w {{ otp }}                                   <===== !!!
    --unattended

./freeipa/example.sls:

{% set otp = salt['random.get_str'](20) %}         <===== !!!

get_ticket:
  cmd.run:
    - name: kinit [email protected] -kt /tmp/salt-service.keytab
ipa_host_add:
  cmd.run:
    - name: >
      curl -k
      -H referer:https://{{ client.get("server", {}) }}/ipa
      --negotiate -u :
      -H "Content-Type:application/json"
      -H "Accept:applicaton/json"
      -c /tmp/cookiejar -b /tmp/cookiejar
      -X POST
      -d '{
        "id": 0,
        "method": "host_add",
        "params": [
          [
            "client.example.com"
          ],
          {
            "all": false,
            "force": false,
            "no_members": false,
            "no_reverse": false,
            "random": false,
            "raw": true,
            "userpassword": "{{ otp }}",          <==== !!!
            "version": "2.156"
          }
        ]
      }' https://server.example.com/ipa/json

我發現在example.sls中一切都很好,但我不能在init.sls中引用這個變量。我是否需要在init.sls中使用 salt ['random.get_str'](20)來代替?如果是這樣,我怎樣才能引用example.sls中的otp變量 - 反之亦然 - 我如何引用init.sls中的example.sls中設置的otp變量?

轉載註明原文: 我怎樣才能分享鹽國之間的(全球)變量?

一共有 1 個回答:

當我遇到一個相關的問題時,我最終讓Jinja執行了Salt模塊。

在我的例子中,它是 cmd.run 來運行 mktmp (並且在模板的末尾, rm 用於清除),<�代碼> file.append 和 file.grep ,但在你的情況下,你可能會使用Salt的 load_yaml 擴展名到Jinja。

所以,像這樣(粗糙,未經測試):

{% set tmpfile = salt['cmd.run']('mktmp') -%}
{% salt['file.append']('my_key: ' ~ your_key) -%}
{% set my_key = load_yaml(tmpfile)['my_key'] -%}
{% salt['file.remove'](tmpfile) %}

這當然不是放置數據的最佳位置,但它演示了使用從Jinja調用Salt模塊來存儲數據。我不知道任何現有的Salt模塊適合存儲僅在模板編譯時才存在的臨時數據。我會稍後再回來查看其他解決方案可能的工作方式。