web-dev-qa-db-ja.com

どこのようにファイルが存在しているのか確認しますか?

ファイルが/etc/に存在するかどうかを確認する必要があります。ファイルが存在する場合は、タスクをスキップする必要があります。これが私が使っているコードです:

- name: checking the file exists
  command: touch file.txt
  when: $(! -s /etc/file.txt)

file.txtが存在する場合は、タスクをスキップする必要があります。

76
E Dine Sh

最初に宛先ファイルが存在するかどうかを確認してから、その結果の出力に基づいて決定することができます。

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 
120
Arbab Nazar

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
20
Bruce P

ファイルが存在するときタスクをスキップするために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
16
Rajeshkanna

一般的には 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
12
udondan
vars:
  mypath: "/etc/file.txt"

tasks:
  - name: checking the file exists
    command: touch file.txt
    when: mypath is not exists
3
DreamUth

これらの多くの.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)解凍する必要があります

お役に立てれば

2
KCD