-
Notifications
You must be signed in to change notification settings - Fork 575
(#20548) Allow an array of resource titles to be passed into the ensure_... #152
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
e08734a
de253db
b33cc24
d38bce0
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -19,17 +19,27 @@ | |
| this function will attempt to recreate the resource leading to a duplicate | ||
| resource definition error. | ||
|
|
||
| An array of resources can also be passed in and each will be created with | ||
| the type and parameters specified if it doesn't already exist. | ||
|
|
||
| ensure_resource('user', ['dan','alex'], {'ensure' => 'present'}) | ||
|
|
||
| ENDOFDOC | ||
| ) do |vals| | ||
| type, title, params = vals | ||
| raise(ArgumentError, 'Must specify a type') unless type | ||
| raise(ArgumentError, 'Must specify a title') unless title | ||
| params ||= {} | ||
| Puppet::Parser::Functions.function(:defined_with_params) | ||
| if function_defined_with_params(["#{type}[#{title}]", params]) | ||
| Puppet.debug("Resource #{type}[#{title}] not created b/c it already exists") | ||
| else | ||
| Puppet::Parser::Functions.function(:create_resources) | ||
| function_create_resources([type.capitalize, { title => params }]) | ||
|
|
||
| items = title.kind_of?(Array) ? title : [].push(title) | ||
|
|
||
| items.each do |item| | ||
| Puppet::Parser::Functions.function(:defined_with_params) | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This was in the original implementation, but do you know why this is being done? Is this necessary?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm not sure why it's being done, but if there is a better way of doing it, I'd be happy to refactor it. |
||
| if function_defined_with_params(["#{type}[#{item}]", params]) | ||
| Puppet.debug("Resource #{type}[#{item}] not created b/c it already exists") | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It would be good to remove the abbreviation here.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I've removed it in the latest commit. |
||
| else | ||
| Puppet::Parser::Functions.function(:create_resources) | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Same with this method; does this need to be here? |
||
| function_create_resources([type.capitalize, { item => params }]) | ||
| end | ||
| end | ||
| end | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -37,4 +37,39 @@ | |
| ).and_raise_error(Puppet::Error) | ||
| end | ||
| end | ||
|
|
||
| describe 'when an array of new resources are passed in' do | ||
| it do | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Each one of these expectations should be in a separate |
||
| should run.with_params('User', ['dan', 'alex'], {}) | ||
| compiler.catalog.resource('User[dan]').to_s.should == 'User[dan]' | ||
| compiler.catalog.resource('User[alex]').to_s.should == 'User[alex]' | ||
| end | ||
| end | ||
|
|
||
| describe 'when an array of existing resources is compared against existing resources' do | ||
| let :pre_condition do | ||
| 'user { "dan": ensure => present; "alex": ensure => present }' | ||
| end | ||
| it do | ||
| should run.with_params('User', ['dan', 'alex'], {}) | ||
| compiler.catalog.resource('User[dan]').to_s.should == 'User[dan]' | ||
| compiler.catalog.resource('User[alex]').to_s.should == 'User[alex]' | ||
| end | ||
| end | ||
|
|
||
| describe 'when compared against existing resources with attributes' do | ||
| let :pre_condition do | ||
| 'user { "dan": ensure => present; "alex": ensure => present }' | ||
| end | ||
| it do | ||
| # These should not fail | ||
| should run.with_params('User', ['dan', 'alex'], {}) | ||
| should run.with_params('User', ['dan', 'alex'], '') | ||
| should run.with_params('User', ['dan', 'alex'], {'ensure' => 'present'}) | ||
| # This should fail | ||
| should run.with_params('User', ['dan', 'alex'], | ||
| {'ensure' => 'absent'} | ||
| ).and_raise_error(Puppet::Error) | ||
| end | ||
| end | ||
| end | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why is it necessary to do
[].push(title)as opposed to doing[title]?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wasn't aware of the
[title]way of doing it. That seems more verbose. I'll update the pull request to use the new form.