hammer_cli_foreman 0.10.2 → 0.11.0
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.
- 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
|