Vagrant / Puppet - 提供失败(MySQL不工作)

时间:2014-07-03 06:01:48

标签: vagrant puppet vagrantfile puppetlabs-mysql

我尝试了不同的虚拟盒子,我已经改变了大量的配置(可能重新创建,重新加载和重新配置了50-100次) - 它与Puppet的MySQL模块有关 - 这显然是为数万人工作的其他人,所以我做的事情是错误的。

VagrantFile

# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  # Every Vagrant virtual environment requires a box to build off of.
  config.vm.box = "puppetlabs/ubuntu-14.04-64-puppet"

  # Was necessary
  #vagrant plugin install vagrant-vbguest

  # Networking
  config.vm.network "forwarded_port", guest: 80, host: 8000
  # config.vm.network "private_network", ip: "192.168.33.10"

  # Synced folders
  config.vm.synced_folder ".", "/var/www"

  # Update
  config.vm.provision "shell", inline: "apt-get -y update"

  # Provisioning
   config.vm.provision :shell do |shell|
    shell.inline = "mkdir -p /etc/puppet/modules;
                    (puppet module install example42-puppi; true)
                    (puppet module install example42-apache; true)
                    (puppet module install example42-php; true)
                    (puppet module install puppetlabs-stdlib; true)
                    (puppet module install puppetlabs-mysql; true)
                    (puppet module install saz-vim; true)
                    (puppet module install saz-timezone; true)
                    (puppet module install puppetlabs-git; true)
                    (puppet module install tPl0ch-composer; true)
                     "
  end

  config.vm.provision "puppet" do |puppet|
      puppet.facter = {
        "fqdn" => "development.mydomain.com",
        "aliases" => "*.development.mydomain.com",
        "hostname" => "www",
        "docroot" => '/var/www/html/',
      }
      puppet.hiera_config_path = "manifests/hiera.yaml"
      puppet.working_directory = "/etc/puppet"
    end
end

Puppet文件: default.pp

###########################
# MySite Puppet Config    #
###########################
# OS          : Ubuntu 14 #
# Database    : MySQL 5   #
# Web Server  : Apache 2  #
# PHP version : 5.4       #
###########################

# Vim
class { 'vim': }

# Set Timezone
class { 'timezone':
    timezone => 'America/Chicago',
}

# Puppi
class { 'puppi': }

# Apache setup
class { "apache":
  puppi        => true,
  puppi_helper => "myhelper",
}

apache::vhost { $fqdn :
  docroot => $docroot,
  server_name => $fqdn,
  serveraliases => $aliases,
  priority            => '',
  template            => 'apache/virtualhost/vhost.conf.erb',
}

apache::module { 'rewrite': }
apache::module { 'headers': }

# PHP Extensions
class {"php":}

php::module { ['xdebug', 'mysql', 'curl', 'gd', 'mcrypt']:
  notify => Service['apache2']
}

# MySQL Server
class { '::mysql::server':
  package_ensure  => present,
  root_password     => '[root_password]',
  override_options  => { 'mysqld' => { 'default_time_zone' => 'America/Chicago' } },
}

class { 'mysql::client':}

mysql::db { '[db_name]':
  user     => '[user]',
  password => '[password]',
  host     => 'localhost',
  grant    => ['ALL'],
  charset => 'utf8',
}

exec { "database_import":
  timeout => 300,
  command => "/bin/gzip -dc /vagrant/manifests/provision.sql.gz | /usr/bin/mysql -u root -p[root_password]";
}

mysql::db { '[db_test]':
  user     => '[user_test]',
  password => '[password_test]',
  host     => 'localhost',
  grant    => ['ALL'],
  charset => 'utf8',
  sql  => "/var/www/test/db-schema.sql",
}

# Install Composer components
include composer

composer::exec { 'install':
    cmd                  => 'install',  # REQUIRED
    cwd                  => '/var/www', # REQUIRED
    dev                  => true, # Install dev dependencies
}

# Git
include git

# MySite Setup
file { $docroot:
  ensure  => 'directory',
}

$writeable_dirs = ["${docroot}cache/", "${docroot}cache/css/", "${docroot}cache/css/js/"]

file { $writeable_dirs:
  ensure => "directory",
  mode   => '0777',
  require => File[$docroot],
}

file { '/var/www/cl/':
  ensure  => directory
}

file { 'errors_log':
  path    => "/var/www/cl/errors.log",
  ensure  => present,
  mode    => 0777,
}

# Cron Jobs
cron { thirty_minutes:
  command => "/usr/bin/php ${docroot}cl-load.php crons/thirty_minutes/",
  user  => root,
  minute => '*/30'
}

cron { hourly:
  command => "/usr/bin/php ${docroot}cl-load.php crons/hourly/",
  user  => root,
  hour => '*',
  minute => 0,
}

cron { four_hours:
  command => "/usr/bin/php ${docroot}cl-load.php crons/four_hours/",
  user  => root,
  hour => '*/4',
  minute => 0,
}

cron { daily:
  command => "/usr/bin/php ${docroot}cl-load.php crons/daily/",
  user  => root,
  monthday => '*',
  hour => '0',
  minute => 0,
}

以下是我收到的错误消息(第一个):

==> ==> default: Error: Could not start Service[mysqld]: Execution of '/sbin/start mysql' returned 1:

1 个答案:

答案 0 :(得分:0)

似乎Puppet在安装MySQL服务器软件包之前尝试导入数据库。

请记住,Puppet并不关心您首先编写哪些资源,如果您需要按特定顺序管理某些内容,则必须明确声明关系。因此,在您的情况下,以下声明:

exec { "database_import":
  timeout => 300,
  command => "/bin/gzip -dc /vagrant/manifests/provision.sql.gz | /usr/bin/mysql -u root -p[root_password]",
  require => Class['::mysql::server']
}

可以为该资源设置正确的顺序。可能您需要以类似的方式声明其他关系。