我在运行 VirtualBox 5.2.16 和 vagrant 2.1.2 的 OSX 10.13.6 主机上
bento/ubuntu-18.04
我正在尝试使用两个配置程序来设置虚拟机:
1)内联 shell,获取 puppet 和系统上所需的模块
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 => 有效
- 仅安装 ES => 有效
- 像示例中那样安装两者 => postgres 失败,ES 有效
对我来说,postgres 似乎没有刷新 apt-get 缓存,因此没有“看到”该包并失败。
我已经运行了完整的配置--debug
(achtung:~1.1k 行)
=>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 包,所以没有创建用户,等等。
但我可以看到:
- 已添加源列表
- 已导入 GPG 密钥
- 但不知何故刷新没有传播到更新包
我尝试查找与缺少软件包更新相关的问题,并发现https://tickets.puppetlabs.com/browse/MODULES-2190
apt::source 不会强制执行“apt-get update”,因此第一次运行时会失败
事实上,我可以通过以下方式让它工作:
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 部分来自一个较旧的 puppet 安装,它可以正常工作,但我还没有弄清楚我是否在这里做错了什么。检查了https://forge.puppet.com/puppetlabs/postgresql已经几次了。
答案1
似乎我需要一个明确的依赖关系,以便在安装包之前不创建 DB 用户;这个改变修复了它:
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',
}
即在那里添加->
。
在以前的版本中肯定不是“需要”的,但现在明确说明这一点似乎很重要。