ansible 로 파일을 삭제 할때 다음과 같은 case에 직면한다.
1. 특정 파일이나 디렉터리를 삭제
2. 디렉터리의 모든 파일을 삭제
3. 정규식을 사용하여 파일을 삭제
특히 디렉터리 내 모든 파일을 삭제하거나, 특정 패턴의 파일 이름을 삭제할경우
shell or command 모듈을 사용하여 "rm -rf /tmp/path/rain*" 등의 wildcard 를 사용할텐데..
멱등성이 유지되지 않음으로, 파일 모듈을 사용하는것이 좋다.
- 파일 삭제
Ansible 파일 모듈을 사용하여 특정 파일을 안전하게 삭제한다.
파일 모듈은 state, absent 를 사용하여 대상 파일을 제거한다.
또한, 심볼릭 링크나 디렉터리를 삭제할때도 사용 가능하다.
다음 예제에서는 test.log 파일을 제거한다. 파일이 없는경우 ok 로 아무런 처리하지 않는다.
- name : delete file file: path: /tmp/test.log state: absent |
- 여러 파일 삭제
with_items 를 사용하여 여러 파일을 삭제 할 수 있다.
- name : multiple delete file file: path: {{ item }} state: absent with_items: - test1.log - test2.log - test3.log |
- File glob 을 사용하여 파일 삭제
특정 패턴의 파일을 삭제 해야할 수 있습니다. Wildcard 는 이럴때 유용하긴하지만, 파일 모듈은
Wildcard 를 지원하지 않습니다.
이때 보통 command or shell 모듈에서 rm -rf 를 사용하는데, 파일이 있든 없든 오류를 던지지 않는다.
- name : wildcard file delete shell: rm -rf test*.log |
여기서 더 좋은 방법은 wildcard 가 해당되는 파일을 찾아서 각각 삭제 하는것이다.
다음 예제에서는 find 모듈을 사용하여 확장자가 .log 인 파일을 찾는다.
정규 표현식은 python 정규 표현익을 사용 할 수 있고, use_regex 매개변수를 true 로 설정하면 된다.
find 모듈은 패턴과 일치하는 모든 파일을 리턴하고 레지스터에 저장한다.
다음 작업에서는 'files_find' 레지스터를 사용하여 파일을 각각 하나씩 삭제한다.
- hosts: all tasks: - name: delete file wildcard find: paths: /etc/wild_card/example patterns: "^te.*.log" use:regex: true register: files_find - name: Ansible remove file wildcard file: path: "{{ item.path }}" state: absent with_items: "{{ files_find.files }}"
|
'ansible' 카테고리의 다른 글
[ansible] 교육 3일차 (0) | 2018.08.29 |
---|---|
[ansible] 교육 2일차 (0) | 2018.08.28 |
[ansible] 서버마다 작업해야할 파일이 다른경우 wildcard 처리까지. (0) | 2018.08.28 |
[ansible] 교육 1일차, basic & tip (0) | 2018.08.27 |
[ansible] ntp 설치 (0) | 2018.08.26 |