Vagrant/Puppet --- 确保: 从当前更改失败: 无法在确保上设置'present':没有这样的文件或目录

5
我正在使用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"];
}

Templates

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

不一定需要回答,但请确保您的虚拟机是最新的。这对我解决了问题。 - MaxPRafferty
2个回答

12

请确保目录 /etc/php5/apache2 存在。

file { [ "/etc", "/etc/php5", "/etc/php5/apache2" ]:
   ensure => directory,
   before => File['/etc/php5/apache2/php.ini'],
}

或稍微不那么像木偶

exec { "ensure /etc/php5/apache2":
  command => "mkdir -p /etc/php5/apache2",
  creates => "/etc/php5/apache2"
}

所有这些可能都是由于执行顺序的假设所致。

更多信息请参见Puppet文档


2
谢谢Vladan,这是一个非常有帮助的例子。 - Zouzias
2
对于任何刚接触 Puppet 的新手来说,before => File['...']File[ 字符之间不能有空格。否则会出现语法错误。 - Kyle Pittman

1
你确定 Package["php5"] 正在为你创建路径吗?
在它尝试从模板创建文件时,似乎是因为 /etc/php5/apache2 文件夹不存在而抱怨。
如果你想放弃你的 puppetmaster 端,你可以找到 puppetmaster 进程 ID 并运行:
strace -v -f -ff -p $PID -o strace.log

然后,再次运行代理程序,进入puppetmaster并运行:

grep "etc/php5/apache2" strace.log.*

如果 Puppetmaster 没有问题,您将看到读取调用而没有错误,否则当尝试打开文件时,您将看到 Puppetmaster 收到“没有这样的文件或目录”的消息。无论如何,我认为问题不在于模板调用,对我来说似乎没问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接