Создавать файл, только если каталог существует?

Я пытаюсь написать модуль, в котором он создает файл, если каталог существует, иначе он ничего не должен делать.

class puppetmodule{
  exec { 'chk_dir_exists':
    command => 'test -d /usr/dir1',
    path    =>  ["/usr/bin","/usr/sbin", "/bin"],
  } ->

  file {'usr/dir1/test.txt':
    ensure => 'file',
    owner  => 'root',
    group  => 'root',
    mode   => '0750',
  }
}

Ниже приведена ошибка это бросает. Пожалуйста, посоветуйте мне это.

Ошибка: test -d / usr / dir1 вернул 1 вместо одного из [0]

5
задан 6 May 2016 в 09:20
2 ответа

Kukla son vəziyyətdən bəhs edir. Bir sənədin göstərdiyiniz və ya olmadığı vəziyyətlə mövcud olmasını təmin edə bilərsiniz. Bir az dallanma ( əgər ) məntiqi etməlisinizsə, Kukla bunu da dəstəkləyir. Sənədlərdəki şərtlərə baxın - https://docs.puppet.com/puppet/latest/reference/lang_conditional.html

$directory_exists = <insert logic here> 

if $directory_exists {
  file {'usr/dir1/test.txt':
    ensure => 'file',
    owner  => 'root',
    group  => 'root',
    mode   => '0750',
  }
}
0
ответ дан 3 December 2019 в 01:49

Примерно так будет работать:

  $dir = "/usr/dir1"

  exec { "chk_${dir}_exist":
    command => "true",
    path    =>  ["/usr/bin","/usr/sbin", "/bin"],
    onlyif  => "test -d ${dir}"
  }

  file {"${dir}/test.txt":
    ensure => file,
    owner  => 'root',
    group  => 'root',
    mode   => '0750',
    require => Exec["chk_${dir}_exist"],
  }

Объяснение:

onlyif => "test -d $ {dir}"

означает, что Exec ресурс создается только в том случае, если вывод test -d истинен.

require => Exec ["chk _ $ {dir} _exist"]

означает, что ресурс File создается, только если Exec ресурс существует.

Если каталог не существует, запуск марионетки выдаст ошибку, указывающую, что он не может создать т.е. файловый ресурс, потому что ресурс Exec не существует. Это ожидаемо и может быть безопасно проигнорировано, поскольку остальная часть каталога марионеток по-прежнему применяется.

Если каталог существует, создается и применяется ресурс File.

3
ответ дан 3 December 2019 в 01:49

Теги

Похожие вопросы