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
@@ -0,0 +1,45 @@
1
+ module HammerCLIForemanPuppet
2
+ class ConfigGroup < HammerCLIForemanPuppet::Command
3
+ resource :config_groups
4
+
5
+ class ListCommand < HammerCLIForemanPuppet::ListCommand
6
+ output do
7
+ field :id, _('ID')
8
+ field :name, _('Name')
9
+ end
10
+
11
+ build_options
12
+ end
13
+
14
+ class InfoCommand < HammerCLIForemanPuppet::InfoCommand
15
+ output ListCommand.output_definition do
16
+ HammerCLIForemanPuppet::PuppetReferences.puppetclasses(self)
17
+ end
18
+
19
+ build_options
20
+ end
21
+
22
+ class CreateCommand < HammerCLIForemanPuppet::CreateCommand
23
+ success_message _('Config group created.')
24
+ failure_message _('Could not create the config group')
25
+
26
+ build_options
27
+ end
28
+
29
+ class UpdateCommand < HammerCLIForemanPuppet::UpdateCommand
30
+ success_message _('Config group updated.')
31
+ failure_message _('Could not update the config group')
32
+
33
+ build_options
34
+ end
35
+
36
+ class DeleteCommand < HammerCLIForemanPuppet::DeleteCommand
37
+ success_message _('Config group has been deleted.')
38
+ failure_message _('Could not delete the config group')
39
+
40
+ build_options
41
+ end
42
+
43
+ autoload_subcommands
44
+ end
45
+ end
@@ -0,0 +1,11 @@
1
+ require 'hammer_cli_foreman_discovery/discovery'
2
+ require 'hammer_cli_foreman_puppet/command_extensions/discovery'
3
+
4
+ module HammerCLIForemanPuppet
5
+ HammerCLIForemanDiscovery::DiscoveredHost::ProvisionCommand.extend_with(
6
+ HammerCLIForemanPuppet::CommandExtensions::Provision.new
7
+ )
8
+ HammerCLIForemanDiscovery::DiscoveredHost::ProvisionCommand.extend_with(
9
+ HammerCLIForemanPuppet::CommandExtensions::PuppetEnvironment.new
10
+ )
11
+ end
@@ -0,0 +1,59 @@
1
+ module HammerCLIForemanPuppet
2
+ class PuppetEnvironment < HammerCLIForemanPuppet::Command
3
+ resource :environments
4
+
5
+ class ListCommand < HammerCLIForemanPuppet::ListCommand
6
+ include EnvironmentNameMapping
7
+ output do
8
+ field :id, _('Id')
9
+ field :name, _('Name')
10
+ end
11
+
12
+ build_options
13
+ end
14
+
15
+ class InfoCommand < HammerCLIForemanPuppet::InfoCommand
16
+ include EnvironmentNameMapping
17
+ output ListCommand.output_definition do
18
+ HammerCLIForemanPuppet::PuppetReferences.puppetclasses(self)
19
+ HammerCLIForeman::References.taxonomies(self)
20
+ HammerCLIForeman::References.timestamps(self)
21
+ end
22
+
23
+ build_options
24
+ end
25
+
26
+ class CreateCommand < HammerCLIForemanPuppet::CreateCommand
27
+ include EnvironmentNameMapping
28
+ success_message _("Environment created.")
29
+ failure_message _("Could not create the environment")
30
+
31
+ build_options
32
+ end
33
+
34
+ class UpdateCommand < HammerCLIForemanPuppet::UpdateCommand
35
+ include EnvironmentNameMapping
36
+ success_message _("Environment updated.")
37
+ failure_message _("Could not update the environment")
38
+
39
+ build_options
40
+ end
41
+
42
+ class DeleteCommand < HammerCLIForemanPuppet::DeleteCommand
43
+ include EnvironmentNameMapping
44
+ success_message _("Environment deleted.")
45
+ failure_message _("Could not delete the environment")
46
+
47
+ build_options
48
+ end
49
+
50
+ class SCParamsCommand < HammerCLIForemanPuppet::SmartClassParametersList
51
+ include EnvironmentNameMapping
52
+ build_options_for :environments
53
+
54
+ extend_with(HammerCLIForemanPuppet::CommandExtensions::PuppetEnvironment.new)
55
+ end
56
+
57
+ autoload_subcommands
58
+ end
59
+ end
@@ -0,0 +1,20 @@
1
+ module HammerCLIForemanPuppet
2
+ module EnvironmentNameMapping
3
+ def self.included(base)
4
+ base.extend(ClassMethods)
5
+ end
6
+
7
+ module ClassMethods
8
+ def resource_name_mapping
9
+ mapping = Command.resource_name_mapping
10
+ mapping[:environment] = :puppet_environment
11
+ mapping[:environments] = :puppet_environments
12
+ mapping
13
+ end
14
+
15
+ def resource_alias_name_mapping
16
+ super.merge(HammerCLIForemanPuppet::RESOURCE_ALIAS_NAME_MAPPING.dup)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,70 @@
1
+ require 'hammer_cli_foreman/host'
2
+ require 'hammer_cli_foreman_puppet/class'
3
+ require 'hammer_cli_foreman_puppet/host'
4
+ require 'hammer_cli_foreman_puppet/command_extensions/host'
5
+
6
+ module HammerCLIForemanPuppet
7
+ class Host < HammerCLIForemanPuppet::Command
8
+
9
+ class PuppetClassesCommand < HammerCLIForemanPuppet::ListCommand
10
+ include EnvironmentNameMapping
11
+ command_name "puppet-classes"
12
+ resource :puppetclasses
13
+
14
+ output HammerCLIForemanPuppet::PuppetClass::ListCommand.output_definition
15
+
16
+ def send_request
17
+ HammerCLIForemanPuppet::PuppetClass::ListCommand.unhash_classes(super)
18
+ end
19
+
20
+ build_options do |o|
21
+ o.without(:hostgroup_id, :environment_id)
22
+ o.expand.only(:hosts)
23
+ end
24
+ end
25
+
26
+ class SCParamsCommand < HammerCLIForemanPuppet::SmartClassParametersList
27
+ build_options_for :hosts
28
+ command_name "sc-params"
29
+
30
+ def validate_options
31
+ super
32
+ validator.any(:option_host_name, :option_host_id).required
33
+ end
34
+ end
35
+
36
+ class InfoCommand < HammerCLIForemanPuppet::InfoCommand
37
+ include EnvironmentNameMapping
38
+ output do
39
+ field nil, _("Puppet Environment"), Fields::SingleReference, :key => :environment
40
+ field nil, _("Puppet CA Proxy"), Fields::SingleReference, :key => :puppet_ca_proxy
41
+ field nil, _("Puppet Master Proxy"), Fields::SingleReference, :key => :puppet_proxy
42
+ end
43
+ end
44
+ end
45
+
46
+ HammerCLIForeman::Host.subcommand 'puppet-classes',
47
+ HammerCLIForemanPuppet::Host::PuppetClassesCommand.desc,
48
+ HammerCLIForemanPuppet::Host::PuppetClassesCommand
49
+
50
+ HammerCLIForeman::Host.subcommand 'sc-params',
51
+ HammerCLIForemanPuppet::Host::SCParamsCommand.desc,
52
+ HammerCLIForemanPuppet::Host::SCParamsCommand
53
+
54
+ HammerCLIForeman::Host::ListCommand.extend_with(
55
+ HammerCLIForemanPuppet::CommandExtensions::PuppetEnvironment.new
56
+ )
57
+ HammerCLIForeman::Host::CreateCommand.include(HammerCLIForemanPuppet::EnvironmentNameMapping)
58
+ HammerCLIForeman::Host::CreateCommand.extend_with(
59
+ HammerCLIForemanPuppet::CommandExtensions::PuppetEnvironment.new,
60
+ HammerCLIForemanPuppet::CommandExtensions::HostPuppetProxy.new
61
+ )
62
+ HammerCLIForeman::Host::UpdateCommand.include(HammerCLIForemanPuppet::EnvironmentNameMapping)
63
+ HammerCLIForeman::Host::UpdateCommand.extend_with(
64
+ HammerCLIForemanPuppet::CommandExtensions::PuppetEnvironment.new,
65
+ HammerCLIForemanPuppet::CommandExtensions::HostPuppetProxy.new
66
+ )
67
+ HammerCLIForeman::Host::InfoCommand.extend_with(
68
+ HammerCLIForemanPuppet::CommandExtensions::Host.new
69
+ )
70
+ end
@@ -0,0 +1,76 @@
1
+ require 'hammer_cli_foreman/hostgroup'
2
+ require 'hammer_cli_foreman_puppet/references'
3
+ require 'hammer_cli_foreman_puppet/command_extensions/hostgroup.rb'
4
+
5
+ module HammerCLIForemanPuppet
6
+ class Hostgroup < HammerCLIForemanPuppet::Command
7
+
8
+ class PuppetClassesCommand < HammerCLIForemanPuppet::ListCommand
9
+ command_name "puppet-classes"
10
+ resource :puppetclasses
11
+
12
+ output HammerCLIForemanPuppet::PuppetClass::ListCommand.output_definition
13
+
14
+ def send_request
15
+ HammerCLIForemanPuppet::PuppetClass::ListCommand.unhash_classes(super)
16
+ end
17
+
18
+ build_options do |o|
19
+ o.without(:host_id, :environment_id)
20
+ o.expand.only(:hostgroups)
21
+ end
22
+ end
23
+
24
+ class PuppetSCParamsCommand < HammerCLIForemanPuppet::SmartClassParametersList
25
+ build_options_for :hostgroups
26
+ command_name "sc-params"
27
+
28
+ def validate_options
29
+ super
30
+ validator.any(:option_hostgroup_name, :option_hostgroup_id).required
31
+ end
32
+ end
33
+
34
+ class ListCommand < HammerCLIForemanPuppet::InfoCommand
35
+ output do
36
+ field nil, _("Puppet Environment"), Fields::SingleReference, :key => :environment
37
+ end
38
+ end
39
+
40
+ class InfoCommand < HammerCLIForemanPuppet::InfoCommand
41
+ output do
42
+ field nil, _("Puppet Environment"), Fields::SingleReference, :key => :environment
43
+ field nil, _("Puppet CA Proxy"), Fields::SingleReference, :key => :puppet_ca_proxy
44
+ field nil, _("Puppet Master Proxy"), Fields::SingleReference, :key => :puppet_proxy
45
+ HammerCLIForemanPuppet::References.puppetclasses(self)
46
+ end
47
+ end
48
+ end
49
+
50
+ HammerCLIForeman::Hostgroup.subcommand 'puppet-classes',
51
+ HammerCLIForemanPuppet::Hostgroup::PuppetClassesCommand.desc,
52
+ HammerCLIForemanPuppet::Hostgroup::PuppetClassesCommand
53
+
54
+ HammerCLIForeman::Hostgroup.subcommand 'sc-params',
55
+ HammerCLIForemanPuppet::Hostgroup::PuppetSCParamsCommand.desc,
56
+ HammerCLIForemanPuppet::Hostgroup::PuppetSCParamsCommand
57
+
58
+ HammerCLIForeman::Hostgroup::CreateCommand.include(HammerCLIForemanPuppet::EnvironmentNameMapping)
59
+ HammerCLIForeman::Hostgroup::CreateCommand.extend_with(
60
+ HammerCLIForemanPuppet::CommandExtensions::PuppetEnvironment.new,
61
+ HammerCLIForemanPuppet::CommandExtensions::HostgroupPuppetProxy.new
62
+ )
63
+ HammerCLIForeman::Hostgroup::UpdateCommand.include(HammerCLIForemanPuppet::EnvironmentNameMapping)
64
+ HammerCLIForeman::Hostgroup::UpdateCommand.extend_with(
65
+ HammerCLIForemanPuppet::CommandExtensions::PuppetEnvironment.new,
66
+ HammerCLIForemanPuppet::CommandExtensions::HostgroupPuppetProxy.new
67
+ )
68
+ HammerCLIForeman::Hostgroup::InfoCommand.extend_with(
69
+ HammerCLIForemanPuppet::CommandExtensions::HostgroupInfo.new
70
+ )
71
+ HammerCLIForeman::Hostgroup::ListCommand.extend_with(
72
+ HammerCLIForemanPuppet::CommandExtensions::HostgroupList.new
73
+ )
74
+ #TODO - adding puppet class options
75
+ #TODO - resolver
76
+ end
@@ -0,0 +1,73 @@
1
+ module HammerCLIForemanPuppet
2
+ module PuppetIdResolver
3
+ # puppet class search results are in non-standard format
4
+ # and needs to be un-hashed first
5
+ def puppetclass_id(options)
6
+ return options[HammerCLI.option_accessor_name('id')] if options[HammerCLI.option_accessor_name('id')]
7
+
8
+ resource = @api.resource(:puppetclasses)
9
+ results = find_resource_raw(:puppetclasses, options)
10
+ require('hammer_cli_foreman_puppet/class')
11
+ results = HammerCLIForemanPuppet::PuppetClass::ListCommand.unhash_classes(results)
12
+ pick_result(results, resource)['id']
13
+ end
14
+
15
+ def puppetclass_ids(options)
16
+ resource_name = :puppetclasses
17
+ resource = @api.resource(resource_name)
18
+ results = if (ids = options[HammerCLI.option_accessor_name("ids")])
19
+ ids
20
+ elsif (ids = nil_from_searchables(resource_name, options, :plural => true))
21
+ ids
22
+ elsif options_not_set?(resource, options)
23
+ raise HammerCLIForeman::MissingSearchOptions.new(_("Missing options to search %s") % resource.name, resource)
24
+ elsif options_empty?(resource, options)
25
+ []
26
+ else
27
+ require('hammer_cli_foreman_puppet/class')
28
+ results = HammerCLIForemanPuppet::PuppetClass::ListCommand.unhash_classes(
29
+ resolved_call(resource_name, :index, options, :multi)
30
+ )
31
+ raise HammerCLIForeman::ResolverError.new(_("one of %s not found.") % resource.name, resource) if results.count < expected_record_count(options, resource, :multi)
32
+ results.map { |r| r['id'] }
33
+ end
34
+ end
35
+
36
+ def puppet_environment_id(options)
37
+ get_id(:environments, options)
38
+ end
39
+
40
+ def puppet_environment_ids(options)
41
+ get_ids(:environments, options)
42
+ end
43
+
44
+ def create_smart_class_parameters_search_options(options, _mode = nil)
45
+ search_options = {}
46
+ value = options[HammerCLI.option_accessor_name('name')]
47
+ search_options[:search] = "key = \"#{value}\""
48
+ search_options[:puppetclass_id] = puppetclass_id(scoped_options('puppetclass', options))
49
+ search_options
50
+ end
51
+ end
52
+
53
+ class Searchables < HammerCLIForeman::Searchables
54
+ SEARCHABLES = {
55
+ :environment => [s_name(_('Puppet environment name'))],
56
+ :puppet_environment => [s_name(_('Puppet environment name'))],
57
+ :puppetclass => [ s_name(_("Puppet class name")) ],
58
+ :smart_class_parameter => [ s_name(_("Smart class parameter name"), :editable => false) ],
59
+ }.freeze
60
+
61
+ DEFAULT_SEARCHABLES = [s_name(_("Name to search by"))].freeze
62
+
63
+ def for(resource)
64
+ SEARCHABLES[resource.singular_name.to_sym] || super(resource)
65
+ end
66
+ end
67
+
68
+ class IdResolver < HammerCLIForeman::IdResolver
69
+ end
70
+ # Temp workaround for resolvers in case of multiple plugins
71
+ # extensions of the same command
72
+ HammerCLIForeman::IdResolver.include HammerCLIForemanPuppet::PuppetIdResolver
73
+ end
@@ -0,0 +1,35 @@
1
+ require 'hammer_cli_foreman/location'
2
+ require 'hammer_cli_foreman_puppet/references'
3
+ require 'hammer_cli_foreman_puppet/command_extensions/location'
4
+
5
+ module HammerCLIForemanPuppet
6
+ module LocationAddAssociatedCommand
7
+ def self.included(base)
8
+ HammerCLIForemanPuppet::AssociatingCommands::PuppetEnvironment.extend_command(base)
9
+ base.create_subcommand
10
+ end
11
+ end
12
+
13
+ class Location < HammerCLIForemanPuppet::Command
14
+ class InfoCommand < HammerCLIForemanPuppet::InfoCommand
15
+ output do
16
+ HammerCLIForemanPuppet::References.environments(self)
17
+ end
18
+ end
19
+ end
20
+
21
+ HammerCLIForeman::Location::CreateCommand.extend_with(
22
+ HammerCLIForemanPuppet::CommandExtensions::PuppetEnvironments.new
23
+ )
24
+ HammerCLIForeman::Location::UpdateCommand.extend_with(
25
+ HammerCLIForemanPuppet::CommandExtensions::PuppetEnvironments.new
26
+ )
27
+ HammerCLIForeman::Location::InfoCommand.extend_with(
28
+ HammerCLIForemanPuppet::CommandExtensions::LocationInfo.new
29
+ )
30
+
31
+ HammerCLIForeman::Location.class_eval do
32
+ extend HammerCLIForemanPuppet::AssociatingCommands::ExtendCommands
33
+ include HammerCLIForemanPuppet::LocationAddAssociatedCommand
34
+ end
35
+ end
@@ -0,0 +1 @@
1
+ require 'hammer_cli_foreman_puppet/option_sources/puppet_environment_params'
@@ -0,0 +1,60 @@
1
+
2
+ module HammerCLIForemanPuppet
3
+ module OptionSources
4
+ class PuppetEnvironmentParams < HammerCLI::Options::Sources::Base
5
+ def initialize(command)
6
+ @command = command
7
+ end
8
+
9
+ def get_options(_defined_options, result)
10
+ if result['option_environment_id'].nil? &&
11
+ (@command.respond_to?(:option_environment_id) ||
12
+ @command.respond_to?(:option_environment_name))
13
+ put_puppet_environment_id(result)
14
+ end
15
+ if result['option_environment_ids'].nil? &&
16
+ (@command.respond_to?(:option_environment_ids) ||
17
+ @command.respond_to?(:option_environment_names))
18
+ put_puppet_environment_ids(result)
19
+ end
20
+ result
21
+ end
22
+
23
+ private
24
+
25
+ def put_puppet_environment_id(result)
26
+ if result['option_environment_name'].nil?
27
+ if @command.option_environment_id
28
+ result['option_environment_id'] = @command.option_environment_id
29
+ elsif @command.option_environment_name
30
+ result['option_environment_name'] = @command.option_environment_name
31
+ result['option_environment_id'] = @command.resolver.puppet_environment_id(
32
+ @command.resolver.scoped_options('environment', result, :single)
33
+ )
34
+ end
35
+ else
36
+ result['option_environment_id'] = @command.resolver.puppet_environment_id(
37
+ @command.resolver.scoped_options('environment', result, :single)
38
+ )
39
+ end
40
+ end
41
+
42
+ def put_puppet_environment_ids(result)
43
+ if result['option_environment_names'].nil?
44
+ if @command.option_environment_ids
45
+ result['option_environment_ids'] = @command.option_environment_ids
46
+ elsif @command.option_environment_names
47
+ result['option_environment_names'] = @command.option_environment_names
48
+ result['option_environment_ids'] = @command.resolver.puppet_environment_ids(
49
+ @command.resolver.scoped_options('environment', result, :multi)
50
+ )
51
+ end
52
+ else
53
+ result['option_environment_ids'] = @command.resolver.puppet_environment_ids(
54
+ @command.resolver.scoped_options('environment', result, :multi)
55
+ )
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end