2017-12-19 7 views
0

버전 파일이 있으면 읽을 수 있고 내용을 확인하고 싶습니다. 그런 다음 버전이 변경되었거나 파일이 없으면 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}}" 

그것은 중복을 죽이고,하지만 내가 원하는 아직 없습니다. 슬프게도 역할에서 반환 값을 등록 할 수 없습니다.

답변

1

write file을 제외한 모든 작업을 삭제하고 조건을 제거하십시오.

이 작업은 자동으로 수행됩니다. 조회 플러그인이 제어 시스템에 로컬로 작업 할 때


당신이 질문을 변경 한 후

- name: write file 
    copy: 
    dest: "{{version_path}}" 
    content: "{{version_expected}}" 
    owner: "{{version_owner}}" 
    group: "{{version_group}}" 

는 제공된 정보를 제공, 내가 가리 할 수있는 유일한 것은, 대신 조회의 slurp 모듈을 사용하는 것입니다.

논리 또는 내장 된 version_compare 필터/테스트를 사용하여 버전을 비교하십시오.

+0

답장을 보내 주셔서 감사합니다.하지만 제 편집을 참조하십시오. 역할이 실패하면 복사 작업이 롤백됩니까? 그렇지 않으면 내 문제를 해결하는 데 도움이되지 않습니다. – 2deep4real

+0

오, 그래, 내가 조회에서 '로컬'부분을 간과 했나봐 ... 내 나쁜. – 2deep4real