hammer_cli_foreman_puppet 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +5 -0
  3. data/README.md +20 -0
  4. data/config/foreman_puppet.yml +2 -0
  5. data/lib/hammer_cli_foreman_puppet.rb +57 -0
  6. data/lib/hammer_cli_foreman_puppet/associating_commands.rb +1 -0
  7. data/lib/hammer_cli_foreman_puppet/associating_commands/associating_commands.rb +40 -0
  8. data/lib/hammer_cli_foreman_puppet/class.rb +54 -0
  9. data/lib/hammer_cli_foreman_puppet/combination.rb +14 -0
  10. data/lib/hammer_cli_foreman_puppet/command_extensions.rb +2 -0
  11. data/lib/hammer_cli_foreman_puppet/command_extensions/discovery.rb +8 -0
  12. data/lib/hammer_cli_foreman_puppet/command_extensions/environment.rb +24 -0
  13. data/lib/hammer_cli_foreman_puppet/command_extensions/environments.rb +24 -0
  14. data/lib/hammer_cli_foreman_puppet/command_extensions/host.rb +41 -0
  15. data/lib/hammer_cli_foreman_puppet/command_extensions/hostgroup.rb +47 -0
  16. data/lib/hammer_cli_foreman_puppet/command_extensions/location.rb +9 -0
  17. data/lib/hammer_cli_foreman_puppet/command_extensions/organization.rb +9 -0
  18. data/lib/hammer_cli_foreman_puppet/commands.rb +76 -0
  19. data/lib/hammer_cli_foreman_puppet/config_group.rb +45 -0
  20. data/lib/hammer_cli_foreman_puppet/discovery.rb +11 -0
  21. data/lib/hammer_cli_foreman_puppet/environment.rb +59 -0
  22. data/lib/hammer_cli_foreman_puppet/environment_name_mapping.rb +20 -0
  23. data/lib/hammer_cli_foreman_puppet/host.rb +70 -0
  24. data/lib/hammer_cli_foreman_puppet/hostgroup.rb +76 -0
  25. data/lib/hammer_cli_foreman_puppet/id_resolver.rb +73 -0
  26. data/lib/hammer_cli_foreman_puppet/location.rb +35 -0
  27. data/lib/hammer_cli_foreman_puppet/option_sources.rb +1 -0
  28. data/lib/hammer_cli_foreman_puppet/option_sources/puppet_environment_params.rb +60 -0
  29. data/lib/hammer_cli_foreman_puppet/organization.rb +35 -0
  30. data/lib/hammer_cli_foreman_puppet/puppet_references.rb +20 -0
  31. data/lib/hammer_cli_foreman_puppet/references.rb +22 -0
  32. data/lib/hammer_cli_foreman_puppet/smart_class_parameter.rb +182 -0
  33. data/lib/hammer_cli_foreman_puppet/smart_proxy.rb +58 -0
  34. data/lib/hammer_cli_foreman_puppet/version.rb +5 -0
  35. data/test/data/2.1/foreman_api.json +1 -0
  36. data/test/data/3.0/foreman_api.json +1 -0
  37. data/test/data/README.md +27 -0
  38. data/test/functional/config_group_test.rb +28 -0
  39. data/test/functional/host/create_test.rb +164 -0
  40. data/test/functional/host/update_test.rb +97 -0
  41. data/test/functional/hostgroup/create_test.rb +149 -0
  42. data/test/functional/hostgroup/update_test.rb +97 -0
  43. data/test/functional/proxy_test.rb +86 -0
  44. data/test/functional/smart_class_parameter_test.rb +97 -0
  45. data/test/functional/template_test.rb +38 -0
  46. data/test/functional/test_helper.rb +7 -0
  47. data/test/test_helper.rb +29 -0
  48. data/test/unit/apipie_resource_mock.rb +186 -0
  49. data/test/unit/config_group_test.rb +81 -0
  50. data/test/unit/helpers/command.rb +163 -0
  51. data/test/unit/helpers/fake_searchables.rb +19 -0
  52. data/test/unit/helpers/resource_disabled.rb +24 -0
  53. data/test/unit/puppet_class_test.rb +72 -0
  54. data/test/unit/puppet_environment_test.rb +116 -0
  55. data/test/unit/smart_class_parameter_test.rb +114 -0
  56. data/test/unit/test_helper.rb +18 -0
  57. data/test/unit/test_output_adapter.rb +22 -0
  58. metadata +143 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: c8cf103215c0693d5edeedfba47ce25c89a894b042ab4da48d16839d414b49c0
4
+ data.tar.gz: 740d0819a7ca0142f7f962df9aef29a0bd6f6cc27e8ac8bfdf5ae8f246b027d1
5
+ SHA512:
6
+ metadata.gz: 4ca662500bc6c2fea49c077daadfa82b4cceb26af0f3668adb21f6b013579e6ef07397d230a1b4928c5993c6b49bb07d350ffbfe7488e9aa5cc0b9d893c24fca
7
+ data.tar.gz: ecbd3bae2f043ae3e5bba7887343aee0d121bbc1523454b8ec3644ace72465203aead339ac6ab489c2f4d347ebab19aa2cb17b815e2a4d521950b300b82a33a6
data/LICENSE ADDED
@@ -0,0 +1,5 @@
1
+ This program and entire repository is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version.
2
+
3
+ This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
4
+
5
+ You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.
data/README.md ADDED
@@ -0,0 +1,20 @@
1
+ [WIP] hammer_cli_foreman_puppet
2
+ =========================================
3
+
4
+ This [Hammer CLI](https://github.com/theforeman/hammer-cli) plugin contains
5
+ set of commands for puppet.
6
+ Configuration
7
+ -------------
8
+
9
+ Configuration is expected to be placed in one of hammer's configuration directories for plugins:
10
+ - `/etc/hammer/cli.modules.d/`
11
+ - `~/.hammer/cli.modules.d/`
12
+ - `./.config/cli.modules.d/` (config dir in CWD)
13
+
14
+ If you install `hammer_cli_foreman_puppet` from source you'll have to copy the config file manually
15
+ from `config/foreman_puppet.yml`.
16
+
17
+ License
18
+ -------
19
+
20
+ This project is licensed under the GPLv3+.
@@ -0,0 +1,2 @@
1
+ :foreman_puppet:
2
+ :enable_module: true
@@ -0,0 +1,57 @@
1
+ module HammerCLIForemanPuppet
2
+ require 'hammer_cli'
3
+ require 'hammer_cli_foreman'
4
+
5
+ require 'hammer_cli_foreman_puppet/version'
6
+ require 'hammer_cli_foreman_puppet/puppet_references'
7
+ require 'hammer_cli_foreman_puppet/environment_name_mapping'
8
+ require 'hammer_cli_foreman_puppet/commands'
9
+ require 'hammer_cli_foreman_puppet/command_extensions'
10
+ require 'hammer_cli_foreman_puppet/option_sources'
11
+ require 'hammer_cli_foreman_puppet/associating_commands'
12
+ require 'hammer_cli_foreman_puppet/id_resolver'
13
+
14
+ # Puppet commands
15
+ require 'hammer_cli_foreman_puppet/smart_class_parameter'
16
+ require 'hammer_cli_foreman_puppet/environment'
17
+ require 'hammer_cli_foreman_puppet/config_group'
18
+ require 'hammer_cli_foreman_puppet/class'
19
+
20
+ # extensions to hammer_cli_foreman commands
21
+ require 'hammer_cli_foreman_puppet/host'
22
+ require 'hammer_cli_foreman_puppet/organization'
23
+ require 'hammer_cli_foreman_puppet/location'
24
+ require 'hammer_cli_foreman_puppet/smart_proxy'
25
+ require 'hammer_cli_foreman_puppet/combination'
26
+ require 'hammer_cli_foreman_puppet/hostgroup'
27
+
28
+ HammerCLI::MainCommand.lazy_subcommand(
29
+ 'puppet-class',
30
+ _('Manage Foreman Puppet classes'),
31
+ 'HammerCLIForemanPuppet::PuppetClass',
32
+ 'hammer_cli_foreman_puppet/class'
33
+ )
34
+ HammerCLI::MainCommand.lazy_subcommand(
35
+ 'puppet-environment',
36
+ _('Manage Foreman Puppet environments'),
37
+ 'HammerCLIForemanPuppet::PuppetEnvironment',
38
+ 'hammer_cli_foreman_puppet/environment'
39
+ )
40
+ HammerCLI::MainCommand.lazy_subcommand(
41
+ 'config-group',
42
+ _('Manage Foreman config groups'),
43
+ 'HammerCLIForemanPuppet::ConfigGroup',
44
+ 'hammer_cli_foreman_puppet/config_group'
45
+ )
46
+ HammerCLI::MainCommand.lazy_subcommand(
47
+ 'sc-param',
48
+ _('Manage Foreman Puppet smart class parameters'),
49
+ 'HammerCLIForemanPuppet::SmartClassParameter',
50
+ 'hammer_cli_foreman_puppet/smart_class_parameter'
51
+ )
52
+
53
+ # plugins extensions
54
+ begin
55
+ require 'hammer_cli_foreman_puppet/discovery'
56
+ rescue LoadError
57
+ end
@@ -0,0 +1 @@
1
+ require 'hammer_cli_foreman_puppet/associating_commands/associating_commands'
@@ -0,0 +1,40 @@
1
+ module HammerCLIForemanPuppet
2
+ module AssociatingCommands
3
+ module ExtendCommands
4
+ def create_subcommand(name = :PuppetEnvironment)
5
+ commands = constants.select { |c| c.to_s.include? name.to_s }.map { |p| const_get(p)}
6
+ commands.each do |command|
7
+ subcommand(command.command_name, command.desc, command, warning: command.warning)
8
+ end
9
+ end
10
+ end
11
+
12
+ module PuppetEnvironment
13
+ extend HammerCLIForeman::AssociatingCommands::CommandExtension
14
+
15
+ class AddPuppetEnvironmentCommand < HammerCLIForemanPuppet::AddAssociatedCommand
16
+ include EnvironmentNameMapping
17
+ associated_resource :environments
18
+ desc _('Associate a Puppet environment')
19
+ command_name "add-environment"
20
+
21
+ success_message _("The environment has been associated.")
22
+ failure_message _("Could not associate the environment")
23
+
24
+ extend_with(HammerCLIForemanPuppet::CommandExtensions::PuppetEnvironment.new)
25
+ end
26
+
27
+ class RemovePuppetEnvironmentCommand < HammerCLIForemanPuppet::RemoveAssociatedCommand
28
+ include EnvironmentNameMapping
29
+ associated_resource :environments
30
+ desc _('Disassociate a Puppet environment')
31
+ command_name "remove-environment"
32
+
33
+ success_message _("The environment has been disassociated.")
34
+ failure_message _("Could not disassociate the environment")
35
+
36
+ extend_with(HammerCLIForemanPuppet::CommandExtensions::PuppetEnvironment.new)
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,54 @@
1
+ module HammerCLIForemanPuppet
2
+ class PuppetClass < HammerCLIForemanPuppet::Command
3
+
4
+ resource :puppetclasses
5
+
6
+ class ListCommand < HammerCLIForemanPuppet::ListCommand
7
+ output do
8
+ field :id, _("Id")
9
+ field :name, _("Name")
10
+ end
11
+
12
+ def send_request
13
+ self.class.unhash_classes(super)
14
+ end
15
+
16
+ def self.unhash_classes(classes)
17
+ clss = classes.first.inject([]) { |list, (pp_module, pp_module_classes)| list + pp_module_classes }
18
+
19
+ HammerCLI::Output::RecordCollection.new(clss, :meta => classes.meta)
20
+ end
21
+
22
+ build_options
23
+
24
+ extend_with(HammerCLIForemanPuppet::CommandExtensions::PuppetEnvironment.new)
25
+ end
26
+
27
+ class InfoCommand < HammerCLIForemanPuppet::InfoCommand
28
+ output ListCommand.output_definition do
29
+ collection :smart_class_parameters, _('Smart class parameters'), :numbered => false do
30
+ custom_field Fields::Reference, :name_key => :parameter
31
+ end
32
+ HammerCLIForeman::References.hostgroups(self)
33
+ HammerCLIForemanPuppet::PuppetReferences.environments(self)
34
+ HammerCLIForeman::References.parameters(self)
35
+ end
36
+
37
+ build_options
38
+
39
+ extend_with(HammerCLIForemanPuppet::CommandExtensions::PuppetEnvironment.new)
40
+ end
41
+
42
+
43
+ class SCParamsCommand < HammerCLIForemanPuppet::SmartClassParametersBriefList
44
+ build_options_for :puppetclasses
45
+
46
+ def validate_options
47
+ super
48
+ validator.any(:option_puppetclass_name, :option_puppetclass_id).required
49
+ end
50
+ end
51
+
52
+ autoload_subcommands
53
+ end
54
+ end
@@ -0,0 +1,14 @@
1
+
2
+ require 'hammer_cli_foreman/combination'
3
+
4
+ module HammerCLIForemanPuppet
5
+ HammerCLIForeman::Combination::InfoCombination.extend_with(
6
+ HammerCLIForemanPuppet::CommandExtensions::PuppetEnvironment.new
7
+ )
8
+ HammerCLIForeman::Combination::UpdateCombination.extend_with(
9
+ HammerCLIForemanPuppet::CommandExtensions::PuppetEnvironment.new
10
+ )
11
+ HammerCLIForeman::Combination::CreateCombination.extend_with(
12
+ HammerCLIForemanPuppet::CommandExtensions::PuppetEnvironment.new
13
+ )
14
+ end
@@ -0,0 +1,2 @@
1
+ require 'hammer_cli_foreman_puppet/command_extensions/environment'
2
+ require 'hammer_cli_foreman_puppet/command_extensions/environments'
@@ -0,0 +1,8 @@
1
+ module HammerCLIForemanPuppet
2
+ module CommandExtensions
3
+ class Provision < HammerCLI::CommandExtensions
4
+ option "--puppetclass-ids", "PUPPETCLASS_IDS", " ",
5
+ :format => HammerCLI::Options::Normalizers::List.new
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,24 @@
1
+ module HammerCLIForemanPuppet
2
+ module CommandExtensions
3
+ class PuppetEnvironment < HammerCLI::CommandExtensions
4
+ # FIXME: Temp workaround for option builders in case of multiple plugins
5
+ # extensions of the same command
6
+ option_family do
7
+ parent '--puppet-environment-id', 'PUPPET_ENVIRONMENT_ID', _('ID of associated Puppet environment'),
8
+ format: HammerCLI::Options::Normalizers::Number.new,
9
+ attribute_name: :option_environment_id
10
+ child '--puppet-environment', 'PUPPET_ENVIRONMENT_NAME', _('Name of associated Puppet environment'),
11
+ attribute_name: :option_environment_name
12
+ end
13
+
14
+ option_sources do |sources, command|
15
+ sources.find_by_name('IdResolution').insert_relative(
16
+ :after,
17
+ 'IdParams',
18
+ HammerCLIForemanPuppet::OptionSources::PuppetEnvironmentParams.new(command)
19
+ )
20
+ sources
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ module HammerCLIForemanPuppet
2
+ module CommandExtensions
3
+ class PuppetEnvironments < HammerCLI::CommandExtensions
4
+ # FIXME: Temp workaround for option builders in case of multiple plugins
5
+ # extensions of the same command
6
+ option_family do
7
+ parent '--puppet-environment-ids', 'PUPPET_ENVIRONMENT_IDS', _('IDs of associated Puppet environment'),
8
+ format: HammerCLI::Options::Normalizers::List.new,
9
+ attribute_name: :option_environment_ids
10
+ child '--puppet-environments', 'PUPPET_ENVIRONMENT_NAMES', _('Names of associated Puppet environment'),
11
+ attribute_name: :option_environment_names
12
+ end
13
+
14
+ option_sources do |sources, command|
15
+ sources.find_by_name('IdResolution').insert_relative(
16
+ :after,
17
+ 'IdsParams',
18
+ HammerCLIForemanPuppet::OptionSources::PuppetEnvironmentParams.new(command)
19
+ )
20
+ sources
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,41 @@
1
+ module HammerCLIForemanPuppet
2
+ module CommandExtensions
3
+ class Host < HammerCLI::CommandExtensions
4
+ output do |definition|
5
+ definition.insert(:after, :location, HammerCLIForemanPuppet::Host::InfoCommand.output_definition.fields)
6
+ end
7
+ end
8
+
9
+ class HostPuppetProxy < HammerCLI::CommandExtensions
10
+ option_family(
11
+ format: HammerCLI::Options::Normalizers::List.new,
12
+ aliased_resource: 'puppet-class',
13
+ description: 'Names/Ids of associated Puppet classes'
14
+ ) do
15
+ parent '--puppet-class-ids', 'PUPPET_CLASS_IDS', _('List of Puppet class ids'),
16
+ attribute_name: :option_puppetclass_ids
17
+ child '--puppet-classes', 'PUPPET_CLASS_NAMES', '',
18
+ attribute_name: :option_puppetclass_names
19
+ end
20
+ option '--puppet-ca-proxy', 'PUPPET_CA_PROXY_NAME', _('Name of Puppet CA proxy')
21
+ option '--puppet-proxy', 'PUPPET_PROXY_NAME', _('Name of Puppet proxy')
22
+
23
+ request_params do |params, command_object|
24
+ if command_object.option_puppet_proxy
25
+ params['host']['puppet_proxy_id'] ||= HammerCLIForemanPuppet::CommandExtensions::HostPuppetProxy.proxy_id(
26
+ command_object.resolver, command_object.option_puppet_proxy
27
+ )
28
+ end
29
+ if command_object.option_puppet_ca_proxy
30
+ params['host']['puppet_ca_proxy_id'] ||= HammerCLIForemanPuppet::CommandExtensions::HostPuppetProxy.proxy_id(
31
+ command_object.resolver, command_object.option_puppet_ca_proxy
32
+ )
33
+ end
34
+ end
35
+
36
+ def self.proxy_id(resolver, name)
37
+ resolver.smart_proxy_id('option_name' => name)
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,47 @@
1
+ module HammerCLIForemanPuppet
2
+ module CommandExtensions
3
+ class HostgroupInfo < HammerCLI::CommandExtensions
4
+ output do |definition|
5
+ definition.insert(:after, :compute_resource, HammerCLIForemanPuppet::Hostgroup::InfoCommand.output_definition.fields)
6
+ end
7
+ end
8
+
9
+ class HostgroupList < HammerCLI::CommandExtensions
10
+ output do |definition|
11
+ definition.insert(:after, :operatingsystem, HammerCLIForemanPuppet::Hostgroup::ListCommand.output_definition.fields)
12
+ end
13
+ end
14
+
15
+ class HostgroupPuppetProxy < HammerCLI::CommandExtensions
16
+ option_family(
17
+ format: HammerCLI::Options::Normalizers::List.new,
18
+ aliased_resource: 'puppet-class',
19
+ description: 'Names/Ids of associated Puppet classes'
20
+ ) do
21
+ parent '--puppet-class-ids', 'PUPPET_CLASS_IDS', _('List of Puppet class ids'),
22
+ attribute_name: :option_puppetclass_ids
23
+ child '--puppet-classes', 'PUPPET_CLASS_NAMES', '',
24
+ attribute_name: :option_puppetclass_names
25
+ end
26
+ option '--puppet-ca-proxy', 'PUPPET_CA_PROXY_NAME', _('Name of Puppet CA proxy')
27
+ option '--puppet-proxy', 'PUPPET_PROXY_NAME', _('Name of Puppet proxy')
28
+
29
+ request_params do |params, command_object|
30
+ if command_object.option_puppet_proxy
31
+ params['hostgroup']['puppet_proxy_id'] ||= HammerCLIForemanPuppet::CommandExtensions::HostgroupPuppetProxy.proxy_id(
32
+ command_object.resolver, command_object.option_puppet_proxy
33
+ )
34
+ end
35
+ if command_object.option_puppet_ca_proxy
36
+ params['hostgroup']['puppet_ca_proxy_id'] ||= HammerCLIForemanPuppet::CommandExtensions::HostgroupPuppetProxy.proxy_id(
37
+ command_object.resolver, command_object.option_puppet_ca_proxy
38
+ )
39
+ end
40
+ end
41
+
42
+ def self.proxy_id(resolver, name)
43
+ resolver.smart_proxy_id('option_name' => name)
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,9 @@
1
+ module HammerCLIForemanPuppet
2
+ module CommandExtensions
3
+ class LocationInfo < HammerCLI::CommandExtensions
4
+ output do |definition|
5
+ definition.insert(:after, :realms, HammerCLIForemanPuppet::Location::InfoCommand.output_definition.fields)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module HammerCLIForemanPuppet
2
+ module CommandExtensions
3
+ class OrganizationInfo < HammerCLI::CommandExtensions
4
+ output do |definition|
5
+ definition.insert(:after, :realms, HammerCLIForemanPuppet::Organization::InfoCommand.output_definition.fields)
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,76 @@
1
+ module HammerCLIForemanPuppet
2
+ RESOURCE_NAME_MAPPING = {
3
+ :puppetclass => :puppet_class,
4
+ :puppetclasses => :puppet_classes,
5
+ :environment => :puppet_environment,
6
+ :environments => :puppet_environments
7
+ }.freeze
8
+
9
+ RESOURCE_ALIAS_NAME_MAPPING = {
10
+ environment: :puppet_environment,
11
+ environments: :puppet_environments
12
+ }.freeze
13
+
14
+ module ResolverCommons
15
+ def self.included(base)
16
+ base.extend(ClassMethods)
17
+ end
18
+ module ClassMethods
19
+
20
+ def api_connection
21
+ if HammerCLI.context[:api_connection]
22
+ HammerCLI.context[:api_connection].get("foreman")
23
+ else
24
+ HammerCLI::Connection.get("foreman").api
25
+ end
26
+ end
27
+
28
+ def resolver
29
+ HammerCLIForemanPuppet::IdResolver.new(
30
+ api_connection,
31
+ HammerCLIForemanPuppet::Searchables.new
32
+ )
33
+ end
34
+ def resource_name_mapping
35
+ HammerCLIForemanPuppet::RESOURCE_NAME_MAPPING.dup
36
+ end
37
+
38
+ def searchables
39
+ @searchables ||= HammerCLIForemanPuppet::Searchables.new
40
+ @searchables
41
+ end
42
+ end
43
+ end
44
+
45
+ class Command < HammerCLIForeman::Command
46
+ include HammerCLIForemanPuppet::ResolverCommons
47
+ end
48
+
49
+ class UpdateCommand < HammerCLIForeman::UpdateCommand
50
+ include HammerCLIForemanPuppet::ResolverCommons
51
+ end
52
+
53
+ class InfoCommand < HammerCLIForeman::InfoCommand
54
+ include HammerCLIForemanPuppet::ResolverCommons
55
+ end
56
+
57
+ class CreateCommand < HammerCLIForeman::CreateCommand
58
+ include HammerCLIForemanPuppet::ResolverCommons
59
+ end
60
+
61
+ class DeleteCommand < HammerCLIForeman::DeleteCommand
62
+ include HammerCLIForemanPuppet::ResolverCommons
63
+ end
64
+
65
+ class ListCommand < HammerCLIForeman::ListCommand
66
+ include HammerCLIForemanPuppet::ResolverCommons
67
+ end
68
+
69
+ class AddAssociatedCommand < HammerCLIForeman::AddAssociatedCommand
70
+ include HammerCLIForemanPuppet::ResolverCommons
71
+ end
72
+
73
+ class RemoveAssociatedCommand < HammerCLIForeman::RemoveAssociatedCommand
74
+ include HammerCLIForemanPuppet::ResolverCommons
75
+ end
76
+ end