Ansible で変数を URL から読み込む

外部のサービスとの連携などで IP アドレスを使った設定をすることがあります。この場合に、その相手がテキストや JSON で IP アドレスのリストを公開してくれていれば、Ansible ではその URL から直接変数に取り込むことが可能です。

Lookup Pluginurl というやつを使います。試してみましょう。

StripeDomains and IP Addresses というページで IP アドレスの情報を公開していますが https://stripe.com/files/ips/ips_webhooks.txthttps://stripe.com/files/ips/ips_webhooks.json でテキストや JSON で公開してくれています。

次の Playbook を site.yml として保存して実行してみます。

- hosts: all
  gather_facts: no
  vars:
    text1: "{{ lookup('url', 'https://stripe.com/files/ips/ips_webhooks.txt') }}"
    text2: "{{ lookup('url', 'https://stripe.com/files/ips/ips_webhooks.txt', wantlist=True) }}"
    json1: "{{ lookup('url', 'https://stripe.com/files/ips/ips_webhooks.json') }}"
    json2: "{{ lookup('url', 'https://stripe.com/files/ips/ips_webhooks.json', split_lines=False) }}"
  tasks:
    - name: text1
      debug:
        var: text1
    - name: text2
      debug:
        var: text2
    - name: json1
      debug:
        var: json1
    - name: json2
      debug:
        var: json2
$ ansible-playbook -i localhost, site.yml --connection=local

PLAY [all] *****************************************************************************************

TASK [text1] ***************************************************************************************
ok: [localhost] =>
  text1: 54.187.174.169,54.187.205.235,54.187.216.72,54.241.31.99,54.241.31.102,54.241.34.107

TASK [text2] ***************************************************************************************
ok: [localhost] =>
  text2:
  - 54.187.174.169
  - 54.187.205.235
  - 54.187.216.72
  - 54.241.31.99
  - 54.241.31.102
  - 54.241.34.107

TASK [json1] ***************************************************************************************
ok: [localhost] =>
  json1: "{,\t\"WEBHOOKS\":[,\t\t\"54.187.174.169\",,\t\t\"54.187.205.235\",,\t\t\"54.187.216.72\",,\t\t\"54.241.31.99\",,\t\t\"54.241.31.102\",,\t\t\"54.241.34.107\",\t],}"

TASK [json2] ***************************************************************************************
ok: [localhost] =>
  json2:
    WEBHOOKS:
    - 54.187.174.169
    - 54.187.205.235
    - 54.187.216.72
    - 54.241.31.99
    - 54.241.31.102
    - 54.241.34.107

PLAY RECAP *****************************************************************************************
localhost                  : ok=4    changed=0    unreachable=0    failed=0
  • テキストファイルは1行1アドレスのリストですが、text1 の方法では各行がカンマ区切りで1つの文字列として取り込まれました
  • text2 は wantlist=True を指定したことで各行を要素としたリストとして取り込まれました
  • json1 は JSON という形式を無視して text1 と同様に各行がカンマ区切りで1つの文字列として取り込まれました
  • json3 は split_lines=False と指定したことで JSON の構造を維持した状態で取り込まれました

以上

Built with Hugo
テーマ StackJimmy によって設計されています。