我正在尝试使用Virtualbox和Vagrant构建虚拟环境。目标是能够从PC浏览器访问在虚拟机“服务器”上运行的应用程序,该应用程序与虚拟机“db”交互。
我设法创建了虚拟机,项目还可以。 这是目录结构:
├── MyProject
│ ├── environment
│ │ ├── Vagrantfile
│ │ ├── Manifest
│ │ │ ├── site.pp
│ │ ├── Modules
│ │ │ ├── Java
│ │ │ ├────── manifest
│ │ │ │ ├── init.pp
│ │ │ ├── Postgres
│ │ │ ├────── manifest
│ │ │ │ ├── init.pp
│ │ │ ├── Tomee
│ │ │ ├────── manifest
│ │ │ │ ├── init.pp
│ ├── Project
│ │ ├── postgres-driver
│ │ ├── tomee.xml
│ │ ├── app.war
我不确定我使用Puppet的方法是否正确。例如,我必须在虚拟机'web'上安装Java8。 在Vagrant文件中:
config.vm.provision :shell do |shell|
shell.inline = "mkdir -p /etc/puppet/modules;
puppet module install puppetlabs/apt"
end
config.vm.provision :puppet do |puppet|
puppet.manifests_path = "puppet/manifests"
puppet.manifest_file = "site.pp"
puppet.module_path = "puppet/modules"
然后在Java文件夹的init.pp中:
class java {
include apt
apt::ppa { 'ppa:openjdk-r/ppa':
ensure => present, }
exec { 'apt-update':
command => '/usr/bin/apt-get update',
require => [
Apt::Ppa['ppa:openjdk-r/ppa']
],
}
package { 'openjdk-8-jdk':
require => [
Exec['apt-update'],
Apt::Ppa['ppa:openjdk-r/ppa'],
],} }
这是使用Puppet的有效方法吗?或者我应该避免在Vagrantfile中使用shell命令来安装模块吗?
我还想知道Puppet如何从这个init.pp文件中下载mysql。没有安装木偶模块。
class mysql {
package { ['mysql-server']:
ensure => present;
}
service { 'mysql':
ensure => running,
require => Package['mysql-server'];
}
file { '/etc/mysql/my.cnf':
source => 'puppet:///modules/mysql/my.cnf',
require => Package['mysql-server'],
notify => Service['mysql'];
}
exec { 'set-mysql-password':
unless => 'mysqladmin -uroot -proot status',
command => "mysqladmin -uroot password root",
path => ['/bin', '/usr/bin'],
require => Service['mysql'];
}
exec { 'load-dynamic-sql':
command => 'mysql -u root -proot < /vagrant/sites/dynamic.sql',
path => ['/bin', '/usr/bin'],
require => Exec['set-mysql-password'];
}
}
答案 0 :(得分:0)
其中有一些问题。
可能有多种方法可以处理它,我也使用shell脚本来配置puppet模块的安装 - 这样的脚本看起来像
#!/bin/bash
mkdir -p /etc/puppet/modules;
if [ ! -d /etc/puppet/modules/puppetlabs-java ]; then
puppet module install puppetlabs-java --version 1.4.1
fi
在你的内联脚本之上,我检查了puppet模块的存在,所以如果我需要稍后运行配置,它将检测已经安装的模块。其次,我坚持使用特定的模块版本;如果你不是模块所有者,你不能确定进化,坚持使用一个版本给你更高的机会,供应仍然可以在几个月内工作,否则模块可能已经改变,你不知道为什么。
如上所述,还有其他方法:您可以直接从主机下载模块(但您也需要确保下载模块依赖性);你可以使用图书管理员,vagrant有插件来管理木偶图书管理员的依赖。
您可以编写自己的puppet模块,最终需要编写shell命令,但是如果您计划分发模块,则可能需要对OS系列进行测试,并根据操作系统编写不同的命令。
我仍然可能会建议使用专用模块;在您的情况下,puppetlabs/java完成工作
您的示例是设置和导入数据库的示例,而不是安装sql server,它可能在mysql-server
包中