簡體   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