如何在库中包含 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/