ruby - 如何使用库中的 Chef 资源

标签 ruby oop resources chef-infra

如何在库中包含 Chef Directory 资源?执行下面的配方时,会分配变量但不会创建目录。我没有收到任何错误消息。

这是一个简化的例子。尝试通过将目录名称传递给库来创建多个目录。

# create directories  
#  /var/www/domain  
#  /var/www/domain/production  
#  /var/www/domain/staging  

图书馆

# directory library  
class DirectoryStructure
  attr_accessor :domain, :production, :staging

  def initialize(domain)
    @domain = "/var/www/#{domain}"
    @staging = "#@domain/staging"
    @production = "#@domain/production"
  end

  def create(dir_type,directory_path,username,group)
    dir = Chef::Resource::Directory.new(:create)
    dir.name(directory_path)
    dir.owner(username)
    dir.group(group)
    dir.mode(2750)
    dir
  end
end

Recipe

web_dirs = DirectoryStructure.new(domain)  
site_dirs.create(web_dirs.domain,username,deploy_group)  
site_dirs.create(web_dirs.production,username,deploy_group)  
site_dirs.create(web_dirs.staging,username,deploy_group)  

我已经尝试使用这个例子,但我显然遗漏了一些东西。
enter link description here https://docs.chef.io/lwrp_custom_resource_library.html

最佳答案

看起来您应该创建一个资源,一个 LWRP 或一个普通的 Ruby 类。在大多数情况下,LWRP 会更简单,在这种情况下可能就是您想要的。

cookbooks/mycook/resources/directory_structure.rb:

default_action :create
attribute :domain, name_attribute: true
attribute :owner
attribute :group

cookbooks/mycook/providers/directory_structure.rb:

action :create do
  directory "/var/www/#{@new_resource.domain}" do
    owner new_resource.owner
    group new_resource.group
  end
  directory "/var/www/#{@new_resource.domain}/production" do
    owner new_resource.owner
    group new_resource.group
  end

  directory "/var/www/#{@new_resource.domain}/staging" do
    owner new_resource.owner
    group new_resource.group
  end
end

cookbooks/mycook/providers/directory_structure.rb:

mycook_directory_structure 'example.com' do
  owner 'me'
  group 'mygroup'
end

关于ruby - 如何使用库中的 Chef 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27709289/

相关文章:

java - 迭代私有(private)数据成员

python - 如何在 python 中使用原始方法扩展继承的方法

exception - Slick2D可运行 jar (JarSplice)找不到声音 Assets ? “Resource not found”错误

ruby - 使用正则表达式匹配文本中的所有 IP 地址

java - 理解java中的类和变量

ruby-on-rails - 嵌套资源上路由不正确的 Rails Destroy 方法

android - 向现有资源数组添加新值

c# - 我将如何使用带有媒体播放器的包 uri 资源?

ruby-on-rails - Rails CanCanCan/RoleModel/Canard : limit to user doesn't work

ruby-on-rails - 在哪里放置 Rails Controller 的 Ruby 辅助方法?