Марионеточный агент в моем Windows VMs не выполняет сценарии PowerShell. Я протестировал его с очень простым сценарием также. Сценарий хранится на диске C как тест ps1. Его содержание следующие:
"$(Get-Date -format F)" | Out-File C:\z.txt -Encoding ASCII
Когда я выполняю это как./test.ps1 от консоли PowerShell вручную, она хорошо работает, и файл z.txt создается. Но по некоторым причинам Марионеточный агент не выполняет это. Содержание моего site.pp:
exec { "Run Script":
command => 'C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -Executionpolicy Unrestricted -File c:/test.ps1',
logoutput => true,
refreshonly => true,
}
И вывод "марионеточного агента-t" от самого VM:
C:\Users\Administrator>puppet agent -t
Info: Retrieving pluginfacts
Warning: Copying owner/mode/group from the source file on Windows is deprecated;
use source_permissions => ignore.
(at C:/Program Files (x86)/Puppet Labs/Puppet/puppet/lib/puppet/type/file/sou
rce.rb:120:in `each')
Info: Retrieving plugin
Info: Caching catalog for f9881998-7fdf-4e96-a784-d9690fcd5495
Info: Applying configuration version '1410182959'
Notice: Finished catalog run in 0.42 seconds
Таким образом, мне кажется, что нет никакой ошибки нигде, но тем не менее сценарий PowerShell не работает. Что я делаю неправильно?
Ресурс Puppet типа exec
не синхронизируется сам по себе. Он только «обновляется», что означает, что команда запускается только в том случае, если ресурс получает сигнал от другого ресурса, который успешно переходит из несинхронизированного состояния.
file { 'C:\not-yet-existent':
ensure => 'file',
notify => Exec['Run Script'],
}
Это не очень хороший режим работы, потому что если ваш сценарий не работает для по любой причине Марионетка, скорее всего, не узнает о создании нового события,потому что ресурс файл
теперь синхронизирован.
Лучше не использовать refreshonly => true
, а вместо этого дать Puppet подсказку, чтобы узнать, нужно ли выполнить команду или не. Тип exec
может сделать это через свой onlyif
и , если не
параметры , и часто полезный (как в вашем случае) создает
параметр.
exec { "Run Script":
command => 'C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -Executionpolicy Unrestricted -File c:/test.ps1',
logoutput => true,
creates => 'C:\z.txt',
}