2016-06-07 108 views
2

假设我想确保我的虚拟机具有devstack。只有先前没有执行过使用puppet命令才能运行命令

exec{ "openstack": 
    command => "git clone https://git.openstack.org/openstack-dev/devstack", 
} 

这是我为它编写的傀儡代码,它第一次正常工作。现在我想检查一下。我只想在它尚未完成的情况下克隆存储库。如何做到这一点

回答

5

你说

exec{ 'openstack': 
    command => 'git clone https://git.openstack.org/openstack-dev/devstack', 
    cwd  => '/path/to/somewhere', 
    creates => '/path/to/somewhere/devstack', 
} 

现在,如果目录/path/to/somewhere/devstack存在克隆命令将不会运行。

+0

我总是忘记'创造',但是,然后再次,我不经常使用exec或创建文件。 – ptierno

+0

非常感谢亚历克斯! –

+0

你也可以在'git'上使用'-C'来移除'cwd'属性。这是克隆到所需目录的两个答案中唯一的一个。 –

4
exec { "openstack": 
    command => 'git clone https://git.openstack.org/openstack-dev/devstack /path/to/devstack", 
    unless => 'test -d /path/to/devstack' 
} 

它是一个非常hacky的方式来处理这个。你应该看看vcsrepo木偶模块https://github.com/puppetlabs/puppetlabs-vcsrepo

+0

感谢您的回答。你可以建议一些很好的教程,网站或书籍来学习木偶吗?文件太混乱了。 –

+0

https://puppet.com/resources/books – ptierno

+0

说实话。当涉及到使用exec资源时,Alex Harvey对您的问题有更好的答案。不过我仍然觉得'vcsrepo'资源可能更适合。 – ptierno