hammer_cli_foreman 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of hammer_cli_foreman might be problematic. Click here for more details.

Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +12 -1
  3. data/doc/configuration.md +13 -0
  4. data/lib/hammer_cli_foreman.rb +3 -0
  5. data/lib/hammer_cli_foreman/architecture.rb +9 -9
  6. data/lib/hammer_cli_foreman/associating_commands.rb +57 -34
  7. data/lib/hammer_cli_foreman/commands.rb +188 -101
  8. data/lib/hammer_cli_foreman/common_parameter.rb +7 -10
  9. data/lib/hammer_cli_foreman/compute_resource.rb +8 -11
  10. data/lib/hammer_cli_foreman/domain.rb +14 -40
  11. data/lib/hammer_cli_foreman/environment.rb +10 -15
  12. data/lib/hammer_cli_foreman/exceptions.rb +4 -0
  13. data/lib/hammer_cli_foreman/fact.rb +5 -5
  14. data/lib/hammer_cli_foreman/host.rb +76 -132
  15. data/lib/hammer_cli_foreman/hostgroup.rb +26 -61
  16. data/lib/hammer_cli_foreman/id_resolver.rb +163 -0
  17. data/lib/hammer_cli_foreman/image.rb +14 -50
  18. data/lib/hammer_cli_foreman/location.rb +35 -17
  19. data/lib/hammer_cli_foreman/media.rb +9 -16
  20. data/lib/hammer_cli_foreman/model.rb +6 -8
  21. data/lib/hammer_cli_foreman/operating_system.rb +129 -63
  22. data/lib/hammer_cli_foreman/organization.rb +36 -16
  23. data/lib/hammer_cli_foreman/output/fields.rb +10 -2
  24. data/lib/hammer_cli_foreman/output/formatters.rb +44 -18
  25. data/lib/hammer_cli_foreman/parameter.rb +45 -41
  26. data/lib/hammer_cli_foreman/partition_table.rb +9 -12
  27. data/lib/hammer_cli_foreman/puppet_class.rb +14 -14
  28. data/lib/hammer_cli_foreman/references.rb +122 -0
  29. data/lib/hammer_cli_foreman/report.rb +3 -6
  30. data/lib/hammer_cli_foreman/searchables_option_builder.rb +99 -0
  31. data/lib/hammer_cli_foreman/smart_class_parameter.rb +17 -13
  32. data/lib/hammer_cli_foreman/smart_proxy.rb +18 -28
  33. data/lib/hammer_cli_foreman/subnet.rb +12 -13
  34. data/lib/hammer_cli_foreman/template.rb +10 -19
  35. data/lib/hammer_cli_foreman/user.rb +9 -28
  36. data/lib/hammer_cli_foreman/version.rb +1 -1
  37. data/locale/hammer-cli-foreman.pot +828 -817
  38. data/test/unit/apipie_resource_mock.rb +33 -11
  39. data/test/unit/architecture_test.rb +7 -10
  40. data/test/unit/commands_test.rb +8 -9
  41. data/test/unit/common_parameter_test.rb +6 -8
  42. data/test/unit/compute_resource_test.rb +9 -12
  43. data/test/unit/data/1.5/foreman_api.json +14130 -0
  44. data/test/unit/domain_test.rb +19 -22
  45. data/test/unit/environment_test.rb +9 -11
  46. data/test/unit/fact_test.rb +5 -6
  47. data/test/unit/helpers/command.rb +115 -59
  48. data/test/unit/helpers/fake_searchables.rb +19 -0
  49. data/test/unit/host_test.rb +44 -33
  50. data/test/unit/hostgroup_test.rb +19 -26
  51. data/test/unit/id_resolver_test.rb +225 -0
  52. data/test/unit/image_test.rb +16 -18
  53. data/test/unit/location_test.rb +8 -10
  54. data/test/unit/media_test.rb +11 -13
  55. data/test/unit/model_test.rb +8 -10
  56. data/test/unit/operating_system_test.rb +23 -23
  57. data/test/unit/organization_test.rb +9 -10
  58. data/test/unit/output/formatters_test.rb +133 -20
  59. data/test/unit/partition_table_test.rb +12 -9
  60. data/test/unit/puppet_class_test.rb +3 -7
  61. data/test/unit/report_test.rb +3 -7
  62. data/test/unit/searchables_option_builder_test.rb +172 -0
  63. data/test/unit/smart_class_parameter_test.rb +5 -7
  64. data/test/unit/smart_proxy_test.rb +11 -12
  65. data/test/unit/subnet_test.rb +15 -16
  66. data/test/unit/template_test.rb +15 -12
  67. data/test/unit/test_helper.rb +1 -1
  68. data/test/unit/user_test.rb +9 -12
  69. metadata +536 -509
@@ -0,0 +1,122 @@
1
+ module HammerCLIForeman
2
+
3
+ module References
4
+
5
+
6
+ def self.timestamps(dsl)
7
+ dsl.build do
8
+ field :created_at, _("Created at"), Fields::Date
9
+ field :updated_at, _("Updated at"), Fields::Date
10
+ end
11
+ end
12
+
13
+ def self.taxonomies(dsl)
14
+ dsl.build do
15
+ collection :locations, _("Locations"), :numbered => false, :hide_blank => true do
16
+ custom_field Fields::Reference
17
+ end
18
+ collection :organizations, _("Organizations"), :numbered => false, :hide_blank => true do
19
+ custom_field Fields::Reference
20
+ end
21
+ end
22
+ end
23
+
24
+ def self.users(dsl)
25
+ dsl.build do
26
+ collection :users, _("Users"), :numbered => false do
27
+ custom_field Fields::Reference, :name_key => :login
28
+ end
29
+ end
30
+ end
31
+
32
+ def self.smart_proxies(dsl)
33
+ dsl.build do
34
+ collection :smart_proxies, _("Smart proxies"), :numbered => false do
35
+ custom_field Fields::Reference
36
+ end
37
+ end
38
+ end
39
+
40
+ def self.compute_resources(dsl)
41
+ dsl.build do
42
+ collection :compute_resources, _("Compute resources"), :numbered => false do
43
+ custom_field Fields::Reference
44
+ end
45
+ end
46
+ end
47
+
48
+ def self.media(dsl)
49
+ dsl.build do
50
+ collection :media, _("Installation media"), :numbered => false do
51
+ custom_field Fields::Reference
52
+ end
53
+ end
54
+ end
55
+
56
+ def self.config_templates(dsl)
57
+ dsl.build do
58
+ collection :config_templates, _("Templates"), :numbered => false do
59
+ custom_field Fields::Template
60
+ end
61
+ end
62
+ end
63
+
64
+ def self.domains(dsl)
65
+ dsl.build do
66
+ collection :domains, _("Domains"), :numbered => false do
67
+ custom_field Fields::Reference
68
+ end
69
+ end
70
+ end
71
+
72
+ def self.environments(dsl)
73
+ dsl.build do
74
+ collection :environments, _("Environments"), :numbered => false do
75
+ custom_field Fields::Reference
76
+ end
77
+ end
78
+ end
79
+
80
+ def self.hostgroups(dsl)
81
+ dsl.build do
82
+ collection :hostgroups, _("Hostgroups"), :numbered => false do
83
+ custom_field Fields::Reference
84
+ end
85
+ end
86
+ end
87
+
88
+ def self.subnets(dsl)
89
+ dsl.build do
90
+ collection :subnets, _("Subnets"), :numbered => false do
91
+ custom_field Fields::Reference, :details => :network_address
92
+ end
93
+ end
94
+ end
95
+
96
+
97
+ def self.parameters(dsl)
98
+ dsl.build do
99
+ collection :parameters, _("Parameters"), :numbered => false do
100
+ custom_field Fields::KeyValue
101
+ end
102
+ end
103
+ end
104
+
105
+ def self.puppetclasses(dsl)
106
+ dsl.build do
107
+ collection :puppetclasses, _("Puppetclasses"), :numbered => false do
108
+ custom_field Fields::Reference
109
+ end
110
+ end
111
+ end
112
+
113
+ def self.operating_systems(dsl)
114
+ dsl.build do
115
+ collection :operatingsystems, _("Operating systems"), :numbered => false do
116
+ custom_field Fields::Reference, :name_key => :fullname
117
+ end
118
+ end
119
+ end
120
+
121
+ end
122
+ end
@@ -20,14 +20,12 @@ module HammerCLIForeman
20
20
  end
21
21
  end
22
22
 
23
- apipie_options
23
+ build_options
24
24
  end
25
25
 
26
26
 
27
27
  class InfoCommand < HammerCLIForeman::InfoCommand
28
28
 
29
- identifiers :id
30
-
31
29
  output do
32
30
  field :id, _("Id")
33
31
  field :host_name, _("Host")
@@ -70,16 +68,15 @@ module HammerCLIForeman
70
68
  end
71
69
  end
72
70
 
73
- apipie_options
71
+ build_options
74
72
  end
75
73
 
76
74
 
77
75
  class DeleteCommand < HammerCLIForeman::DeleteCommand
78
- identifiers :id
79
76
  success_message _("Report has been deleted")
80
77
  failure_message _("Could not delete the report")
81
78
 
82
- apipie_options
79
+ build_options
83
80
  end
84
81
 
85
82
 
@@ -0,0 +1,99 @@
1
+
2
+ module HammerCLIForeman
3
+
4
+ class SearchablesOptionBuilder < HammerCLI::AbstractOptionBuilder
5
+
6
+ def initialize(resource, searchables)
7
+ @resource = resource
8
+ @searchables = searchables
9
+ end
10
+
11
+ def build(builder_params={})
12
+ @searchables.for(@resource).collect do |s|
13
+ option(
14
+ optionamize("--#{s.name}"),
15
+ s.name.upcase,
16
+ s.description
17
+ )
18
+ end
19
+ end
20
+ end
21
+
22
+
23
+ class DependentSearchablesOptionBuilder < HammerCLI::AbstractOptionBuilder
24
+
25
+ def initialize(dependent_resources, searchables)
26
+ @dependent_resources = dependent_resources.is_a?(Array) ? dependent_resources : [dependent_resources]
27
+ @searchables = searchables
28
+ end
29
+
30
+
31
+ def build(builder_params={})
32
+ @dependent_resources.collect do |res|
33
+ dependent_options(res)
34
+ end.flatten(1)
35
+ end
36
+
37
+ def dependent_options(resource)
38
+ options = []
39
+ searchables = @searchables.for(resource)
40
+ resource_name = resource.singular_name
41
+
42
+ unless searchables.empty?
43
+ first = searchables[0]
44
+ remaining = searchables[1..-1] || []
45
+
46
+ # First option is named by the resource
47
+ # Eg. --organization with accessor option_organization_name
48
+ options << option(
49
+ optionamize("--#{resource_name}"),
50
+ "#{resource_name}_#{first.name}".upcase,
51
+ " ",
52
+ :attribute_name => HammerCLI.option_accessor_name("#{resource_name}_#{first.name}")
53
+ )
54
+
55
+ # Other options are named by the resource plus the searchable name
56
+ # Eg. --organization-label with accessor option_organization_label
57
+ remaining.each do |s|
58
+ options << option(
59
+ optionamize("--#{resource_name}-#{s.name}"),
60
+ "#{resource_name}_#{s.name}".upcase,
61
+ " "
62
+ )
63
+ end
64
+ end
65
+
66
+ options << option(
67
+ optionamize("--#{resource_name}-id"),
68
+ "#{resource_name}_id".upcase,
69
+ " "
70
+ )
71
+ options
72
+ end
73
+
74
+ end
75
+
76
+ class SearchablesUpdateOptionBuilder < HammerCLI::AbstractOptionBuilder
77
+
78
+ def initialize(resource, searchables)
79
+ @resource = resource
80
+ @searchables = searchables
81
+ end
82
+
83
+ def build(builder_params={})
84
+
85
+ @searchables.for(@resource).collect do |s|
86
+ if s.editable?
87
+ option(
88
+ optionamize("--new-#{s.name}"),
89
+ "NEW_#{s.name.upcase}",
90
+ " "
91
+ )
92
+ end
93
+ end.compact
94
+ end
95
+
96
+ end
97
+
98
+
99
+ end
@@ -1,6 +1,6 @@
1
1
  module HammerCLIForeman
2
2
 
3
- class SmartClassParametersBriefList < HammerCLIForeman::ListCommand
3
+ class SmartClassParametersBriefList < HammerCLIForeman::AssociatedResourceListCommand
4
4
  resource :smart_class_parameters, :index
5
5
  command_name 'sc-params'
6
6
 
@@ -12,13 +12,18 @@ module HammerCLIForeman
12
12
  field :override, _("Override")
13
13
  end
14
14
 
15
- def retrieve_data
15
+ def send_request
16
16
  res = super
17
17
  # FIXME: API returns doubled records, probably just if filtered by puppetclasses
18
18
  # it seems group by environment is missing
19
19
  # having the uniq to fix that
20
20
  HammerCLI::Output::RecordCollection.new(res.uniq, :meta => res.meta)
21
21
  end
22
+
23
+ def self.build_options(options={})
24
+ options[:without] ||= [:host_id, :hostgroup_id, :puppetclass_id, :environment_id]
25
+ super(options)
26
+ end
22
27
  end
23
28
 
24
29
  class SmartClassParametersList < SmartClassParametersBriefList
@@ -35,9 +40,11 @@ module HammerCLIForeman
35
40
 
36
41
  resource :smart_class_parameters
37
42
 
38
- class ListCommand < HammerCLIForeman::SmartClassParametersList
39
- command_name 'list'
40
- apipie_options
43
+ class ListCommand < HammerCLIForeman::ListCommand
44
+
45
+ output SmartClassParametersList.output_definition
46
+
47
+ build_options
41
48
  end
42
49
 
43
50
  class InfoCommand < HammerCLIForeman::InfoCommand
@@ -46,8 +53,7 @@ module HammerCLIForeman
46
53
  field :description, _("Description")
47
54
  field :parameter_type, _("Type")
48
55
  field :required, _("Required")
49
- field :_environments, _("Environments"), Fields::List
50
- field :_environment_ids, _("Environment Ids"), Fields::List
56
+
51
57
  label _("Validator") do
52
58
  field :validator_type, _("Type")
53
59
  field :validator_rule, _("Rule")
@@ -63,18 +69,16 @@ module HammerCLIForeman
63
69
  end
64
70
  end
65
71
  end
66
- field :created_at, _("Created at"), Fields::Date
67
- field :updated_at, _("Updated at"), Fields::Date
72
+ HammerCLIForeman::References.environments(self)
73
+ HammerCLIForeman::References.timestamps(self)
68
74
  end
69
75
 
70
76
  def extend_data(res)
71
77
  res['override_value_order'] = res['override_value_order'].split("\n")
72
- res['_environments'] = res['environments'].map { |e| e['name']}
73
- res['_environment_ids'] = res['environments'].map { |e| e['id']}
74
78
  res
75
79
  end
76
80
 
77
- apipie_options
81
+ build_options
78
82
  end
79
83
 
80
84
  class UpdateCommand < HammerCLIForeman::UpdateCommand
@@ -82,7 +86,7 @@ module HammerCLIForeman
82
86
  success_message _("Parameter updated")
83
87
  failure_message _("Could not update the parameter")
84
88
 
85
- apipie_options :without => [:parameter_type, :validator_type, :id, :override, :required]
89
+ build_options :without => [:parameter_type, :validator_type, :override, :required]
86
90
 
87
91
  option "--override", "OVERRIDE", _("Override this parameter."),
88
92
  :format => HammerCLI::Options::Normalizers::Bool.new
@@ -6,72 +6,62 @@ module HammerCLIForeman
6
6
 
7
7
  class ListCommand < HammerCLIForeman::ListCommand
8
8
 
9
- action :index
10
-
11
9
  #FIXME: search by unknown type returns 500 from the server, propper error handling should resove this
12
10
  output do
13
11
  field :id, _("Id")
14
12
  field :name, _("Name")
15
13
  field :url, _("URL")
14
+ field :_features, _( "Features"), Fields::List, :width => 25, :hide_blank => true
15
+ end
16
+
17
+ def extend_data(proxy)
18
+ proxy['_features'] = proxy['features'].map { |f| f['name'] } if proxy['features']
19
+ proxy
16
20
  end
17
21
 
18
- apipie_options
22
+ build_options
19
23
  end
20
24
 
21
25
 
22
26
  class InfoCommand < HammerCLIForeman::InfoCommand
23
27
 
24
- action :show
25
-
26
28
  output ListCommand.output_definition do
27
- field :_features, _( "Features"), Fields::List
28
- field :created_at, _("Created at"), Fields::Date
29
- field :updated_at, _("Updated at"), Fields::Date
30
- end
31
-
32
- def extend_data(proxy)
33
- proxy['_features'] = proxy['features'].map { |f| f['name'] }
34
- proxy
29
+ collection :features, _("Features"), :numbered => false do
30
+ custom_field Fields::Reference
31
+ end
32
+ HammerCLIForeman::References.taxonomies(self)
33
+ HammerCLIForeman::References.timestamps(self)
35
34
  end
36
35
 
37
- apipie_options
36
+ build_options
38
37
  end
39
38
 
40
39
 
41
40
  class CreateCommand < HammerCLIForeman::CreateCommand
42
-
43
- action :create
44
-
45
41
  success_message _("Smart proxy created")
46
42
  failure_message _("Could not create the proxy")
47
43
 
48
- apipie_options
44
+ build_options
49
45
  end
50
46
 
51
47
 
52
48
  class UpdateCommand < HammerCLIForeman::UpdateCommand
53
-
54
- action :update
55
-
56
49
  success_message _("Smart proxy updated")
57
50
  failure_message _("Could not update the proxy")
58
51
 
59
- apipie_options
52
+ build_options
60
53
  end
61
54
 
62
55
 
63
56
  class DeleteCommand < HammerCLIForeman::DeleteCommand
64
-
65
- action :destroy
66
-
67
57
  success_message _("Smart proxy deleted")
68
58
  failure_message _("Could not delete the proxy")
69
59
 
70
- apipie_options
60
+ build_options
71
61
  end
72
62
 
73
63
 
74
- class ImportPuppetClassesCommand < HammerCLIForeman::WriteCommand
64
+ class ImportPuppetClassesCommand < HammerCLIForeman::Command
75
65
 
76
66
  action :import_puppetclasses
77
67
 
@@ -81,7 +71,7 @@ module HammerCLIForeman
81
71
 
82
72
  option "--dryrun", :flag, _("Do not run the import")
83
73
 
84
- apipie_options :without => [:smart_proxy_id, :dryrun]
74
+ build_options :without => [:smart_proxy_id, :dryrun]
85
75
 
86
76
  def request_params
87
77
  opts = super
@@ -13,7 +13,7 @@ module HammerCLIForeman
13
13
  field :mask, _("Mask")
14
14
  end
15
15
 
16
- apipie_options
16
+ build_options
17
17
  end
18
18
 
19
19
 
@@ -21,22 +21,21 @@ module HammerCLIForeman
21
21
 
22
22
  output ListCommand.output_definition do
23
23
  field :priority, _("Priority")
24
- field :dns_id, _("DNS id")
25
- field :dns, _("DNS"), Fields::Server
24
+ field :dns, _("DNS"), Fields::Reference, :details => :url
26
25
  field :dns_primary, _("Primary DNS")
27
26
  field :dns_secondary, _("Secondary DNS")
28
- field :domain_ids, _("Domain ids"), Fields::List
29
- field :tftp, _("TFTP"), Fields::Server
30
- field :tftp_id, _("TFTP id")
31
- field :dhcp, _("DHCP"), Fields::Server
32
- field :dhcp_id, _("DHCP id")
33
- field :vlanid, _("vlan id")
27
+ field :tftp, _("TFTP"), Fields::Reference, :details => :url
28
+ field :dhcp, _("DHCP"), Fields::Reference, :details => :url
29
+
30
+ field :vlanid, _("VLAN ID")
34
31
  field :gateway, _("Gateway")
35
32
  field :from, _("From")
36
33
  field :to, _("To")
34
+ HammerCLIForeman::References.domains(self)
35
+ HammerCLIForeman::References.taxonomies(self)
37
36
  end
38
37
 
39
- apipie_options
38
+ build_options
40
39
  end
41
40
 
42
41
 
@@ -45,7 +44,7 @@ module HammerCLIForeman
45
44
  success_message _("Subnet created")
46
45
  failure_message _("Could not create the subnet")
47
46
 
48
- apipie_options
47
+ build_options
49
48
  end
50
49
 
51
50
 
@@ -54,7 +53,7 @@ module HammerCLIForeman
54
53
  success_message _("Subnet updated")
55
54
  failure_message _("Could not update the subnet")
56
55
 
57
- apipie_options
56
+ build_options
58
57
  end
59
58
 
60
59
 
@@ -63,7 +62,7 @@ module HammerCLIForeman
63
62
  success_message _("Subnet deleted")
64
63
  failure_message _("Could not delete the subnet")
65
64
 
66
- apipie_options
65
+ build_options
67
66
  end
68
67
 
69
68
  autoload_subcommands