Class: ChefCLI::Policyfile::DSL
Constant Summary
collapse
- RUN_LIST_ITEM_COMPONENT =
/^[.[:alnum:]_-]+$/
Instance Attribute Summary collapse
Instance Method Summary
collapse
#cache_path, #policyfile_expanded_path, #policyfile_filename, #policyfile_lock_expanded_path, #relative_paths_root
Constructor Details
#initialize(storage_config, chef_config: nil) ⇒ DSL
Returns a new instance of DSL.
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/chef-cli/policyfile/dsl.rb', line 48
def initialize(storage_config, chef_config: nil)
@name = nil
@errors = []
@run_list = []
@named_run_lists = {}
@included_policies = []
@default_source = [ NullCookbookSource.new ]
@cookbook_location_specs = {}
@storage_config = storage_config
@chef_config = chef_config
@node_attributes = Chef::Node::Attribute.new({}, {}, {}, {})
end
|
Instance Attribute Details
#chef_config ⇒ Object
Returns the value of attribute chef_config.
47
48
49
|
# File 'lib/chef-cli/policyfile/dsl.rb', line 47
def chef_config
@chef_config
end
|
#cookbook_location_specs ⇒ Object
Returns the value of attribute cookbook_location_specs.
39
40
41
|
# File 'lib/chef-cli/policyfile/dsl.rb', line 39
def cookbook_location_specs
@cookbook_location_specs
end
|
#default_source(source_type = nil, source_argument = nil, &block) ⇒ Object
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
# File 'lib/chef-cli/policyfile/dsl.rb', line 87
def default_source(source_type = nil, source_argument = nil, &block)
return @default_source if source_type.nil?
case source_type
when :community, :supermarket
(source_argument, &block)
when :delivery_supermarket
set_default_delivery_supermarket_source(source_argument, &block)
when :chef_server
set_default_chef_server_source(source_argument, &block)
when :chef_repo
set_default_chef_repo_source(source_argument, &block)
when :artifactory
set_default_artifactory_source(source_argument, &block)
else
@errors << "Invalid default_source type '#{source_type.inspect}'"
end
end
|
#errors ⇒ Object
Returns the value of attribute errors.
36
37
38
|
# File 'lib/chef-cli/policyfile/dsl.rb', line 36
def errors
@errors
end
|
#included_policies ⇒ Object
Returns the value of attribute included_policies.
40
41
42
|
# File 'lib/chef-cli/policyfile/dsl.rb', line 40
def included_policies
@included_policies
end
|
#name(name = nil) ⇒ Object
62
63
64
65
66
67
|
# File 'lib/chef-cli/policyfile/dsl.rb', line 62
def name(name = nil)
unless name.nil?
@name = name
end
@name
end
|
#named_run_lists ⇒ Object
Returns the value of attribute named_run_lists.
42
43
44
|
# File 'lib/chef-cli/policyfile/dsl.rb', line 42
def named_run_lists
@named_run_lists
end
|
#node_attributes ⇒ Object
Returns the value of attribute node_attributes.
43
44
45
|
# File 'lib/chef-cli/policyfile/dsl.rb', line 43
def node_attributes
@node_attributes
end
|
#run_list(*run_list_items) ⇒ Object
69
70
71
72
73
74
75
76
|
# File 'lib/chef-cli/policyfile/dsl.rb', line 69
def run_list(*run_list_items)
run_list_items = run_list_items.flatten
unless run_list_items.empty?
validate_run_list_items(run_list_items)
@run_list = run_list_items
end
@run_list
end
|
#storage_config ⇒ Object
Returns the value of attribute storage_config.
45
46
47
|
# File 'lib/chef-cli/policyfile/dsl.rb', line 45
def storage_config
@storage_config
end
|
Instance Method Details
#cookbook(name, *version_and_source_opts) ⇒ Object
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
# File 'lib/chef-cli/policyfile/dsl.rb', line 106
def cookbook(name, *version_and_source_opts)
source_options =
if version_and_source_opts.last.is_a?(Hash)
version_and_source_opts.pop
else
{}
end
constraint = version_and_source_opts.first || ">= 0.0.0"
spec = CookbookLocationSpecification.new(name, constraint, source_options, storage_config)
if ( existing_source = @cookbook_location_specs[name] )
err = "Cookbook '#{name}' assigned to conflicting sources\n\n"
err << "Previous source: #{existing_source.source_options.inspect}\n"
err << "Conflicts with: #{source_options.inspect}\n"
@errors << err
else
@cookbook_location_specs[name] = spec
@errors += spec.errors
end
end
|
#default ⇒ Object
156
157
158
|
# File 'lib/chef-cli/policyfile/dsl.rb', line 156
def default
@node_attributes.default
end
|
#eval_policyfile(policyfile_string) ⇒ Object
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
|
# File 'lib/chef-cli/policyfile/dsl.rb', line 164
def eval_policyfile(policyfile_string)
@policyfile_filename = policyfile_filename
instance_eval(policyfile_string, policyfile_filename)
validate!
self
rescue SyntaxError => e
@errors << "Invalid Ruby syntax in Policyfile '#{policyfile_filename}':\n\n#{e.message}"
rescue SignalException, SystemExit
raise
rescue Exception => e
error_message = "Evaluation of policyfile '#{policyfile_filename}' raised an exception\n"
error_message << " Exception: #{e.class.name} \"#{e}\"\n\n"
trace = filtered_bt(policyfile_filename, e)
error_message << " Relevant Code:\n"
error_message << " #{error_context(policyfile_string, policyfile_filename, e)}\n\n"
unless trace.empty?
error_message << " Backtrace:\n"
error_message << filtered_bt(policyfile_filename, e).inject("") { |formatted_trace, line| formatted_trace << " #{line}\n" }
end
@errors << error_message
end
|
#include_policy(name, source_options = {}) ⇒ Object
128
129
130
131
132
133
134
135
136
137
138
139
|
# File 'lib/chef-cli/policyfile/dsl.rb', line 128
def include_policy(name, source_options = {})
if ( existing = included_policies.find { |p| p.name == name } )
err = "Included policy '#{name}' assigned conflicting locations or was already specified\n\n"
err << "Previous source: #{existing.source_options.inspect}\n"
err << "Conflicts with: #{source_options.inspect}\n"
@errors << err
else
spec = PolicyfileLocationSpecification.new(name, source_options, storage_config, chef_config)
included_policies << spec
@errors += spec.errors
end
end
|
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
# File 'lib/chef-cli/policyfile/dsl.rb', line 141
def metadata
cookbook_root = storage_config.relative_paths_root
unless File.exist?(File.join(cookbook_root, "metadata.rb")) || File.exist?(File.join(cookbook_root, "metadata.json"))
raise PolicyfileMissingCookbookMetadata.new(cookbook_root)
end
begin
cookbook_name = CookbookMetadata.from_path(cookbook_root).cookbook_name
rescue Exception => e
raise PolicyfileBadCookbookMetadata.new(cookbook_root, e)
end
name cookbook_name if name.nil?
cookbook(cookbook_name, path: ".")
end
|
#named_run_list(name, *run_list_items) ⇒ Object
78
79
80
81
82
83
84
85
|
# File 'lib/chef-cli/policyfile/dsl.rb', line 78
def named_run_list(name, *run_list_items)
run_list_items = run_list_items.flatten
unless run_list_items.empty?
validate_run_list_items(run_list_items, name)
@named_run_lists[name] = run_list_items
end
@named_run_lists[name]
end
|
#override ⇒ Object
160
161
162
|
# File 'lib/chef-cli/policyfile/dsl.rb', line 160
def override
@node_attributes.override
end
|