hammer_cli_foreman 0.1.0 → 0.1.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.
Potentially problematic release.
This version of hammer_cli_foreman might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/README.md +12 -1
- data/doc/configuration.md +13 -0
- data/lib/hammer_cli_foreman.rb +3 -0
- data/lib/hammer_cli_foreman/architecture.rb +9 -9
- data/lib/hammer_cli_foreman/associating_commands.rb +57 -34
- data/lib/hammer_cli_foreman/commands.rb +188 -101
- data/lib/hammer_cli_foreman/common_parameter.rb +7 -10
- data/lib/hammer_cli_foreman/compute_resource.rb +8 -11
- data/lib/hammer_cli_foreman/domain.rb +14 -40
- data/lib/hammer_cli_foreman/environment.rb +10 -15
- data/lib/hammer_cli_foreman/exceptions.rb +4 -0
- data/lib/hammer_cli_foreman/fact.rb +5 -5
- data/lib/hammer_cli_foreman/host.rb +76 -132
- data/lib/hammer_cli_foreman/hostgroup.rb +26 -61
- data/lib/hammer_cli_foreman/id_resolver.rb +163 -0
- data/lib/hammer_cli_foreman/image.rb +14 -50
- data/lib/hammer_cli_foreman/location.rb +35 -17
- data/lib/hammer_cli_foreman/media.rb +9 -16
- data/lib/hammer_cli_foreman/model.rb +6 -8
- data/lib/hammer_cli_foreman/operating_system.rb +129 -63
- data/lib/hammer_cli_foreman/organization.rb +36 -16
- data/lib/hammer_cli_foreman/output/fields.rb +10 -2
- data/lib/hammer_cli_foreman/output/formatters.rb +44 -18
- data/lib/hammer_cli_foreman/parameter.rb +45 -41
- data/lib/hammer_cli_foreman/partition_table.rb +9 -12
- data/lib/hammer_cli_foreman/puppet_class.rb +14 -14
- data/lib/hammer_cli_foreman/references.rb +122 -0
- data/lib/hammer_cli_foreman/report.rb +3 -6
- data/lib/hammer_cli_foreman/searchables_option_builder.rb +99 -0
- data/lib/hammer_cli_foreman/smart_class_parameter.rb +17 -13
- data/lib/hammer_cli_foreman/smart_proxy.rb +18 -28
- data/lib/hammer_cli_foreman/subnet.rb +12 -13
- data/lib/hammer_cli_foreman/template.rb +10 -19
- data/lib/hammer_cli_foreman/user.rb +9 -28
- data/lib/hammer_cli_foreman/version.rb +1 -1
- data/locale/hammer-cli-foreman.pot +828 -817
- data/test/unit/apipie_resource_mock.rb +33 -11
- data/test/unit/architecture_test.rb +7 -10
- data/test/unit/commands_test.rb +8 -9
- data/test/unit/common_parameter_test.rb +6 -8
- data/test/unit/compute_resource_test.rb +9 -12
- data/test/unit/data/1.5/foreman_api.json +14130 -0
- data/test/unit/domain_test.rb +19 -22
- data/test/unit/environment_test.rb +9 -11
- data/test/unit/fact_test.rb +5 -6
- data/test/unit/helpers/command.rb +115 -59
- data/test/unit/helpers/fake_searchables.rb +19 -0
- data/test/unit/host_test.rb +44 -33
- data/test/unit/hostgroup_test.rb +19 -26
- data/test/unit/id_resolver_test.rb +225 -0
- data/test/unit/image_test.rb +16 -18
- data/test/unit/location_test.rb +8 -10
- data/test/unit/media_test.rb +11 -13
- data/test/unit/model_test.rb +8 -10
- data/test/unit/operating_system_test.rb +23 -23
- data/test/unit/organization_test.rb +9 -10
- data/test/unit/output/formatters_test.rb +133 -20
- data/test/unit/partition_table_test.rb +12 -9
- data/test/unit/puppet_class_test.rb +3 -7
- data/test/unit/report_test.rb +3 -7
- data/test/unit/searchables_option_builder_test.rb +172 -0
- data/test/unit/smart_class_parameter_test.rb +5 -7
- data/test/unit/smart_proxy_test.rb +11 -12
- data/test/unit/subnet_test.rb +15 -16
- data/test/unit/template_test.rb +15 -12
- data/test/unit/test_helper.rb +1 -1
- data/test/unit/user_test.rb +9 -12
- metadata +536 -509
@@ -22,39 +22,34 @@ module HammerCLIForeman
|
|
22
22
|
field :id, _("Id")
|
23
23
|
field :name, _("Name")
|
24
24
|
field :label, _("Label")
|
25
|
-
field
|
26
|
-
field
|
27
|
-
field
|
28
|
-
field :architecture_id, _("Architecture Id")
|
29
|
-
field :ptable_id, _("Partition Table Id")
|
30
|
-
field :medium_id, _("Medium Id")
|
31
|
-
field :puppet_ca_proxy_id, _("Puppet CA Proxy Id")
|
32
|
-
field :puppet_proxy_id, _("Puppet Master Proxy Id")
|
33
|
-
field :environment_id, _("Environment Id")
|
34
|
-
field :puppetclass_ids, _("Puppetclass Ids"), Fields::List
|
25
|
+
field nil, _("Operating System"), Fields::SingleReference, :key => :operatingsystem
|
26
|
+
field nil, _("Environment"), Fields::SingleReference, :key => :environment
|
27
|
+
field nil, _("Model"), Fields::SingleReference, :key => :model
|
35
28
|
field :ancestry, _("Ancestry")
|
36
29
|
end
|
37
30
|
|
38
|
-
|
31
|
+
build_options
|
39
32
|
end
|
40
33
|
|
41
34
|
|
42
35
|
class InfoCommand < HammerCLIForeman::InfoCommand
|
43
36
|
|
44
|
-
identifiers :id
|
45
|
-
|
46
37
|
output ListCommand.output_definition do
|
47
|
-
|
48
|
-
field nil, nil, Fields::KeyValue
|
49
|
-
end
|
50
|
-
end
|
38
|
+
field nil, _("Subnet"), Fields::SingleReference, :key => :subnet
|
51
39
|
|
52
|
-
|
53
|
-
|
54
|
-
|
40
|
+
field nil, _("Domain"), Fields::SingleReference, :key => :domain
|
41
|
+
field nil, _("Architecture"), Fields::SingleReference, :key => :architecture
|
42
|
+
field nil, _("Partition Table"), Fields::SingleReference, :key => :ptable
|
43
|
+
field nil, _("Medium"), Fields::SingleReference, :key => :medium
|
44
|
+
field :puppet_ca_proxy_id, _("Puppet CA Proxy Id")
|
45
|
+
field :puppet_proxy_id, _("Puppet Master Proxy Id")
|
46
|
+
field nil, _("ComputeProfile"), Fields::SingleReference, :key => :compute_profile
|
47
|
+
HammerCLIForeman::References.puppetclasses(self)
|
48
|
+
HammerCLIForeman::References.parameters(self)
|
49
|
+
HammerCLIForeman::References.taxonomies(self)
|
55
50
|
end
|
56
51
|
|
57
|
-
|
52
|
+
build_options
|
58
53
|
end
|
59
54
|
|
60
55
|
|
@@ -68,103 +63,73 @@ module HammerCLIForeman
|
|
68
63
|
success_message _("Hostgroup created")
|
69
64
|
failure_message _("Could not create the hostgroup")
|
70
65
|
|
71
|
-
|
66
|
+
build_options
|
72
67
|
end
|
73
68
|
|
74
69
|
|
75
70
|
class UpdateCommand < HammerCLIForeman::UpdateCommand
|
76
|
-
|
77
71
|
option "--puppetclass-ids", "PUPPETCLASS_IDS", " ",
|
78
72
|
:format => HammerCLI::Options::Normalizers::List.new
|
79
73
|
|
80
74
|
include HostgroupUpdateCreateCommons
|
81
75
|
|
82
|
-
identifiers :id
|
83
|
-
|
84
76
|
success_message _("Hostgroup updated")
|
85
77
|
failure_message _("Could not update the hostgroup")
|
86
78
|
|
87
|
-
|
79
|
+
build_options
|
88
80
|
end
|
89
81
|
|
90
82
|
|
91
83
|
class DeleteCommand < HammerCLIForeman::DeleteCommand
|
92
|
-
|
93
|
-
identifiers :id
|
94
|
-
|
95
84
|
success_message _("Hostgroup deleted")
|
96
85
|
failure_message _("Could not delete the hostgroup")
|
97
86
|
|
98
|
-
|
87
|
+
build_options
|
99
88
|
end
|
100
89
|
|
101
90
|
|
102
91
|
class PuppetClassesCommand < HammerCLIForeman::ListCommand
|
103
|
-
|
104
92
|
command_name "puppet-classes"
|
105
93
|
resource :puppetclasses
|
106
94
|
|
107
|
-
identifiers :id
|
108
|
-
|
109
95
|
output HammerCLIForeman::PuppetClass::ListCommand.output_definition
|
110
96
|
|
111
|
-
def
|
97
|
+
def send_request
|
112
98
|
HammerCLIForeman::PuppetClass::ListCommand.unhash_classes(super)
|
113
99
|
end
|
114
100
|
|
115
101
|
def request_params
|
116
102
|
params = method_options
|
117
|
-
params['hostgroup_id'] = get_identifier
|
103
|
+
params['hostgroup_id'] = get_identifier
|
118
104
|
params
|
119
105
|
end
|
120
106
|
|
121
|
-
|
107
|
+
build_options
|
122
108
|
end
|
123
109
|
|
124
110
|
|
125
111
|
class SetParameterCommand < HammerCLIForeman::Parameter::SetCommand
|
126
|
-
|
127
|
-
resource :parameters
|
128
|
-
|
129
112
|
desc _("Create or update parameter for a hostgroup.")
|
130
113
|
|
131
|
-
option "--hostgroup-id", "HOSTGROUP_ID", _("id of the hostgroup the parameter is being set for"), :required => true
|
132
|
-
|
133
114
|
success_message_for :update, _("Hostgroup parameter updated")
|
134
115
|
success_message_for :create, _("New hostgroup parameter created")
|
135
116
|
failure_message _("Could not set hostgroup parameter")
|
136
117
|
|
137
|
-
|
138
|
-
{
|
139
|
-
"hostgroup_id" => option_hostgroup_id
|
140
|
-
}
|
141
|
-
end
|
118
|
+
build_options
|
142
119
|
end
|
143
120
|
|
144
121
|
|
145
122
|
class DeleteParameterCommand < HammerCLIForeman::Parameter::DeleteCommand
|
146
|
-
|
147
|
-
resource :parameters
|
148
|
-
|
149
123
|
desc _("Delete parameter for a hostgroup.")
|
150
124
|
|
151
|
-
option "--hostgroup-id", "HOSTGROUP_ID", _("id of the hostgroup the parameter is being deleted for"), :required => true
|
152
|
-
|
153
125
|
success_message _("Hostgroup parameter deleted")
|
154
126
|
|
155
|
-
|
156
|
-
{
|
157
|
-
"hostgroup_id" => option_hostgroup_id
|
158
|
-
}
|
159
|
-
end
|
127
|
+
build_options
|
160
128
|
end
|
161
129
|
|
162
|
-
|
163
130
|
class SCParamsCommand < HammerCLIForeman::SmartClassParametersList
|
164
|
-
|
165
|
-
|
166
|
-
option ['--id', '--name'], 'HOSTGROUP_ID', _('hostgroup id/name'),
|
167
|
-
:attribute_name => :option_hostgroup_id, :required => true
|
131
|
+
parent_resource :hostgroups
|
132
|
+
build_options
|
168
133
|
end
|
169
134
|
|
170
135
|
|
@@ -0,0 +1,163 @@
|
|
1
|
+
module HammerCLIForeman
|
2
|
+
|
3
|
+
class Searchable
|
4
|
+
|
5
|
+
def initialize(name, description, options={})
|
6
|
+
@name = name
|
7
|
+
@description = description
|
8
|
+
@editable = options[:editable].nil? ? true : options[:editable]
|
9
|
+
end
|
10
|
+
|
11
|
+
attr_reader :name, :description
|
12
|
+
|
13
|
+
def editable?
|
14
|
+
@editable
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
class Searchables
|
20
|
+
|
21
|
+
SEARCHABLES = {
|
22
|
+
:user => [ Searchable.new("login", _("User's login to search by")) ],
|
23
|
+
:template => [],
|
24
|
+
:image => [],
|
25
|
+
:operatingsystem => []
|
26
|
+
}
|
27
|
+
DEFAULT_SEARCHABLES = [ Searchable.new("name", _("Name to search by")) ]
|
28
|
+
|
29
|
+
def for(resource)
|
30
|
+
SEARCHABLES[resource.singular_name.to_sym] || DEFAULT_SEARCHABLES
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
class IdResolver
|
36
|
+
|
37
|
+
attr_reader :api
|
38
|
+
|
39
|
+
def initialize(api, searchables)
|
40
|
+
@api = api
|
41
|
+
@searchables = searchables
|
42
|
+
define_id_finders
|
43
|
+
end
|
44
|
+
|
45
|
+
def scoped_options(scope, options)
|
46
|
+
prefix = HammerCLI.option_accessor_name("#{scope}_")
|
47
|
+
plain_prefix = HammerCLI.option_accessor_name("")
|
48
|
+
|
49
|
+
scoped_options = options.dup
|
50
|
+
options.each do |k, v|
|
51
|
+
if k.start_with? prefix
|
52
|
+
# remove the scope
|
53
|
+
# e.g. option_architecture_id -> option_id
|
54
|
+
scoped_options[k.sub(prefix, plain_prefix)] = v
|
55
|
+
scoped_options.delete(k)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
scoped_options
|
59
|
+
end
|
60
|
+
|
61
|
+
def dependent_resources(resource, options={})
|
62
|
+
options[:required] = (options[:required] == true)
|
63
|
+
options[:recursive] = !(options[:recursive] == false)
|
64
|
+
|
65
|
+
resolve_dependent_resources(resource, [], options)
|
66
|
+
end
|
67
|
+
|
68
|
+
def id_params(action, options={})
|
69
|
+
required = !(options[:required] == false)
|
70
|
+
|
71
|
+
params = action.params.reject{ |p| !(p.name.end_with?("_id")) }
|
72
|
+
params = params.reject{ |p| !(p.required?) } if required
|
73
|
+
params
|
74
|
+
end
|
75
|
+
|
76
|
+
def param_to_resource(param_name)
|
77
|
+
resource_name = param_name.gsub(/_id$/, "")
|
78
|
+
resource_name = ApipieBindings::Inflector.pluralize(resource_name.to_s).to_sym
|
79
|
+
begin
|
80
|
+
@api.resource(resource_name)
|
81
|
+
rescue NameError
|
82
|
+
nil
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
protected
|
87
|
+
|
88
|
+
def resolve_dependent_resources(resource, resources_found, options)
|
89
|
+
id_params(resource.action(:index), :required => options[:required]).each do |param|
|
90
|
+
res = param_to_resource(param.name)
|
91
|
+
if res and !resources_found.map(&:name).include?(res.name)
|
92
|
+
resources_found << res
|
93
|
+
resolve_dependent_resources(res, resources_found, options) if options[:recursive]
|
94
|
+
end
|
95
|
+
end
|
96
|
+
resources_found
|
97
|
+
end
|
98
|
+
|
99
|
+
def define_id_finders
|
100
|
+
@api.resources.each do |resource|
|
101
|
+
method_name = "#{resource.singular_name}_id"
|
102
|
+
|
103
|
+
self.class.send(:define_method, method_name) do |options|
|
104
|
+
get_id(resource.name, options)
|
105
|
+
end unless respond_to?(method_name)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def get_id(resource_name, options)
|
110
|
+
options[HammerCLI.option_accessor_name("id")] || find_resource(resource_name, options)['id']
|
111
|
+
end
|
112
|
+
|
113
|
+
def find_resource(resource_name, options)
|
114
|
+
resource = @api.resource(resource_name)
|
115
|
+
|
116
|
+
search_options = search_options(options, resource)
|
117
|
+
id_params(resource.action(:index), :required => true).each do |param|
|
118
|
+
search_options[param.name] ||= send(param.name, scoped_options(param.name.gsub(/_id$/, ""), options))
|
119
|
+
end
|
120
|
+
resource.action(:index).routes.each do |route|
|
121
|
+
route.params_in_path.each do |param|
|
122
|
+
key = HammerCLI.option_accessor_name(param.to_s)
|
123
|
+
if options[key]
|
124
|
+
search_options[param] ||= options[key]
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
results = resource.call(:index, search_options)
|
130
|
+
results = HammerCLIForeman.collection_to_common_format(results)
|
131
|
+
|
132
|
+
pick_result(results, resource)
|
133
|
+
end
|
134
|
+
|
135
|
+
def pick_result(results, resource)
|
136
|
+
raise ResolverError.new(_("%s not found") % resource.singular_name) if results.empty?
|
137
|
+
raise ResolverError.new(_("%s found more than once") % resource.singular_name) if results.count > 1
|
138
|
+
results[0]
|
139
|
+
end
|
140
|
+
|
141
|
+
def search_options(options, resource)
|
142
|
+
search_options = create_search_options(options, resource)
|
143
|
+
raise MissingSeachOptions.new(_("Missing options to search %s") % resource.singular_name) if search_options.empty?
|
144
|
+
search_options
|
145
|
+
end
|
146
|
+
|
147
|
+
def searchables(resource)
|
148
|
+
@searchables.for(resource)
|
149
|
+
end
|
150
|
+
|
151
|
+
def create_search_options(options, resource)
|
152
|
+
searchables(resource).each do |s|
|
153
|
+
value = options[HammerCLI.option_accessor_name(s.name.to_s)]
|
154
|
+
if value
|
155
|
+
return {:search => "#{s.name} = \"#{value}\""}
|
156
|
+
end
|
157
|
+
end
|
158
|
+
{}
|
159
|
+
end
|
160
|
+
|
161
|
+
end
|
162
|
+
|
163
|
+
end
|
@@ -12,12 +12,10 @@ module HammerCLIForeman
|
|
12
12
|
module ComputeResourceOptions
|
13
13
|
|
14
14
|
def self.included(base)
|
15
|
-
base.
|
16
|
-
base.option "--compute-resource-id", "COMPUTE_RESOURCE_ID", _("Compute resource's id")
|
17
|
-
base.apipie_options :without => [:compute_resource_id, :id]
|
15
|
+
base.build_options
|
18
16
|
|
19
17
|
base.validate_options do
|
20
|
-
any(:option_compute_resource_id, :
|
18
|
+
any(:option_compute_resource_id, :option_compute_resource_name).required
|
21
19
|
end
|
22
20
|
end
|
23
21
|
|
@@ -31,39 +29,24 @@ module HammerCLIForeman
|
|
31
29
|
output do
|
32
30
|
field :id, _("Id")
|
33
31
|
field :name, _("Name")
|
34
|
-
field
|
32
|
+
field nil, _("Operating System"), Fields::SingleReference, :key => :operatingsystem
|
35
33
|
field :username, _("Username")
|
36
34
|
field :uuid, _("UUID")
|
37
35
|
end
|
38
36
|
|
39
|
-
def request_params
|
40
|
-
params = super
|
41
|
-
params['compute_resource_id'] = option_compute_resource_id || option_compute_resource
|
42
|
-
params
|
43
|
-
end
|
44
|
-
|
45
37
|
end
|
46
38
|
|
47
39
|
|
48
40
|
class InfoCommand < HammerCLIForeman::InfoCommand
|
49
41
|
|
50
|
-
identifiers :id
|
51
42
|
include HammerCLIForeman::Image::ComputeResourceOptions
|
52
43
|
|
53
44
|
|
54
45
|
output ListCommand.output_definition do
|
55
|
-
field
|
46
|
+
field nil, _("Architecture"), Fields::SingleReference, :key => :architecture
|
56
47
|
field :iam_role, _("IAM role")
|
57
|
-
|
58
|
-
field :updated_at, _("Updated at"), Fields::Date
|
59
|
-
end
|
60
|
-
|
61
|
-
def request_params
|
62
|
-
params = super
|
63
|
-
params['compute_resource_id'] = option_compute_resource_id || option_compute_resource
|
64
|
-
params
|
48
|
+
HammerCLIForeman::References.timestamps(self)
|
65
49
|
end
|
66
|
-
|
67
50
|
end
|
68
51
|
|
69
52
|
|
@@ -73,19 +56,22 @@ module HammerCLIForeman
|
|
73
56
|
command_name 'available'
|
74
57
|
desc _("Show images available for addition")
|
75
58
|
|
76
|
-
|
59
|
+
option "--compute-resource-id", "ID", " "
|
60
|
+
option "--compute-resource", "NAME", " ", :attribute_name => :option_compute_resource_name
|
77
61
|
|
78
|
-
|
79
|
-
field :name, _("Name")
|
80
|
-
field :uuid, _("UUID")
|
81
|
-
end
|
62
|
+
include HammerCLIForeman::Image::ComputeResourceOptions
|
82
63
|
|
83
64
|
def request_params
|
84
65
|
params = super
|
85
|
-
params['id']
|
66
|
+
params['id'] ||= get_identifier
|
86
67
|
params
|
87
68
|
end
|
88
69
|
|
70
|
+
output do
|
71
|
+
field :name, _("Name")
|
72
|
+
field :uuid, _("UUID")
|
73
|
+
end
|
74
|
+
|
89
75
|
end
|
90
76
|
|
91
77
|
|
@@ -95,46 +81,24 @@ module HammerCLIForeman
|
|
95
81
|
|
96
82
|
success_message _("Image created")
|
97
83
|
failure_message _("Could not create the image")
|
98
|
-
|
99
|
-
def request_params
|
100
|
-
params = super
|
101
|
-
params['compute_resource_id'] = option_compute_resource_id || option_compute_resource
|
102
|
-
params
|
103
|
-
end
|
104
84
|
end
|
105
85
|
|
106
86
|
|
107
87
|
class UpdateCommand < HammerCLIForeman::UpdateCommand
|
108
88
|
|
109
|
-
identifiers :id
|
110
89
|
include HammerCLIForeman::Image::ComputeResourceOptions
|
111
90
|
|
112
91
|
success_message _("Image updated")
|
113
92
|
failure_message _("Could not update the image")
|
114
|
-
|
115
|
-
def request_params
|
116
|
-
params = super
|
117
|
-
params['compute_resource_id'] = option_compute_resource_id || option_compute_resource
|
118
|
-
params
|
119
|
-
end
|
120
|
-
|
121
93
|
end
|
122
94
|
|
123
95
|
|
124
96
|
class DeleteCommand < HammerCLIForeman::DeleteCommand
|
125
97
|
|
126
|
-
identifiers :id
|
127
98
|
include HammerCLIForeman::Image::ComputeResourceOptions
|
128
99
|
|
129
100
|
success_message _("Image deleted")
|
130
101
|
failure_message _("Could not delete the image")
|
131
|
-
|
132
|
-
def request_params
|
133
|
-
params = super
|
134
|
-
params['compute_resource_id'] = option_compute_resource_id || option_compute_resource
|
135
|
-
params
|
136
|
-
end
|
137
|
-
|
138
102
|
end
|
139
103
|
|
140
104
|
autoload_subcommands
|