バージョンファイルが存在する場合はそのファイルを読み込み、その内容を確認できます。バージョンが変更された場合、またはファイルが存在しない場合はTrueを返し、バージョンファイルが存在し、バージョンがコンテンツと一致する場合はFalseを返します。不可能 - バージョンファイルチェック
基本的には、この:
# setup test data
- set_fact:
version_expected: "0001"
version_path: "/path/to/version"
version_owner: "root"
version_group: "root"
# this block is used to check for version changes
- name: check version change
block:
- name: check version file
stat:
path: "{{version_path}}"
register: version_file
- set_fact:
version_remote: "{{ lookup('file', version_path) | default('') }}"
when: version_file.stat.exists
- set_fact:
version_changed: not version_file.stat.exists or version_remote != version_expected
# test writing new version
- name: write file
copy:
dest: "{{version_path}}"
content: "{{version_expected}}"
owner: "{{version_owner}}"
group: "{{version_group}}"
when: version_changed
私の問題がある:これはやや醜いと私の役割ではかなり冗長になりつつあります。 これを行うもっとエレガントな方法はありますか? おそらくこれ用のモジュールはありますか? (私は何も見つけませんでしたが) これについてモジュールを書くだけでいいですか?
敬具、 2d4r
EDIT:のみ "バージョンの変更を確認し、" ブロックを意味
イム、周囲のコードはデバッグ専用です。 具体的には、私はサーババイナリをダウンロードしたいと思っていますが、私の期待バージョンとバージョンファイルの内容が異なる場合に限ります。 ダウンロードが成功した場合のみ新しいバージョンをファイルに書きたいと思いますが、それは私の質問の一部ではありません。
EDIT2:
私は今ではこれを得た。このように使用
# roles/_helper/tasks/version_check.yml
- name: check if file exists
stat:
path: "{{version_path}}"
register: version_file
- name: get remote version
slurp:
src: "{{version_path}}"
register: version_changed
when: version_file.stat.exists
# (False if versionfile exists and version is expected; True else)
- name: set return value
set_fact:
version_changed: "{{ not version_file.stat.exists or ((version_changed.content | b64decode) is version_compare(version_expected, 'ne')) }}"
:
# /roles/example/tasks/main.yml
- include_role:
name: _helper
tasks_from: version_check
vars:
version_path: "{{file_version_path}}"
version_expected: "{{file_version_expected}}"
- name: doing awesome things
when: version_changed
block:
- name: download server
[...]
- name: write version
copy:
dest: "{{file_version_path}}"
content: "{{file_version_expected}}"
それは冗長性を殺すが、私が欲しいものはまだありません。 悲しいことに、ロールの戻り値を登録できません。
返信いただきありがとうございますが、私の編集をご覧ください。ロールが失敗した場合、コピー操作はロールバックされますか?もしそうでなければ、私の問題を解決するのには役に立たないでしょう。 – 2deep4real
ああ、私はルックアップで 'ローカル'の部分を見落としたと思う...私の悪い。 – 2deep4real