2018年12月11日火曜日

uri モジュール


このエントリーをはてなブックマークに追加


Ansible には get_url というモジュールがあります。これは指定したURLを取得してターゲットホスト上に保存する機能をもち、ファイルのダウンロードなどに使われます。

似たようなモジュールでより汎用的なものとして uri があります。これはREST APIを叩いたり、WEBの動作確認など様々な使い方ができます。いわゆる curl コマンドのAnsibleモジュール版といっても良いでしょう。汎用HTTPリクエスト機能とも言いかえられるかもしれません。

このモジュールは shell などと同じく、冪等性を考慮していない汎用コマンド系なのでその点は注意が必要です。

公式のサンプルを少し見てみましょう。



指定URLへGETを送ります。応答がなければエラーです。とりあえず動いているか、動いていなかを確認できます。
- name: Check that you can connect (GET) to a page and it returns a status 200
  uri:
    url: http://www.example.com

指定のURLへGETを送りコンテンツを取得します。そのコンテンツ内に AWESOME という文字列がなければエラーになります。すごく便利です。
- uri:
    url: http://www.example.com
    return_content: yes
  register: this
  failed_when: "'AWESOME' not in this.content"

REST APIを叩く例です。bodyにデータを格納してPOSTしています。
- name: Create a JIRA issue
  uri:
    url: https://your.jira.example.com/rest/api/2/issue/
    method: POST
    user: your_username
    password: your_pass
    body: "{{ lookup('file','issue.json') }}"
    force_basic_auth: yes
    status_code: 201
    body_format: json

ログインできるかを確認しています。最近はこんな単純な方法でログインできるサイトも少ないと思うので、あまり出番はないかと思います。
- uri:
    url: https://your.form.based.auth.example.com/index.php
    method: POST
    body_format: form-urlencoded
    body:
      name: your_username
      password: your_password
      enter: Sign in
    status_code: 302
  register: login

- uri:
    url: https://your.form.based.auth.example.com/index.php
    method: POST
    body_format: form-urlencoded
    body:
    - [ name, your_username ]
    - [ password, your_password ]
    - [ enter, Sign in ]
    status_code: 302
  register: login

その他にも、期待するリターンコードを指定して、それ以外はエラーにするなども可能で、とても汎用的なモジュールです。

0 件のコメント:

コメントを投稿