この記事は、Ansible Advent Calendar 2022 (Adventar 版) の 21日目の記事です。
はじめに
ansible-core 2.14.0 で、URL、URI、URN の文字列をチェックするテストプラグインが追加されました。
使用例は、それぞれのドキュメントページの Examples
にいくつか掲載されています。
この中で、一番使用頻度の高そうな url
テストプラグインを試してみます。
- 動作確認環境
- ansible-core 2.14.0
おためし
公式の Examples
まずは、url
テストプラグインの Examplesに掲載されているものを試してみました。
true
/ false
の結果をコメントで付記します。(uri
と混在していますね)
--- - hosts: localhost gather_facts: false connection: local tasks: - name: debug url test debug: msg: # true - "{{ 'http://example.com' is url }}" # true - "{{ 'mailto://nowone@example.com' is not uri(schemes=['ftp', 'ftps', 'sftp', 'file']) }}" # false - "{{ 'mailto://nowone@example.com' is not uri }}" # true - "{{ 'ftp://admin:secret@example.com/path/to/myfile.yml' is url }}"
少し処理を追ってみる
処理が書いてる plugins/test/uri.py
を少し見ていました。ここには url
、uri
、 urn
の 3つのテストプラグインがまとめて書かれています。
url
テストプラグインの処理は、最初に is_uri
つまり uri
テストプラグイン相当の処理がかかるようです。schemes
のチェックは is_uri
内で行われています。
その後 Python の urllib.parse.urlparse
が通るかを調べています。
http://
や https://
のみに絞りたい場合
is url
のように schemes
未指定だと、いろんなスキーマが許可されます。
例えば、以下は true
です。
"{{ `'mailto://nowone@example.com' is url }}"
もし http://
や https://
のみに絞りたいときはありそうだなと思っていくつかのパターンを試しました。
--- - hosts: localhost gather_facts: false connection: local tasks: - name: debug url test ansible.builtin.debug: msg: # true - "{{ 'http://example.com' is url(schemes=['http']) }}" # false - "{{ 'https://example.com' is url(schemes=['http']) }}" # false - "{{ 'http://example.com' is url(schemes=['https']) }}" # true - "{{ 'https://example.com' is url(schemes=['https']) }}" # true - "{{ 'http://example.com' is url(schemes=['http', 'https']) }}" # true - "{{ 'https://example.com' is url(schemes=['http', 'https']) }}" # true - "{{ 'https://example.com:8080' is url(schemes=['http', 'https']) }}" # false (惜しい) - "{{ 'https//example.com' is url(schemes=['http', 'https']) }}" # false (惜しい) - "{{ 'https:/example.com' is url(schemes=['http', 'https']) }}" # false - "{{ 'mailto://nowone@example.com' is url(schemes=['http', 'https']) }}"
http
のみ、https
のみ、http
か https
、のそれぞれの動作が確認できました。
なお、テストコードでは、一部処理で http
, https
, ftp
, ftps
, ws
, wss
, file
の schemes
が指定されていました。
おわりに
これまでありそうでなかったという感じのテストプラグインでした。今後使う機会があるかもしれません。
参考
2.14.0 の Changelog
new tests url, uri and urn will verify string as such, but they don't check existance of the resource