ファイルが/etc/
に存在するかどうかを確認する必要があります。ファイルが存在する場合は、タスクをスキップする必要があります。これが私が使っているコードです:
- name: checking the file exists
command: touch file.txt
when: $(! -s /etc/file.txt)
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: stat_result.stat.exists == False
stat モジュールはこれを行い、ファイルに関する他の多くの情報を取得します。サンプルドキュメントから:
- 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 module でこれを行います。しかし コマンドモジュール にはcreates
オプションがあり、これがとても簡単になります。
- name: touch file
command: touch /etc/file.txt
args:
creates: /etc/file.txt
あなたのタッチコマンドはほんの一例だと思いますか?ベストプラクティスは、何もチェックせずに、正しいモジュールを使ってその仕事を任せることです。そのため、ファイルが存在することを確認したい場合は、ファイルモジュールを使用します。
- 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
ただし、1つのモジュールを使用できない場合は、前のタスクの結果を登録および確認できるかどうかも調査してください。例えば.
# 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)解凍する必要があります
お役に立てれば