Puppet代码解释
Explanation of Puppet code
这是我的 Puppet 代码:
file { 'copy_files':
path => "/data/files",
source => "puppet:///modules/mymodule/repo",
recurse => true;
}
file {'chmod_script':
path => "/data/files/inner_folder/script",
ensure => 'present',
mode => "+x"
}
我想要的是复制我的文件夹 ('repo'),然后使一个脚本可执行。然而,使用上面的代码,我的脚本中的所有内容都被删除了(脚本只是空文件)。没有该附加资源 ('chmod_script') 文件的内容如预期的那样(未删除)。那我在这里做错了什么吗?我认为这可能是因为第二个资源('chmod_Script')执行得更早,但文档说 "Puppet applies resources in the order they’re declared in their manifest."。那么有人可以向我解释它应该是什么样子吗?
编辑
我决定使用这个脚本:
file { 'copy_files':
path => "/data/files",
source => "puppet:///modules/mymodule/repo",
recurse => true;
}
file {'chmod_script':
path => "/data/files/inner_folder/script",
source => "puppet:///modules/mymodule/repo/inner_folder/script",
ensure => 'present',
mode => "+x"
}
所以在更新模式的同时,我再次复制了内容。
您似乎运行正在从事未记录的行为。
当你运行puppet agent -t
时,Puppet Agent 请求 Puppet Master 编制目录,在所有条件相同的情况下,既然你询问了排序,它就会根据你的方式排序所有内容已将其写入清单(假设您有 Puppet 4 或比 2014 年初更新的 Puppet 3 版本)。
接下来,如果您通过 recurse
要求 Puppet 镜像远程目录,Puppet 实际上会修补已编译目录并为远程目录中的每个文件添加资源。 (并且 Puppet 继续遵守清单顺序。)
但这就是问题所在。不允许重复的资源,因此如果编译目录已经包含与将通过 recurse
添加的文件重叠的文件资源,Puppet 会决定保留哪一个。如果目录已通过特定声明包含文件资源,则目录中已有的资源将获胜。
因此,在您的情况下,Puppet 对远程内容一无所知
inner_folder/script
,并且您还没有指定任何内容,所以 Puppet 只是创建一个空文件。
(此外,请查看 Bug 2296 中的讨论以了解其他相关边缘情况下的行为。)
我同意 Matt Schuchard 的观点,根据您的要求,这里最好的做法是在远程目录中设置可执行标志 (+x
)。
除此之外,您还需要使用 source_permissions => use
(doc):
file { 'copy_files':
path => "/data/files",
source => "puppet:///modules/mymodule/repo",
source_permissions => use,
recurse => true,
}
这是我的 Puppet 代码:
file { 'copy_files':
path => "/data/files",
source => "puppet:///modules/mymodule/repo",
recurse => true;
}
file {'chmod_script':
path => "/data/files/inner_folder/script",
ensure => 'present',
mode => "+x"
}
我想要的是复制我的文件夹 ('repo'),然后使一个脚本可执行。然而,使用上面的代码,我的脚本中的所有内容都被删除了(脚本只是空文件)。没有该附加资源 ('chmod_script') 文件的内容如预期的那样(未删除)。那我在这里做错了什么吗?我认为这可能是因为第二个资源('chmod_Script')执行得更早,但文档说 "Puppet applies resources in the order they’re declared in their manifest."。那么有人可以向我解释它应该是什么样子吗?
编辑 我决定使用这个脚本:
file { 'copy_files':
path => "/data/files",
source => "puppet:///modules/mymodule/repo",
recurse => true;
}
file {'chmod_script':
path => "/data/files/inner_folder/script",
source => "puppet:///modules/mymodule/repo/inner_folder/script",
ensure => 'present',
mode => "+x"
}
所以在更新模式的同时,我再次复制了内容。
您似乎运行正在从事未记录的行为。
当你运行puppet agent -t
时,Puppet Agent 请求 Puppet Master 编制目录,在所有条件相同的情况下,既然你询问了排序,它就会根据你的方式排序所有内容已将其写入清单(假设您有 Puppet 4 或比 2014 年初更新的 Puppet 3 版本)。
接下来,如果您通过 recurse
要求 Puppet 镜像远程目录,Puppet 实际上会修补已编译目录并为远程目录中的每个文件添加资源。 (并且 Puppet 继续遵守清单顺序。)
但这就是问题所在。不允许重复的资源,因此如果编译目录已经包含与将通过 recurse
添加的文件重叠的文件资源,Puppet 会决定保留哪一个。如果目录已通过特定声明包含文件资源,则目录中已有的资源将获胜。
因此,在您的情况下,Puppet 对远程内容一无所知
inner_folder/script
,并且您还没有指定任何内容,所以 Puppet 只是创建一个空文件。
(此外,请查看 Bug 2296 中的讨论以了解其他相关边缘情况下的行为。)
我同意 Matt Schuchard 的观点,根据您的要求,这里最好的做法是在远程目录中设置可执行标志 (+x
)。
除此之外,您还需要使用 source_permissions => use
(doc):
file { 'copy_files':
path => "/data/files",
source => "puppet:///modules/mymodule/repo",
source_permissions => use,
recurse => true,
}