버전 파일이 있으면 읽을 수 있고 내용을 확인하고 싶습니다. 그런 다음 버전이 변경되었거나 파일이 없으면 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
편집 : 단지 "버전 변경을 확인"블록을 의미
메신저, 주변의 코드는 디버깅을위한 것입니다. 좀 더 구체적으로 말하자면, 서버 바이너리를 다운로드하고 싶습니다만, 내 expectet 버전이 versionfile의 내용과 다른 경우에만. 다운로드가 성공했을 경우에만 새 버전을 파일에 쓰고 싶지만 내 질문에는 포함되지 않습니다.
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