에 파일이 있는지 확인해야합니다 /etc/
. 파일이 있으면 작업을 건너 뛰어야합니다. 내가 사용하는 코드는 다음과 같습니다.
- name: checking the file exists
command: touch file.txt
when: $(! -s /etc/file.txt)
답변
먼저 대상 파일이 있는지 여부를 확인한 다음 결과 출력에 따라 결정을 내릴 수 있습니다.
tasks:
- name: Check that the somefile.conf exists
stat:
path: /etc/file.txt
register: stat_result
- name: Create the file, if it doesnt exist already
file:
path: /etc/file.txt
state: touch
when: not stat_result.stat.exists
답변
합계 모듈은 파일에 대한 다른 정보를 많이 얻을뿐만 아니라이 작업을 수행 할 것입니다. 예제 문서에서 :
- stat: path=/path/to/something
register: p
- debug: msg="Path exists and is a directory"
when: p.stat.isdir is defined and p.stat.isdir
답변
파일이있을 때 작업을 건너 뛰기 위해 stat 모듈을 사용하면됩니다.
- hosts: servers
tasks:
- name: Ansible check file exists.
stat:
path: /etc/issue
register: p
- debug:
msg: "File exists..."
when: p.stat.exists
- debug:
msg: "File not found"
when: p.stat.exists == False
답변
일반적으로 stat 모듈을 사용 하여이 작업을 수행 합니다 . 그러나 명령 모듈 에는 creates
이를 매우 간단하게 만드는 옵션이 있습니다.
- name: touch file
command: touch /etc/file.txt
args:
creates: /etc/file.txt
나는 당신의 터치 명령이 단지 예라고 생각합니까? 모범 사례는 아무것도 확인하지 않고 올바른 모듈을 사용하여 ansible이 작업을 수행하도록하는 것입니다. 따라서 파일이 존재하는지 확인하려면 파일 모듈을 사용합니다.
- name: make sure file exists
file:
path: /etc/file.txt
state: touch
답변
vars:
mypath: "/etc/file.txt"
tasks:
- name: checking the file exists
command: touch file.txt
when: mypath is not exists
답변
이러한 .stat.exists
유형 검사를 많이 수행하는 것이 성 가시고 오류가 발생하기 쉽습니다 . 예를 들어 검사 모드 ( --check
)가 작동 하려면 각별한주의가 필요합니다 .
여기에 많은 답변이 제안됩니다.
- 입수 및 등록
- 레지스터 표현식이 참일 때 적용
그러나 때때로 이것은 코드 냄새이므로 항상 Ansible을 사용하는 더 나은 방법을 찾으십시오. 특히 올바른 모듈을 사용하면 많은 이점이 있습니다. 예 :
- name: install ntpdate
package:
name: ntpdate
또는
- file:
path: /etc/file.txt
owner: root
group: root
mode: 0644
단, 하나의 모듈을 사용할 수없는 경우에는 이전 작업의 결과를 등록하고 확인할 수 있는지도 조사하십시오. 예 :
# jmeter_version: 4.0
- name: Download Jmeter archive
get_url:
url: "http://archive.apache.org/dist/jmeter/binaries/apache-jmeter-{{ jmeter_version }}.tgz"
dest: "/opt/jmeter/apache-jmeter-{{ jmeter_version }}.tgz"
checksum: sha512:eee7d68bd1f7e7b269fabaf8f09821697165518b112a979a25c5f128c4de8ca6ad12d3b20cd9380a2b53ca52762b4c4979e564a8c2ff37196692fbd217f1e343
register: download_result
- name: Extract apache-jmeter
unarchive:
src: "/opt/jmeter/apache-jmeter-{{ jmeter_version }}.tgz"
dest: "/opt/jmeter/"
remote_src: yes
creates: "/opt/jmeter/apache-jmeter-{{ jmeter_version }}"
when: download_result.state == 'file'
메모 when:
뿐만 아니라 creates:
지금은 --check
밖으로 오류가 없습니다
나는 종종 이러한 이상적이지 않은 관행이 쌍으로 나옵니다. 즉 apt / yum 패키지가 없으므로 1) 다운로드하고 2) 압축을 풀어야하기 때문에 이것을 언급합니다.
도움이 되었기를 바랍니다
답변
호출 stat
이 느리고 파일 존재 확인에 필요하지 않은 많은 정보를 수집 함을 발견했습니다 .
솔루션을 검색하는 데 시간을 보낸 후 훨씬 빠르게 작동하는 다음 솔루션을 발견했습니다.
- raw: test -e /path/to/something && echo true || echo false
register: file_exists
- debug: msg="Path exists"
when: file_exists == true