web-dev-qa-db-ja.com

パペットでファイルを作成する前にディレクトリを確認しますか?

最初のディレクトリが存在する場合にのみ作成されるディレクトリ/ファイルの関数を作成しようとしています。依存関係が失敗したためにスキップする必要はありません。

私は試しました この "onlyif"回避策 ですが、残念ながら、私の機能では動作しません。

$check_directory = file("/path/to/directory")
if($check_directory != '') {
    file{"/path/to/config":
        ensure  =>  directory,
        mode    =>  0755,
    }
    file{"/path/to/config/a.conf":
        ensure  =>  file,
        mode    =>  0755,
        content =>  template("config_template.conf"),
    }
}

エラーが発生しました:

Error: Is a directory - /path/to/directory

他のifステートメントを実行する方法はありますか?または任意のパラメータ?ありがとうございました。

4
skantana

a.confファイルリソースでrequireステートメントを使用するだけでよいはずです。

file{"/path/to/directory":
    ensure  =>  directory,
    mode    =>  0755,
}

file{"/path/to/config":
    ensure  =>  directory,
    mode    =>  0755,
}
file{"/path/to/config/a.conf":
    ensure  =>  file,
    mode    =>  0755,
    content =>  template("config_template.conf"),
    require => File["/path/to/directory"],
}

これにより、ファイルの前にディレクトリが作成されます。

3
Sven

@Svenの答えの精神は完全に正しいです。Puppetでbeforerequirenotifyなどを使用してリソースの依存関係を設定します。変更するのは、 defined() 関数を使用してテストします。

_file { '/tmp/foo':
  ensure => 'directory',
  mode   => '0755',
}
if defined(File['/tmp/foo']) {
  notice("/tmp/foo is defined! making /tmp/bar/baz")

  file { '/tmp/bar':
    ensure => 'directory',
    mode   => '0755',
  }

  file { '/tmp/bar/baz':
    ensure  => 'present',
    mode    => '0755',
    require => File['/tmp/bar'],
  }
}
_

他に役立つ2つのヒント:

  • Puppet 3.2+で "Future Parser" を有効にすると、_$a = File['/tmp/foo']['ensure']_のようなリソース属性にアクセスできます。これにより、_/tmp/foo_ファイルリソースのensure属性の値が変数_$a_に格納されます。これを調べることにした場合は、上記の例をif defined(File['/tmp/foo']) and File['/tmp/foo']['ensure'] == 'directory'(未テスト)を使用するように書き換えます。

  • これらの項目をパラメーターとしてクラスに渡す場合は、 in-puppet-how-can-i-access-a-variable-attribute-inside- a-defined-type

0
thankyour