Назад | Перейти на главную страницу

Установка postgres через марионетку не обновляет список пакетов, установка не выполняется

Я нахожусь на хосте 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" и не работает при первом запуске

И действительно, мне удалось заставить его работать:

В конце концов, эта проблема связана с 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',
  }

Т.е. добавление -> прямо там.

Определенно не был «нужен» в предыдущих версиях, но теперь кажется важным, чтобы это было четко указано.