Мы переходим на более поздние версии марионетки.
Новая версия:
# puppet --version
4.5.2
Существующая версия:
#puppet-3.8.7
Наш существующий site.pp выглядит следующим образом:
#A default site.pp to do a quick test run
import "../classes/*"
import "../nodes/*"
file { 'testfile':
path => '/home/test/testfile',
ensure => present,
mode => 0755,
content => "A test file to check a different manifestdir" ,
}
Exec { path => ["/bin" , "/sbini/", "/usr/bin" , "/usr/sbin/"] }
Теперь, когда мы переходим на Puppet 4
, я думаю, что нижеприведенная функция импорта для включения нескольких файлов pp не будет работать здесь, в Puppet 4
import "../classes/*"
import "../nodes/*"
Если я не ошибаюсь, я могу скопировать все манифесты из каталога классов и узлов в приведенный ниже каталог манифеста.
/apps/puppetlabs/code/environments/production/manifests/site.pp
Подскажите, пожалуйста, как обновить манифесты до более поздних версий Puppet, или нет проблем с совместимостью?
Если я не ошибаюсь, я могу скопировать все манифесты из каталога классов и узлов в приведенный ниже каталог манифеста.
Да, каталог манифеста будет импортирован рекурсивно, так что это лучшее, что можно сделать.
Подскажите, пожалуйста, как обновить манифесты до более поздних версий Puppet, или нет проблем с совместимостью?
Есть много тонких изменений, поэтому проверьте свои манифесты на Puppet 3 с будущим парсером (--parser future
), чтобы увидеть, насколько хорошо они работают.
Начать с Puppet 3.x до 4.x: подготовьтесь к обновлению, примечания к выпуску и Прекращение поддержки Puppet 3.8.
Ниже приведены изменения, которые мне пришлось внести для переноса кода с Puppet на Puppet 4.
Код куклы 3:
Мой site.pp использовал функцию импорта для вызова других манифестов, как показано ниже.
import "../classes/*"
import "../nodes/*"
Код куклы 4:
Каталог скопированных узлов и классов в каталог манифестов, как указано в `puppet config print manifest '
# puppet config print manifest
/etc/puppetlabs/code/environments/production/manifests
# ls /etc/puppetlabs/code/environments/production/manifests
classes nodes
Нет требований для site.pp
в моем случае, поскольку у нас есть манифесты для нескольких узлов. Помещение классов и узлов в каталог манифестов приведет к тому, что марионетка будет рекурсивно читать каждый из узлов манифестов node.
Изменение синтаксиса при написании шаблонов Puppet
Код куклы 3:
<%= ipaddress %> dev.example.com
При применении на Puppet 4 возникала следующая ошибка
Call, Failed to parse template /etc/puppet/templates/Node-002/hosts.erb:
Filepath: /etc/puppet/templates/Node-002/hosts.erb:
Line: 1
Detail: undefined local variable or method 'ipaddress' for #<Puppet::Parser::TemplateWrapper:0x007ffa98fb55c8>
Код куклы 4:
Обновил код следующим образом, и после этого манифесты применялись нормально
<%= @ipaddress %> node-002.example.com
- Представление числового значения атрибута
Код куклы 3:
` file { "/etc/sudoers":
path => "/etc/sudoers",
...
mode => 440,
} `
Это не удалось с ошибкой ниже
`Error: Failed to apply catalog: Parameter mode failed on File[/etc/sudoers]: The file mode specification must be a string, not 'Fixnum' at /etc/puppetlabs/code/environments/production/manifests/classes/user_default.pp:7`
Код куклы 4: Исправление заключалось в том, чтобы поместить значение режима в кавычки
`file { "/etc/sudoers":
path => "/etc/sudoers",
...
mode => "440",
} `
Это основные проблемы, с которыми я столкнулся при переходе на Puppet 4. После этого миграция прошла гладко.