繁体   English   中英

在 Chef 的 ruby_block 中更改权限时如何执行“除非”条件?

[英]How to do an "unless" conditional when changing permissions in a ruby_block in chef?

在厨师中,我有一个ruby_block ,我正在其中更改目录的权限和所有权。 如果“ FileUtils.chown”语句尚未更改权限,我该如何检查权限仅在何处更改? 如果可能的话,我需要在 ruby_block 中执行此操作,因为我想在 ruby 块中有其他代码。 我的“除非”陈述是什么? 这是我的代码:

  ruby_block 'exe' do
    block do
      FileUtils.chmod 0755, '/make/news'
      FileUtils.chown('root', 'root', '/make/news')
    end
  end

正确的做法是使用 Chef 的文件资源:

file '/make/news' do
  mode 0755
  owner 'root'
  group 'root'
end

您正在尝试重写文件资源,这不是一个好主意。

使用 Chef Resource 的not_if Guard

Chef 资源共享许多通用功能。 ruby_block资源支持not_if属性作为条件保护 一般格式为:

ruby_block 'custom chmod' do
  block do
    #
  end

  not_if { true }
end

所以,你可以用这种方式编写你的逻辑,但它最终会咬你一口。 如果您使用单独的块以声明方式使用文件目录资源来管理权限,然后(如有必要)将其与来自需要给定权限集的其他块的通知链接起来,Chef 通常会工作得更好。 例如:

directory '/make/news' do
  mode  '0755'
  owner 'root'
  group 'root'
  action :nothing
end

ruby_block 'do something with news' do
  block do
    #
  end

  only_if { true }
  notifies :create, 'directory[/make/news]', :before
end

也就是说,配置管理的目标是不断收敛,所以我强烈质疑是否真的有必要首先在资源块之间创建这种相互依赖关系。 如果可能,每次都集中您的目录权限以强制执行它们。 虽然这可能会在您的配方中产生顺序依赖性,但从长远来看,更具声明性的方法通常会简化说明书和配方调试。 您的个人里程可能会有所不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM