23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
# File 'lib/cheffish.rb', line 23
def self.node_attributes(klass)
klass.class_eval do
attribute :name, :kind_of => String, :regex => Cheffish::NAME_REGEX, :name_attribute => true
attribute :chef_environment, :kind_of => String, :regex => Cheffish::NAME_REGEX
attribute :run_list, :kind_of => Array attribute :attributes, :kind_of => Hash
attribute :complete, :kind_of => [TrueClass, FalseClass]
attribute :raw_json, :kind_of => Hash
attribute :chef_server, :kind_of => Hash
attr_accessor :attribute_modifiers
def attribute(attribute_path, value=NOT_PASSED, &block)
@attribute_modifiers ||= []
if value != NOT_PASSED
@attribute_modifiers << [ attribute_path, value ]
elsif block
@attribute_modifiers << [ attribute_path, block ]
else
raise "attribute requires either a value or a block"
end
end
def tag(*tags)
attribute 'tags' do |existing_tags|
existing_tags ||= []
tags.each do |tag|
if !existing_tags.include?(tag.to_s)
existing_tags << tag.to_s
end
end
existing_tags
end
end
def remove_tag(*tags)
attribute 'tags' do |existing_tags|
if existing_tags
tags.each do |tag|
existing_tags.delete(tag.to_s)
end
end
existing_tags
end
end
def tags(*tags)
if tags.size == 0
attribute('tags')
else
tags = tags[0] if tags.size == 1 && tags[0].kind_of?(Array)
attribute 'tags', tags.map { |tag| tag.to_s }
end
end
attr_accessor :run_list_modifiers
attr_accessor :run_list_removers
def recipe(*recipes)
if recipes.size == 0
raise ArgumentError, "At least one recipe must be specified"
end
@run_list_modifiers ||= []
@run_list_modifiers += recipes.map { |recipe| Chef::RunList::RunListItem.new("recipe[#{recipe}]") }
end
def role(*roles)
if roles.size == 0
raise ArgumentError, "At least one role must be specified"
end
@run_list_modifiers ||= []
@run_list_modifiers += roles.map { |role| Chef::RunList::RunListItem.new("role[#{role}]") }
end
def remove_recipe(*recipes)
if recipes.size == 0
raise ArgumentError, "At least one recipe must be specified"
end
@run_list_removers ||= []
@run_list_removers += recipes.map { |recipe| Chef::RunList::RunListItem.new("recipe[#{recipe}]") }
end
def remove_role(*roles)
if roles.size == 0
raise ArgumentError, "At least one role must be specified"
end
@run_list_removers ||= []
@run_list_removers += roles.map { |recipe| Chef::RunList::RunListItem.new("role[#{role}]") }
end
end
end
|