hammer_cli_foreman 0.10.2 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/config/foreman.yml +4 -0
- data/doc/release_notes.md +21 -5
- data/lib/hammer_cli_foreman/api/connection.rb +14 -5
- data/lib/hammer_cli_foreman/api/interactive_basic_auth.rb +17 -5
- data/lib/hammer_cli_foreman/api/session_authenticator_wrapper.rb +27 -8
- data/lib/hammer_cli_foreman/auth.rb +14 -10
- data/lib/hammer_cli_foreman/auth_source_ldap.rb +38 -34
- data/lib/hammer_cli_foreman/compute_resource.rb +24 -0
- data/lib/hammer_cli_foreman/filter.rb +6 -2
- data/lib/hammer_cli_foreman/host.rb +2 -7
- data/lib/hammer_cli_foreman/hostgroup.rb +1 -0
- data/lib/hammer_cli_foreman/id_resolver.rb +27 -7
- data/lib/hammer_cli_foreman/location.rb +1 -0
- data/lib/hammer_cli_foreman/organization.rb +1 -0
- data/lib/hammer_cli_foreman/references.rb +10 -2
- data/lib/hammer_cli_foreman/smart_class_parameter.rb +10 -1
- data/lib/hammer_cli_foreman/smart_variable.rb +24 -16
- data/lib/hammer_cli_foreman/subnet.rb +33 -3
- data/lib/hammer_cli_foreman/template.rb +1 -1
- data/lib/hammer_cli_foreman/testing/api_expectations.rb +3 -1
- data/lib/hammer_cli_foreman/user.rb +37 -3
- data/lib/hammer_cli_foreman/version.rb +1 -1
- data/locale/ca/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/de/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/en/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/en_GB/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/es/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/fr/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/it/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/ja/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/ko/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/pt_BR/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/ru/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/zh_CN/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/locale/zh_TW/LC_MESSAGES/hammer-cli-foreman.mo +0 -0
- data/test/functional/filter_test.rb +146 -0
- data/test/functional/host_test.rb +12 -0
- data/test/functional/smart_variable_test.rb +4 -4
- data/test/functional/template_test.rb +20 -0
- data/test/functional/user_test.rb +13 -13
- data/test/unit/api/interactive_basic_auth_test.rb +18 -0
- data/test/unit/api/session_authenticator_wrapper_test.rb +72 -2
- data/test/unit/apipie_resource_mock.rb +3 -0
- data/test/unit/auth_source_ldap_test.rb +2 -3
- data/test/unit/commands_test.rb +1 -1
- data/test/unit/compute_resource_test.rb +24 -0
- data/test/unit/host_test.rb +1 -1
- data/test/unit/hostgroup_test.rb +1 -1
- data/test/unit/id_resolver_test.rb +59 -21
- data/test/unit/subnet_test.rb +1 -0
- data/test/unit/user_test.rb +7 -1
- metadata +35 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5bbff81f4608f3747313bf8525acb14c1734db93
|
4
|
+
data.tar.gz: 9fe96408c5e413b1731c4196d1cb62c80895a20d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 080d7ba7ce6424c9bf4ff975e3d3bf63336cb565d96455fa4e07e317cc447eb52b8c5ede99de581c5026f259fb9e7f9943acc6dec41651137e732ae654639067
|
7
|
+
data.tar.gz: 94cbec39dca93447a6105586a948f2c5708b8dad4563731d5203ec303c579fa9612003d993eadc186a0e248e8976dae2b11cecc32ad83356339185ecec92fc25
|
data/config/foreman.yml
CHANGED
@@ -8,6 +8,10 @@
|
|
8
8
|
# Credentials. You'll be asked for them interactively if you leave them blank here
|
9
9
|
:username: 'admin'
|
10
10
|
#:password: 'example'
|
11
|
+
|
12
|
+
# Enable using sessions
|
13
|
+
# When sessions are enabled, hammer ignores credentials stored in the config file
|
14
|
+
# and asks for them interactively at the begining of each session.
|
11
15
|
:use_sessions: false
|
12
16
|
|
13
17
|
# Check API documentation cache status on each request
|
data/doc/release_notes.md
CHANGED
@@ -1,19 +1,35 @@
|
|
1
1
|
Release notes
|
2
2
|
=============
|
3
3
|
|
4
|
-
### 0.
|
4
|
+
### 0.11.0 (2017-08-01)
|
5
|
+
* Adding a list normalizer to override-value-order ([#17135](http://projects.theforeman.org/issues/17135))
|
6
|
+
* Correctly reset taxonomies for overriding filters ([#20117](http://projects.theforeman.org/issues/20117))
|
7
|
+
* Sessions mutually exclusive with basic auth ([#20315](http://projects.theforeman.org/issues/20315))
|
8
|
+
* Disable auth login when sessions are off ([#19602](http://projects.theforeman.org/issues/19602))
|
9
|
+
* Add all_parameters to host info ([#20286](http://projects.theforeman.org/issues/20286))
|
10
|
+
* Fix Hammer-cli display groups base dn ([#20227](http://projects.theforeman.org/issues/20227))
|
11
|
+
* Fix Hammer-cli current user password update ([#18005](http://projects.theforeman.org/issues/18005))
|
12
|
+
* Don't send snippet flag when --type is undefined ([#20145](http://projects.theforeman.org/issues/20145))
|
13
|
+
* Fix merging .edit.po into .po files ([#17671](http://projects.theforeman.org/issues/17671))
|
14
|
+
* Enable taxonomy titles ([#19157](http://projects.theforeman.org/issues/19157))
|
5
15
|
* Provide default exception handler ([#19470](http://projects.theforeman.org/issues/19470))
|
16
|
+
* Accept hostgroup title in host create ([#19048](http://projects.theforeman.org/issues/19048))
|
6
17
|
* Retry command on session expiry ([#19431](http://projects.theforeman.org/issues/19431))
|
7
18
|
* More detailed instructions on SSL verification fail ([#19390](http://projects.theforeman.org/issues/19390))
|
8
|
-
|
9
|
-
|
19
|
+
* Add additional attributes on user list command ([#4396](http://projects.theforeman.org/issues/4396))
|
20
|
+
* Add description to hostgroup ([#19361](http://projects.theforeman.org/issues/19361))
|
10
21
|
* Require apipie-bindings >= 0.2.0 ([#19362](http://projects.theforeman.org/issues/19362))
|
11
|
-
* Require rest-client >= 1.8.0 ([
|
12
|
-
*
|
22
|
+
* Require rest-client >= 1.8.0 ([#19358](http://projects.theforeman.org/issues/19358))
|
23
|
+
* Rustom error for 401 unauthorized ([#19362](http://projects.theforeman.org/issues/19362))
|
24
|
+
* Correctly resolve empty arrays ([#18742](http://projects.theforeman.org/issues/18742))
|
13
25
|
* Use Array for empty attributes ([#19312](http://projects.theforeman.org/issues/19312))
|
26
|
+
* Compute-resources has images subcommand ([#19156](http://projects.theforeman.org/issues/19156))
|
14
27
|
* Prevent sending nil values in hostgroup update ([#14872](http://projects.theforeman.org/issues/14872))
|
15
28
|
* Install server CA cert without root access ([#19083](http://projects.theforeman.org/issues/19083))
|
29
|
+
* Add description to subnet ([#19172](http://projects.theforeman.org/issues/19172))
|
30
|
+
* Replaces --subnet-parameters-attributes with parameter commands ([#18663](http://projects.theforeman.org/issues/18663))
|
16
31
|
* Make session authenticator compatible with rest-client 1.8 ([#19159](http://projects.theforeman.org/issues/19159))
|
32
|
+
* Add vlan id field to subnet ([#19134](http://projects.theforeman.org/issues/19134))
|
17
33
|
|
18
34
|
### 0.10.0 (2017-03-28)
|
19
35
|
* Adding --hidden-value option to parameters (#290) ([#18878](http://projects.theforeman.org/issues/18878))
|
@@ -36,11 +36,20 @@ module HammerCLIForeman
|
|
36
36
|
if ssl_cert_authentication?(settings) && !use_basic_auth?(settings)
|
37
37
|
@authenticator = VoidAuth.new
|
38
38
|
else
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
39
|
+
if settings.get(:foreman, :use_sessions)
|
40
|
+
@authenticator = InteractiveBasicAuth.new(
|
41
|
+
settings.get(:_params, :username) || ENV['FOREMAN_USERNAME'],
|
42
|
+
settings.get(:_params, :password) || ENV['FOREMAN_PASSWORD']
|
43
|
+
)
|
44
|
+
@authenticator = SessionAuthenticatorWrapper.new(@authenticator, uri)
|
45
|
+
else
|
46
|
+
username = settings.get(:_params, :username) || ENV['FOREMAN_USERNAME'] || settings.get(:foreman, :username)
|
47
|
+
password = settings.get(:_params, :password) || ENV['FOREMAN_PASSWORD']
|
48
|
+
if (password.nil? && (username == settings.get(:foreman, :username)))
|
49
|
+
password = settings.get(:foreman, :password)
|
50
|
+
end
|
51
|
+
@authenticator = InteractiveBasicAuth.new(username, password)
|
52
|
+
end
|
44
53
|
@authenticator
|
45
54
|
end
|
46
55
|
end
|
@@ -12,19 +12,31 @@ module HammerCLIForeman
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def error(ex)
|
15
|
-
|
15
|
+
if ex.is_a?(RestClient::Unauthorized)
|
16
|
+
self.clear
|
17
|
+
return UnauthorizedError.new(_("Invalid username or password"))
|
18
|
+
end
|
16
19
|
end
|
17
20
|
|
18
21
|
def status
|
19
22
|
unless @user.nil? || @password.nil?
|
20
|
-
_("
|
23
|
+
_("Using configured credentials for user '%s'.") % @user
|
21
24
|
else
|
22
|
-
_("
|
25
|
+
_("Credentials are not configured.")
|
23
26
|
end
|
24
27
|
end
|
25
28
|
|
26
|
-
def user
|
27
|
-
@user
|
29
|
+
def user(ask=nil)
|
30
|
+
@user ||= ask && get_user
|
31
|
+
end
|
32
|
+
|
33
|
+
def set_credentials(user, password)
|
34
|
+
@user = user
|
35
|
+
@password = password
|
36
|
+
end
|
37
|
+
|
38
|
+
def clear
|
39
|
+
set_credentials(nil, nil)
|
28
40
|
end
|
29
41
|
|
30
42
|
private
|
@@ -18,23 +18,33 @@ module HammerCLIForeman
|
|
18
18
|
|
19
19
|
def clear
|
20
20
|
destroy_session
|
21
|
+
@authenticator.clear if @authenticator.respond_to?(:clear)
|
21
22
|
end
|
22
23
|
|
23
24
|
def status
|
24
25
|
if load_session
|
25
|
-
_("Session
|
26
|
+
_("Session exists, currently logged in as '%s'") % @user
|
26
27
|
else
|
27
|
-
_("
|
28
|
+
_("Using sessions, you are currently not logged in.")
|
28
29
|
end
|
29
30
|
end
|
30
31
|
|
32
|
+
def force_user_change
|
33
|
+
@user_changed = true
|
34
|
+
end
|
35
|
+
|
36
|
+
def user_changed?
|
37
|
+
!!@user_changed
|
38
|
+
end
|
39
|
+
|
31
40
|
def authenticate(request, args)
|
32
41
|
load_session
|
33
42
|
|
34
43
|
user = @authenticator.user
|
35
|
-
destroy_session if (user && user != @user)
|
36
44
|
|
37
|
-
|
45
|
+
@user_changed ||= (!user.nil? && user != @user)
|
46
|
+
|
47
|
+
if !@user_changed && @permissions_ok && @session_id
|
38
48
|
jar = HTTP::CookieJar.new
|
39
49
|
jar.add(HTTP::Cookie.new('_session_id', @session_id, domain: uri.hostname.downcase, path: '/', for_domain: true))
|
40
50
|
request['Cookie'] = HTTP::Cookie.cookie_value(jar.cookies)
|
@@ -47,8 +57,12 @@ module HammerCLIForeman
|
|
47
57
|
def error(ex)
|
48
58
|
load_session
|
49
59
|
if ex.is_a?(RestClient::Unauthorized) && !@session_id.nil?
|
50
|
-
|
51
|
-
|
60
|
+
if @user_changed
|
61
|
+
return UnauthorizedError.new(_("Invalid username or password, continuing with session for '%s'") % @user)
|
62
|
+
else
|
63
|
+
destroy_session
|
64
|
+
return SessionExpired.new(_("Session has expired"))
|
65
|
+
end
|
52
66
|
else
|
53
67
|
return @authenticator.error(ex)
|
54
68
|
end
|
@@ -62,8 +76,12 @@ module HammerCLIForeman
|
|
62
76
|
@authenticator.response(r)
|
63
77
|
end
|
64
78
|
|
65
|
-
def user
|
66
|
-
@authenticator.user if @authenticator.respond_to?(:user)
|
79
|
+
def user(ask=nil)
|
80
|
+
@authenticator.user(ask) if @authenticator.respond_to?(:user)
|
81
|
+
end
|
82
|
+
|
83
|
+
def set_credentials(*args)
|
84
|
+
@authenticator.set_credentials(*args) if @authenticator.respond_to?(:set_credentials)
|
67
85
|
end
|
68
86
|
|
69
87
|
protected
|
@@ -83,6 +101,7 @@ module HammerCLIForeman
|
|
83
101
|
@session_id = session_data['session_id']
|
84
102
|
end
|
85
103
|
rescue JSON::ParserError
|
104
|
+
destroy_session
|
86
105
|
warn _('Invalid session file format')
|
87
106
|
nil
|
88
107
|
end
|
@@ -10,16 +10,21 @@ module HammerCLIForeman
|
|
10
10
|
option ["-p", "--password"], "PASSWORD", _("password to access the remote system")
|
11
11
|
|
12
12
|
def execute
|
13
|
-
HammerCLIForeman.foreman_api_connection.
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
13
|
+
if !(HammerCLIForeman.foreman_api_connection.authenticator.is_a?(HammerCLIForeman::Api::SessionAuthenticatorWrapper))
|
14
|
+
print_message(_("Can't perform login. Make sure sessions are enabled in hammer configuration file."))
|
15
|
+
return HammerCLI::EX_USAGE
|
16
|
+
end
|
17
|
+
|
18
|
+
# Make sure we reflect also credentials set for the main hammer command
|
19
|
+
# ( hammer -u test auth login )
|
20
|
+
HammerCLIForeman.foreman_api_connection.authenticator.set_credentials(
|
21
|
+
option_username || HammerCLI::Settings.get('_params', 'username'),
|
22
|
+
option_password || HammerCLI::Settings.get('_params', 'password')
|
23
|
+
)
|
24
|
+
HammerCLIForeman.foreman_api_connection.authenticator.force_user_change
|
21
25
|
HammerCLIForeman.foreman_api_connection.login
|
22
|
-
|
26
|
+
|
27
|
+
print_message(_("Successfully logged in as '%s'.") % HammerCLIForeman.foreman_api_connection.authenticator.user)
|
23
28
|
HammerCLI::EX_OK
|
24
29
|
end
|
25
30
|
end
|
@@ -30,7 +35,6 @@ module HammerCLIForeman
|
|
30
35
|
|
31
36
|
def execute
|
32
37
|
HammerCLIForeman.foreman_api_connection.logout
|
33
|
-
context[:api_connection].drop_all
|
34
38
|
print_message(_("Logged out."))
|
35
39
|
HammerCLI::EX_OK
|
36
40
|
end
|
@@ -1,70 +1,74 @@
|
|
1
1
|
module HammerCLIForeman
|
2
|
-
|
3
2
|
class AuthSourceLdap < HammerCLIForeman::Command
|
4
|
-
|
5
3
|
resource :auth_source_ldaps
|
6
4
|
command_name 'ldap'
|
7
|
-
desc _(
|
8
|
-
|
5
|
+
desc _('Manage LDAP auth sources.')
|
9
6
|
|
10
7
|
class ListCommand < HammerCLIForeman::ListCommand
|
11
|
-
|
12
8
|
output do
|
13
|
-
field :id
|
14
|
-
field :name
|
15
|
-
field :
|
16
|
-
field :port
|
17
|
-
field :
|
9
|
+
field :id, _('Id')
|
10
|
+
field :name, _('Name')
|
11
|
+
field :host, _('Server')
|
12
|
+
field :port, _('Port')
|
13
|
+
field :tls, _('LDAPS?'), Fields::Boolean
|
18
14
|
end
|
19
15
|
|
20
16
|
build_options
|
21
17
|
end
|
22
18
|
|
23
|
-
|
24
19
|
class InfoCommand < HammerCLIForeman::InfoCommand
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
20
|
+
output do
|
21
|
+
label _('Server') do
|
22
|
+
field :id, _('Id')
|
23
|
+
field :name, _('Name')
|
24
|
+
field :host, _('Server')
|
25
|
+
field :tls, _('LDAPS'), Fields::Boolean
|
26
|
+
field :port, _('Port')
|
27
|
+
field :server_type, _('Server Type')
|
28
|
+
end
|
29
|
+
label _('Account') do
|
30
|
+
field :account, _('Account Username')
|
31
|
+
field :base_dn, _('Base DN')
|
32
|
+
field :groups_base, _('Groups base DN')
|
33
|
+
field :use_netgroups, _('Use Netgroups'), Fields::Boolean
|
34
|
+
field :ldap_filter, _('LDAP filter')
|
35
|
+
field :onthefly_register, _('Automatically Create Accounts?'), Fields::Boolean
|
36
|
+
field :usergroup_sync, _('Usergroup sync'), Fields::Boolean
|
37
|
+
end
|
38
|
+
label _('Attribute mappings') do
|
39
|
+
field :attr_login, _('Login Name Attribute')
|
40
|
+
field :attr_firstname, _('First Name Attribute')
|
41
|
+
field :attr_lastname, _('Last Name Attribute')
|
42
|
+
field :attr_mail, _('Email Address Attribute')
|
43
|
+
field :attr_photo, _('Photo Attribute')
|
44
|
+
end
|
45
|
+
HammerCLIForeman::References.taxonomies(self)
|
36
46
|
end
|
37
47
|
|
38
48
|
build_options
|
39
49
|
end
|
40
50
|
|
41
|
-
|
42
51
|
class CreateCommand < HammerCLIForeman::CreateCommand
|
43
|
-
success_message _(
|
44
|
-
failure_message _(
|
52
|
+
success_message _('Auth source [%{name}] created')
|
53
|
+
failure_message _('Could not create the Auth Source')
|
45
54
|
|
46
55
|
build_options
|
47
56
|
end
|
48
57
|
|
49
|
-
|
50
58
|
class DeleteCommand < HammerCLIForeman::DeleteCommand
|
51
|
-
success_message _(
|
52
|
-
failure_message _(
|
59
|
+
success_message _('Auth source [%{name}] deleted')
|
60
|
+
failure_message _('Could not delete the Auth Source')
|
53
61
|
|
54
62
|
build_options
|
55
63
|
end
|
56
64
|
|
57
|
-
|
58
65
|
class UpdateCommand < HammerCLIForeman::UpdateCommand
|
59
|
-
success_message _(
|
60
|
-
failure_message _(
|
66
|
+
success_message _('Auth source [%{name}] updated')
|
67
|
+
failure_message _('Could not update the Auth Source')
|
61
68
|
|
62
69
|
build_options
|
63
70
|
end
|
64
71
|
|
65
72
|
autoload_subcommands
|
66
73
|
end
|
67
|
-
|
68
74
|
end
|
69
|
-
|
70
|
-
|
@@ -96,6 +96,30 @@ module HammerCLIForeman
|
|
96
96
|
build_options
|
97
97
|
end
|
98
98
|
|
99
|
+
class AvailableNetworksCommand < HammerCLIForeman::ListCommand
|
100
|
+
|
101
|
+
resource :compute_resources, :available_networks
|
102
|
+
command_name 'networks'
|
103
|
+
desc _("Show available networks")
|
104
|
+
|
105
|
+
build_options
|
106
|
+
|
107
|
+
validate_options do
|
108
|
+
any(:option_id, :option_name).required
|
109
|
+
end
|
110
|
+
|
111
|
+
def request_params
|
112
|
+
params = super
|
113
|
+
params['id'] ||= get_identifier
|
114
|
+
params
|
115
|
+
end
|
116
|
+
|
117
|
+
output do
|
118
|
+
field :name, _("Name")
|
119
|
+
field :id, _("Id")
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
99
123
|
|
100
124
|
autoload_subcommands
|
101
125
|
subcommand 'image', HammerCLIForeman::Image.desc, HammerCLIForeman::Image
|
@@ -93,7 +93,7 @@ module HammerCLIForeman
|
|
93
93
|
|
94
94
|
def request_params
|
95
95
|
params = super
|
96
|
-
if override?
|
96
|
+
if !override?
|
97
97
|
# Clear taxonomies in case the filter is switching override from true to false
|
98
98
|
params['filter']['location_ids'] = []
|
99
99
|
params['filter']['organization_ids'] = []
|
@@ -107,7 +107,11 @@ module HammerCLIForeman
|
|
107
107
|
end
|
108
108
|
|
109
109
|
def override?
|
110
|
-
option_override
|
110
|
+
if option_override.nil?
|
111
|
+
filter['override?']
|
112
|
+
else
|
113
|
+
option_override
|
114
|
+
end
|
111
115
|
end
|
112
116
|
|
113
117
|
def filter
|
@@ -52,12 +52,6 @@ module HammerCLIForeman
|
|
52
52
|
host
|
53
53
|
end
|
54
54
|
|
55
|
-
def get_parameters(host_id)
|
56
|
-
params = HammerCLIForeman.foreman_resource!(:parameters).call(:index, :host_id => host_id)
|
57
|
-
HammerCLIForeman.collection_to_common_format(params)
|
58
|
-
end
|
59
|
-
|
60
|
-
|
61
55
|
output do
|
62
56
|
field :id, _("Id")
|
63
57
|
field :uuid, _("UUID"), Fields::Field, :hide_blank => true
|
@@ -115,6 +109,7 @@ module HammerCLIForeman
|
|
115
109
|
end
|
116
110
|
|
117
111
|
HammerCLIForeman::References.parameters(self)
|
112
|
+
HammerCLIForeman::References.all_parameters(self)
|
118
113
|
|
119
114
|
# additional info
|
120
115
|
label _("Additional info") do
|
@@ -233,7 +228,7 @@ module HammerCLIForeman
|
|
233
228
|
|
234
229
|
def validate_options
|
235
230
|
super
|
236
|
-
unless validator.any(:option_hostgroup_id, :option_hostgroup_name).exist?
|
231
|
+
unless validator.any(:option_hostgroup_id, :option_hostgroup_name, :option_hostgroup_title).exist?
|
237
232
|
if option_managed
|
238
233
|
validator.any(:option_architecture_name, :option_architecture_id).required
|
239
234
|
validator.any(:option_domain_name, :option_domain_id).required
|
@@ -72,6 +72,7 @@ module HammerCLIForeman
|
|
72
72
|
class InfoCommand < HammerCLIForeman::InfoCommand
|
73
73
|
|
74
74
|
output ListCommand.output_definition do
|
75
|
+
field :description, _("Description"), Fields::LongText, :hide_blank => true
|
75
76
|
field nil, _("Subnet"), Fields::SingleReference, :key => :subnet
|
76
77
|
|
77
78
|
field nil, _("Domain"), Fields::SingleReference, :key => :domain
|