gpt4 book ai didi

deployment - puppet 中是否有迭代器和循环?

转载 作者:行者123 更新时间:2023-12-03 07:55:30 24 4
gpt4 key购买 nike

当我定义(?)一个资源时,例如为确保目录结构,是否有可用的循环?

像那样:

  for X in [app1,app2] do:
file { '/opt/app/' + X:
ensure => directory,
owner => 'root',
group => 'root',
mode => '0644',
}

我有几十个目录,我真的厌倦了在 puppet 中声明它。这需要 15 LOC 的 bash。

有任何想法吗?

最佳答案

旧版本的 puppet 语言不支持循环。

但是您可以使用数组而不是简单的字符串作为标题,并使用相同的参数同时声明多个资源:

$b = '/opt/app'
file { [ "$b/app1", "$b/app2" ]:
ensure => directory,
owner => 'root',
group => 'root',
mode => 0644,
}

您还可以通过以 ; 结尾每个资源来声明许多具有不同参数的相同类型的资源。 ,这比重复 file 更紧凑一些和 { s 和 } s:
file {
[ "$b/app1", "$b/app2" ]:
ensure => directory,
owner => 'root',
group => 'root',
mode => 0755;
[ "$b/app1/secret", "$b/app2/secret" ]:
ensure => directory,
owner => 'root',
group => 'root',
mode => 0700;
}

在文件的特定情况下,您可以设置源并使用递归:
file { "/opt/app":
source => "puppet:///appsmodule/appsdir",
recurse => true;
}

(这需要有一个目录结构的源供 puppet 用作源)

您可以 define a new resource type多次重用部分参数:
define foo {
file {
"/tmp/app/${title}":
ensure => directory,
owner => 'root',
mode => 0755;
"/tmp/otherapp/${title}":
ensure => link,
target => "/tmp/app/${title}",
require => File["/tmp/app/${title}"]
}
}

foo { ["app1", "app2", "app3", "app4"]: }

从 Puppet 2.6 开始,有一个 Ruby DSL 可用,它具有您可能要求的所有循环功能: http://www.puppetlabs.com/blog/ruby-dsl/ (不过,我从未使用过它)。在 Puppet 3.2 中,他们引入了一些 experimental loops ,但是这些功能可能会在以后的版本中更改或消失。

关于deployment - puppet 中是否有迭代器和循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6399922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com