cwd оценивается раньше, только если в exec - puppet 5.5.12 - PullRequest
2 голосов
/ 04 июля 2019

В Puppet 5.5.0 это работало нормально, но в Puppet 5.5.12 оно больше не работает:

exec { 'example' :
    command     =>  "date",
    cwd     =>  "/fu",
    onlyif  =>  "ls /fu",
    path    => ['/usr/bin', '/usr/sbin', '/bin', ],
}

Сообщение об ошибке: Не удалось оценить: рабочий каталог / fu не существует!

Так что каким-то образом cwd теперь оценивается перед тем, как сделать последнее бесполезным.Любая идея, откуда это в этом минорном выпуске с 5.5.0 до 5.5.12?Есть ли ошибка или предполагаемое поведение?Я ничего не мог найти до сих пор.

Любой вклад приветствуется:)

Ответы [ 2 ]

2 голосов
/ 04 июля 2019

Так что теперь cwd оценивается до того, как последнее бесполезно. Любая идея, откуда это в этом небольшом выпуске с 5.5.0 до 5.5.12?

Это вопрос Кукол PUP-9194 , который, как они утверждают, исправляет регрессию. Об этом сообщалось в отношении Puppet 6, и оно задокументировано в примечаниях к выпуску Puppet 6.0.2. В ветке комментариев на тикете сообщается, что исправление было также применено к базе кодов Puppet 5. Похоже, что в серию Puppet 5 не было добавлено примечание к выпуску, но время для Puppet 5.5.7 подходит правильно.

Есть ли ошибка или предполагаемое поведение? Я не мог найти что-нибудь до сих пор.

Очевидно, что изменение поведения было преднамеренным; это старое поведение, которое считалось ошибочным. Здесь я отмечаю, что этот вывод, кажется, основан на исторической практике, а не на документации (поэтому поведение, на которое вы полагались, отличалось от даже более старого поведения). Документы для onlyif указывают несколько атрибутов Exec, которые применяются как к основным command, так и к onlyif командам, и cwd среди них нет.

1 голос
/ 04 июля 2019

Боюсь, это намеренное поведение.From https://puppet.com/docs/puppet/5.5/types/exec.html#exec-attribute-cwd:

cwd

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

Не могли бы вы перекодировать как-то так?

exec { 'example' :
    command     =>  "cd /fu && date",
    onlyif  =>  "[ -d /fu ]",
    path    => ['/usr/bin', '/usr/sbin', '/bin', ],
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...