Я нахожусь на хосте OSX 10.13.6, на котором запущен VirtualBox 5.2.16 и бродяга 2.1.2
Я пытаюсь настроить виртуальную машину с bento/ubuntu-18.04
используя два провайдера:
1) встроенная оболочка, чтобы получить марионетку и необходимые модули в системе
apt-get install puppet
puppet module install puppetlabs-postgresql
что дает мне
/etc/puppet/code/modules
└─┬ puppetlabs-postgresql (v5.7.0)
├── puppetlabs-apt (v4.5.1)
├── puppetlabs-concat (v4.2.1)
└── puppetlabs-stdlib (v4.25.1)
2) марионеточное обеспечение
config.vm.provision "puppet" do |puppet|
puppet.manifests_path = "vagrant/puppet/manifests/"
puppet.options = ['--verbose', '--hiera_config /vagrant/vagrant/hiera.yaml']
puppet.manifest_file = "test.pp"
end
И, помимо файлов, это мой самый минималистичный манифест, вызывающий проблему:
class testproject {
class { 'postgresql::globals':
version => '9.6',
manage_package_repo => true,
encoding => 'UTF8',
} ->
class { 'postgresql::server':
package_ensure => latest,
ip_mask_allow_all_users => '0.0.0.0/0',
listen_addresses => '*',
} ->
postgresql::server::config_entry { 'max_parallel_workers_per_gather':
value => '2',
}
class { 'postgresql::server::contrib':
package_ensure => latest,
}
postgresql::server::db { 'testdb':
user => 'testdb',
password => postgresql_password('testdb', 'testdb'),
encoding => 'UTF8',
}
apt::source { 'elasticsearch':
location => 'https://artifacts.elastic.co/packages/5.x/apt',
release => 'stable',
repos => 'main',
key => {
id => '46095ACC8548582C1A2699A9D27D666CD88E42B4',
source => '/vagrant/vagrant/puppet/keys/elasticsearch.gpg',
},
include => {
src => false,
},
}
package { 'elasticsearch':
ensure => '5.3.0',
require => Apt::Source['elasticsearch'],
notify => Service['elasticsearch'],
}
service { 'elasticsearch':
ensure => running,
enable => true,
hasstatus => true,
hasrestart => true,
require => Package['elasticsearch'],
}
file { '/etc/elasticsearch/jvm.options':
source => '/vagrant/vagrant/conf/etc-elasticsearch-jvm.options',
owner => root,
group => elasticsearch,
mode => '0660',
require => [
Package['elasticsearch'],
],
notify => Service['elasticsearch'],
}
}
class { testproject: }
Он устанавливает postgres, настраивает пользователя и устанавливает ElasticSearch 5.3. Проблема:
Мне кажется, что postgres не обновляет кеш apt-get и, следовательно, не «видит» пакет и не работает.
Я выполнил полную подготовку с --debug
(Ахтунг: ~ 1,1 тыс. строк)
=> https://gist.github.com/mfn/8656324a8dcd736d45035ea8cd0ee74a
Первая ошибка в строке 1008:
Error: /Stage[main]/Testproject/Postgresql::Server::Db[testdb]/Postgresql::Server::Role[testdb]/Postgresql_psql[CREATE ROLE testdb ENCRYPTED PASSWORD ****]: Could not evaluate: Error evaluating 'unless' clause, returned pid 14088 exit 1: 'Error: Could not execute posix command: Invalid group: postgres
Неверная группа: postgres
Потому что ни один из необходимых пакетов postgres не был установлен, пользователи не были созданы и т. Д.
Но я вижу это:
Я попытался найти проблемы, связанные с отсутствующим обновлением пакета, и нашел https://tickets.puppetlabs.com/browse/MODULES-2190
apt :: source не вызывает "обновление apt-get" и не работает при первом запуске
И действительно, мне удалось заставить его работать:
apt-get update
в ВМВ конце концов, эта проблема связана с https://github.com/puppetlabs/puppetlabs-apt#adding-new-sources-or-ppas
Я попытался изменить установку postgres, чтобы она зависела от такого обновления, но ничего не изменилось:
class { 'postgresql::server':
package_ensure => latest,
ip_mask_allow_all_users => '0.0.0.0/0',
listen_addresses => '*',
require => Class['apt::update']
} ->
Я также попытался добавить пример из документации, но без эффекта:
class testproject {
Class['apt::update'] -> Package <| provider == 'apt' |>
class { 'postgresql::globals':
Мне также интересно, что мне здесь не хватает более явных зависимостей ресурсов. Часть postgres взята из более старой установки марионетки, где она работала, но мне еще предстоит выяснить, сделал ли я что-то здесь не так. Проверено с https://forge.puppet.com/puppetlabs/postgresql уже несколько раз.
Кажется, мне нужна явная зависимость, чтобы не создавать пользователя БД до установки пакета; это изменилось, исправлено:
class { 'postgresql::server':
package_ensure => latest,
ip_mask_allow_all_users => '0.0.0.0/0',
listen_addresses => '*',
} ->
postgresql::server::db { 'testdb':
user => 'testdb',
password => postgresql_password('testdb', 'testdb'),
encoding => 'UTF8',
}
Т.е. добавление ->
прямо там.
Определенно не был «нужен» в предыдущих версиях, но теперь кажется важным, чтобы это было четко указано.