先日、Ansibleを6.0.0から8.1.0へバージョンアップした。その際に、Ansible Lintのバージョンも新しくなった(6.3.0 -> 6.17.2)。
バージョンアップしたところ、Ansible Lintの処理が想定以上に長期化してしまう問題が発生した。具体的には、Ansible Lintの処理完了後の最後のメッセージ表示がされるまでに、約2分の待ち時間が発生するようになってしまった。
$ ansible-lint
~(中略)~
WARNING /usr/local/lib/python3.9/site-packages/jmespath/lexer.py:169 PendingDeprecationWarning deprecated string literal syntax
-- ★この間で2分ほど待機がある --
Passed: 0 failure(s), 0 warning(s) on 57 files. Last profile that met the validation criteria was 'production'.
本記事では、この事象を解決する方法を記載する。
環境
環境は以下の通り。
- OS : AlmaLinux 8.5
- Ansible : 8.1.0 [core 2.15.1]
- Ansible Lint : 6.17.2
Ansible Lintのバージョンは以下コマンドで確認している。
$ ansible-lint --version
ansible-lint 6.17.2 using ansible-core:2.15.1 ansible-compat:4.1.2 ruamel-yaml:None ruamel-yaml-clib:None
解決方法
結論から言うと、以下の通り--offline
オプションを付与することで解決できる。
$ ansible-lint --offline
調査内容詳細
ここからは参考情報となるので、興味のある方のみ確認いただきたい。
今回の事象調査のため、ansible-lint
コマンドに-vv
オプションを付与したうえで詳細な実行結果を確認した。すると、Ansible Lintで時間を要するパターンにおいては以下のログが出力されており、インターネット接続のタイムアウト待ちの時間によって処理が長期化していることを確認した。
DEBUG Unable to fetch latest version from https://api.github.com/repos/ansible/ansible-lint/releases/latest due to: <urlopen error [Errno 110] Connection timed out>
どうやら、GitHubに最新の情報取得を行おうと試みているようだ。そこで、ansible-lint
コマンドのヘルプから--offline
オプションがあることを確認し、付与することで上記動作が発生しないようにした。
以下に、参考情報として--offline
オプションの有無における実行結果を記載する。
--offline
オプションなし
$ ansible-lint -vv
~(中略)~
Read documentation for instructions on how to ignore specific rule violations.
DEBUG Determined rule-profile order: {'internal-error': (0, 'min'), 'load-failure': (1, 'min'), 'parser-error': (2, 'min'), 'syntax-check': (3, 'min'), 'command-instead-of-module': (4, 'basic'), 'command-instead-of-shell': (5, 'basic'), 'deprecated-bare-vars': (6, 'basic'), 'deprecated-local-action': (7, 'basic'), 'deprecated-module': (8, 'basic'), 'inline-env-var': (9, 'basic'), 'key-order': (10, 'basic'), 'literal-compare': (11, 'basic'), 'jinja': (12, 'basic'), 'no-free-form': (13, 'basic'), 'no-jinja-when': (14, 'basic'), 'no-tabs': (15, 'basic'), 'partial-become': (16, 'basic'), 'playbook-extension': (17, 'basic'), 'role-name': (18, 'basic'), 'schema': (19, 'basic'), 'name': (20, 'basic'), 'var-naming': (21, 'basic'), 'yaml': (22, 'basic'), 'name': (23, 'moderate'), 'name': (24, 'moderate'), 'name': (25, 'moderate'), 'spell-var-name': (26, 'moderate'), 'avoid-implicit': (27, 'safety'), 'latest': (28, 'safety'), 'package-latest': (29, 'safety'), 'risky-file-permissions': (30, 'safety'), 'risky-octal': (31, 'safety'), 'risky-shell-pipe': (32, 'safety'), 'galaxy': (33, 'shared'), 'ignore-errors': (34, 'shared'), 'layout': (35, 'shared'), 'meta-incorrect': (36, 'shared'), 'meta-no-tags': (37, 'shared'), 'meta-video-links': (38, 'shared'), 'meta-version': (39, 'shared'), 'meta-runtime': (40, 'shared'), 'no-changed-when': (41, 'shared'), 'no-changelog': (42, 'shared'), 'no-handler': (43, 'shared'), 'no-relative-paths': (44, 'shared'), 'max-block-depth': (45, 'shared'), 'max-tasks': (46, 'shared'), 'unsafe-loop': (47, 'shared'), 'avoid-dot-notation': (48, 'production'), 'sanity': (49, 'production'), 'fqcn': (50, 'production'), 'import-task-no-when': (51, 'production'), 'meta-no-dependencies': (52, 'production'), 'single-entry-point': (53, 'production'), 'use-loop': (54, 'production')}
Rule Violation Summary
count tag profile rule associated tags
12 yaml[empty-lines] basic formatting, yaml
23 yaml[indentation] basic formatting, yaml
DEBUG Unable to fetch latest version from https://api.github.com/repos/ansible/ansible-lint/releases/latest due to: <urlopen error [Errno 110] Connection timed out>
Failed: 35 failure(s), 0 warning(s) on 130 files. Last profile that met the validation criteria was 'min'.
--offline
オプションあり
$ ansible-lint --offline -vv
~(中略)~
Read documentation for instructions on how to ignore specific rule violations.
DEBUG Determined rule-profile order: {'internal-error': (0, 'min'), 'load-failure': (1, 'min'), 'parser-error': (2, 'min'), 'syntax-check': (3, 'min'), 'command-instead-of-module': (4, 'basic'), 'command-instead-of-shell': (5, 'basic'), 'deprecated-bare-vars': (6, 'basic'), 'deprecated-local-action': (7, 'basic'), 'deprecated-module': (8, 'basic'), 'inline-env-var': (9, 'basic'), 'key-order': (10, 'basic'), 'literal-compare': (11, 'basic'), 'jinja': (12, 'basic'), 'no-free-form': (13, 'basic'), 'no-jinja-when': (14, 'basic'), 'no-tabs': (15, 'basic'), 'partial-become': (16, 'basic'), 'playbook-extension': (17, 'basic'), 'role-name': (18, 'basic'), 'schema': (19, 'basic'), 'name': (20, 'basic'), 'var-naming': (21, 'basic'), 'yaml': (22, 'basic'), 'name': (23, 'moderate'), 'name': (24, 'moderate'), 'name': (25, 'moderate'), 'spell-var-name': (26, 'moderate'), 'avoid-implicit': (27, 'safety'), 'latest': (28, 'safety'), 'package-latest': (29, 'safety'), 'risky-file-permissions': (30, 'safety'), 'risky-octal': (31, 'safety'), 'risky-shell-pipe': (32, 'safety'), 'galaxy': (33, 'shared'), 'ignore-errors': (34, 'shared'), 'layout': (35, 'shared'), 'meta-incorrect': (36, 'shared'), 'meta-no-tags': (37, 'shared'), 'meta-video-links': (38, 'shared'), 'meta-version': (39, 'shared'), 'meta-runtime': (40, 'shared'), 'no-changed-when': (41, 'shared'), 'no-changelog': (42, 'shared'), 'no-handler': (43, 'shared'), 'no-relative-paths': (44, 'shared'), 'max-block-depth': (45, 'shared'), 'max-tasks': (46, 'shared'), 'unsafe-loop': (47, 'shared'), 'avoid-dot-notation': (48, 'production'), 'sanity': (49, 'production'), 'fqcn': (50, 'production'), 'import-task-no-when': (51, 'production'), 'meta-no-dependencies': (52, 'production'), 'single-entry-point': (53, 'production'), 'use-loop': (54, 'production')}
Rule Violation Summary
count tag profile rule associated tags
12 yaml[empty-lines] basic formatting, yaml
23 yaml[indentation] basic formatting, yaml
Failed: 35 failure(s), 0 warning(s) on 130 files. Last profile that met the validation criteria was 'min'.
以上。
0 件のコメント:
コメントを投稿