Vagrant puppet在pp exec中更改文件夹的所有者

时间:2012-12-13 15:18:37

标签: puppet vagrant chown

我正在尝试开发CakePHP应用程序,我正在使用Vagrant来运行测试环境。但是,我在浏览器中收到此错误

Warning (2):
  session_start() [http://php.net/function.session-start]:
    open(/var/lib/php/session/sess_speva7ghaftl8n98r9id5a7434, O_RDWR) failed:
      Permission denied (13) [CORE/Cake/Model/Datasource/CakeSession.php, line 614]

我可以通过SSH连接到vm并执行

来消除错误
[vagrant@myserver ~]$ sudo su -
[root@myserver ~]# chown -R vagrant. /var/lib/php/session/

我不想每次重启vm时都这样做,所以我尝试将其添加到myserver.pp

exec { 'chown':
  command => 'chown -R vagrant. /var/lib/php/session/',
  path => '/bin',
  user => 'root'
}

但启动vm时出错...

err:
/Stage[main]/Myserver/Exec[chown]/returns: change from notrun to 0 failed:
  chown -R vagrant. /var/lib/php/session/
  returned 1 instead of one of [0] at /tmp/vagrant-puppet/manifests/myserver.pp:35

我无法找到有关如何在互联网上使用exec的任何有用示例,我之前从未使用过Vagrant或Puppet,所以上面的代码只是我能想到的最好的猜测,并且如果这是一个简单的解决办法,我会道歉。

我已在vm中使用which chown验证路径为/bin,并且该命令与我自己在vm中运行时的命令完全相同。我认为这是导致问题的用户。我有那条线吗?甚至可以从.pp文件中以root身份执行命令吗?

1 个答案:

答案 0 :(得分:4)

使用exec时,通常必须输入执行命令的完整路径。所以,如果你将命令改为

exec { 'chown':
  command => '/bin/chown -R vagrant:vagrant /var/lib/php/session/',
  path => '/bin',
  user => 'root'
}

它应该工作imo。

但是,这取决于您安装应用程序的方式。如果应用程序的设置/启动也使用Puppet进行管理,您还可以使用Puppet管理您感兴趣的目录,例如

file { "/var/lib/php/session" : 
  ensure => directory,
  group => "vagrant",
  owner => "vagrant",
  recurse => true,
}

在您开始使用应用之前。这将是Puppet方式更多,因为您管理一个资源然后而不是执行命令。但是,通常/ var / lib / ...不应该由root以外的其他人拥有。

因此,您应该了解应用程序的启动方式,并以另一个用户或root身份开始。如果以exec启动,则可以添加其他属性

user => root

它也应该这样做。