Vagrant/Puppet ---确保:从现在改变失败:无法设置'存在确保:没有这样的文件或目录

Nyx*_*nyx 4 php apache apc puppet vagrant

我正在使用Vagrant和Puppet在Ubuntu上安装Apache和PHP.但是我在下面得到了错误vagrant up.我认为模板的路径是正确的,那么为什么错误呢?

我正在使用此处修改的设置以确保apt-get update在其他任何操作之前运行

错误

?[1;35merr: /Stage[main]/Php/File[/etc/php5/apache2/apc.ini]/ensure: change from absent to present failed: Could not set 'present on ensure: No such file or dir ectory - /etc/php5/apache2/apc.ini.puppettmp_6187 at /tmp/vagrant-puppet/modules -0/php/manifests/init.pp:44?[0m

?[1;35merr: /Stage[main]/Php/File[/etc/php5/apache2/php.ini]/ensure: change from absent to present failed: Could not set 'present on ensure: No such file or dir ectory - /etc/php5/apache2/php.ini.puppettmp_6687 at /tmp/vagrant-puppet/modules -0/php/manifests/init.pp:36?[0m

/modules/php/manifests/init.pp

file { "/etc/php5/apache2/php.ini":
  ensure => present,
  mode => 644,
  content => template("php/etc/php5/conf.d/php.ini.erb"),
  require => Package["php5"],
  notify => Service["apache"];
}

file { "/etc/php5/apache2/apc.ini":
  ensure => present,
  mode => 644,
  content => template("php/etc/php5/conf.d/apc.ini.erb"),
  require => [ Package["php5"], Package["php-apc"], Package["apache"] ],
  notify => Service["apache"];
}
Run Code Online (Sandbox Code Playgroud)

模板

  • /modules/php/templates/etc/php5/conf.d/apc.ini.erb
  • /modules/php/templates/etc/php5/conf.d/php.ini.erb

Vla*_*dan 11

只需确保目录/ etc/php5/apache2存在.

file { [ "/etc", "/etc/php5", "/etc/php5/apache2" ]:
   ensure => directory,
   before => File['/etc/php5/apache2/php.ini'],
}
Run Code Online (Sandbox Code Playgroud)

或者更少的Puppet-ish

exec { "ensure /etc/php5/apache2":
  command => "mkdir -p /etc/php5/apache2",
  creates => "/etc/php5/apache2"
}
Run Code Online (Sandbox Code Playgroud)

所有这些可能是因为对执行顺序的假设.

更多信息@ puppet docs

  • 谢谢弗拉丹,这是一个非常有用的例子。 (2认同)
  • 对于任何木偶新手 - `before => File['...']` 在 `File` 和 `[` 字符之间不能有空格。您将收到语法错误。 (2认同)

Val*_*lor 1

您确定 Package["php5"] 正在为您创建路径吗?

在我看来,它在抱怨,因为当它尝试从模板创建文件时 /etc/php5/apache2 文件夹不存在。

如果你想放弃你的 puppetmaster 端,你可以找到 puppetmaster 进程 id 并运行:

strace -v -f -ff -p $PID -o strace.log
Run Code Online (Sandbox Code Playgroud)

然后,再次运行代理并转到 puppetmaster 并运行:

grep "etc/php5/apache2" strace.log.*
Run Code Online (Sandbox Code Playgroud)

如果 puppetmaster 没问题,您将看到读取调用没有错误,否则您将看到 puppetmaster 在尝试打开文件时收到“没有此类文件或目录”。不管怎样,正如你一样,我不认为模板调用有问题,对我来说似乎没问题。