conjur-cli 4.29.0 → 4.30.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/.gitignore +1 -0
- data/CHANGELOG.md +5 -1
- data/Rakefile +5 -3
- data/acceptance-features/bootstrap.feature +13 -0
- data/acceptance-features/directory/hostfactory/create.feature +22 -6
- data/lib/conjur-cli.rb +21 -0
- data/lib/conjur/command.rb +10 -0
- data/lib/conjur/command/bootstrap.rb +78 -88
- data/lib/conjur/command/host_factories.rb +3 -0
- data/lib/conjur/version.rb +2 -2
- data/publish.sh +5 -2
- data/spec/command/host_factories_spec.rb +5 -5
- metadata +4 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7a8e5171dfa3fb930e4d09c7b48c70f6b572d66a
|
|
4
|
+
data.tar.gz: 38aeb8c329f096825dc1b6273e84d863f3e0a24d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a98b539b66a03f4949372a8d056dde90564d2637d84bc46ada647363cb8aef662cdd85fe852d1adad6364fc211ff7e6e1d75df3edee3a0b91fc9de5bb28aab93
|
|
7
|
+
data.tar.gz: 3bb5257cebd5c670d22f290fea687c0b8a5c9f37669abb87128c39d4a8679f6f247850123825ee37a3aba812d10840df6f754cc9b4f487358da2b21fc6ff6b21
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 4.30.0
|
|
2
|
+
|
|
3
|
+
* Implementation of `conjur bootstrap` is moved to the API gem, and made extensible.
|
|
4
|
+
* Added new steps to `conjur bootstrap`, including the creation of service identities, and giving `elevate` and `reveal` to the `security_admin` group.
|
|
5
|
+
* `hostfactory create` verifies that the current role is able to admin the host factory group; otherwise, host factory creation will fail.
|
|
2
6
|
|
|
3
7
|
# 4.29.0
|
|
4
8
|
* Add `conjur host rotate_api_key` command.
|
data/Rakefile
CHANGED
|
@@ -9,11 +9,13 @@ require 'rspec/core/rake_task'
|
|
|
9
9
|
RSpec::Core::RakeTask.new :spec
|
|
10
10
|
Cucumber::Rake::Task.new :features
|
|
11
11
|
|
|
12
|
-
task :jenkins => ['ci:setup:rspec', :spec
|
|
12
|
+
task :jenkins => ['ci:setup:rspec', :spec] do
|
|
13
|
+
File.write('build_number', ENV['BUILD_NUMBER']) if ENV['BUILD_NUMBER']
|
|
14
|
+
require 'fileutils'
|
|
15
|
+
FileUtils.rm_rf 'features/reports'
|
|
13
16
|
Cucumber::Rake::Task.new do |t|
|
|
14
|
-
t.cucumber_opts = "--tags ~@real-api --format pretty --format
|
|
17
|
+
t.cucumber_opts = "--tags ~@real-api --format pretty --format junit --out features/reports"
|
|
15
18
|
end.runner.run
|
|
16
|
-
File.write('build_number', ENV['BUILD_NUMBER']) if ENV['BUILD_NUMBER']
|
|
17
19
|
end
|
|
18
20
|
|
|
19
21
|
task default: [:spec, :features]
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
Feature: "conjur bootstrap" creates default resources, privileges and roles
|
|
2
|
+
|
|
3
|
+
Background:
|
|
4
|
+
Given I successfully run `conjur bootstrap -q`
|
|
5
|
+
|
|
6
|
+
Scenario: A new security admin can use 'elevate'
|
|
7
|
+
When I successfully run `conjur resource permitted_roles '!:!:conjur' elevate`
|
|
8
|
+
Then the stdout should contain "cucumber:group:security_admin"
|
|
9
|
+
|
|
10
|
+
Scenario: Run bootstrap and test for the existence of things
|
|
11
|
+
Then I successfully run `conjur elevate group show security_admin`
|
|
12
|
+
And I successfully run `conjur elevate host show conjur/secrets-rotator`
|
|
13
|
+
And I successfully run `conjur elevate resource show webservice:conjur/authn-tv`
|
|
@@ -1,13 +1,29 @@
|
|
|
1
1
|
Feature: Create a Host Factory
|
|
2
|
+
|
|
2
3
|
Background:
|
|
3
|
-
Given I successfully run `conjur layer create --as-group $ns/security_admin $ns/layer`
|
|
4
4
|
|
|
5
5
|
Scenario: Create a host factory successfully
|
|
6
|
-
|
|
7
|
-
Then
|
|
6
|
+
Given I successfully run `conjur layer create --as-group $ns/security_admin $ns/layer`
|
|
7
|
+
Then I successfully run `conjur hostfactory create --as-group $ns/security_admin --layer $ns/layer $ns/hostfactory`
|
|
8
|
+
And the JSON should have "deputy_api_key"
|
|
8
9
|
|
|
9
|
-
|
|
10
|
+
Scenario: The client role can use itself as the hostfactory role
|
|
10
11
|
Given I successfully run `conjur user create unprivileged@$ns`
|
|
12
|
+
And I successfully run `conjur layer create $ns/layer`
|
|
11
13
|
When I run `conjur hostfactory create --as-role user:unprivileged@$ns --layer $ns/layer $ns/hostfactory`
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
|
|
15
|
+
Scenario: If current role cannot admin the layer, the error is reported
|
|
16
|
+
Given I successfully run `conjur layer create $ns/the-layer`
|
|
17
|
+
And I login as a new user
|
|
18
|
+
Given I successfully run `conjur group create $ns/the-group`
|
|
19
|
+
And I run `conjur hostfactory create --as-group $ns/the-group -l $ns/the-layer $ns/the-factory`
|
|
20
|
+
Then the exit status should not be 0
|
|
21
|
+
And the output should contain "must be an admin of layer"
|
|
22
|
+
|
|
23
|
+
Scenario: If current role cannot admin the HF role, the error is reported
|
|
24
|
+
Given I successfully run `conjur group create $ns/the-group`
|
|
25
|
+
And I login as a new user
|
|
26
|
+
Given I successfully run `conjur layer create $ns/the-layer`
|
|
27
|
+
And I run `conjur hostfactory create --as-group $ns/the-group -l $ns/the-layer $ns/the-factory`
|
|
28
|
+
Then the exit status should not be 0
|
|
29
|
+
And the output should contain "must be an admin of role"
|
data/lib/conjur-cli.rb
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Copyright (C) 2016 Conjur Inc
|
|
3
|
+
#
|
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
5
|
+
# this software and associated documentation files (the "Software"), to deal in
|
|
6
|
+
# the Software without restriction, including without limitation the rights to
|
|
7
|
+
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
8
|
+
# the Software, and to permit persons to whom the Software is furnished to do so,
|
|
9
|
+
# subject to the following conditions:
|
|
10
|
+
#
|
|
11
|
+
# The above copyright notice and this permission notice shall be included in all
|
|
12
|
+
# copies or substantial portions of the Software.
|
|
13
|
+
#
|
|
14
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
16
|
+
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
17
|
+
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
18
|
+
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
19
|
+
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
20
|
+
#
|
|
21
|
+
require "conjur/cli"
|
data/lib/conjur/command.rb
CHANGED
|
@@ -449,7 +449,17 @@ an alternative destination role.)
|
|
|
449
449
|
password
|
|
450
450
|
end
|
|
451
451
|
|
|
452
|
+
def current_role
|
|
453
|
+
kind, id = api.username.split('/', 2)
|
|
454
|
+
if id.nil?
|
|
455
|
+
id = kind
|
|
456
|
+
kind = 'user'
|
|
457
|
+
end
|
|
458
|
+
api.role([ kind, id ].join(":"))
|
|
459
|
+
end
|
|
460
|
+
|
|
452
461
|
def has_admin?(role, other_role)
|
|
462
|
+
return true if role.roleid == other_role.roleid
|
|
453
463
|
memberships = role.memberships.map(&:roleid)
|
|
454
464
|
other_role.members.any? { |m| memberships.member?(m.member.roleid) && m.admin_option }
|
|
455
465
|
rescue RestClient::Forbidden
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#
|
|
2
|
-
# Copyright (C) 2014 Conjur Inc
|
|
2
|
+
# Copyright (C) 2014-2016 Conjur Inc
|
|
3
3
|
#
|
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
5
5
|
# this software and associated documentation files (the "Software"), to deal in
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
#
|
|
21
21
|
|
|
22
22
|
class Conjur::Command::Bootstrap < Conjur::Command
|
|
23
|
-
desc "Create initial users, groups, and
|
|
23
|
+
desc "Create initial users, groups, permissions, and service identities."
|
|
24
24
|
long_desc %Q(When you launch a new Conjur master server, it contains only one login: the "admin" user.
|
|
25
25
|
The bootstrap command will finish the setup of a new Conjur system by creating other essential records.
|
|
26
26
|
|
|
@@ -28,111 +28,101 @@ class Conjur::Command::Bootstrap < Conjur::Command
|
|
|
28
28
|
|
|
29
29
|
* Creation of a group called "security_admin".
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
* Giving the "security_admin" the power to manage public keys.
|
|
32
32
|
|
|
33
|
-
|
|
33
|
+
* Creation of a user called "attic", which will be the owner of retired records.
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
* Create system identities for use services such as pubkeys, rotator, and ldap-sync.
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
* (optional) Create a new user who will be made a member and admin of the "security_admin" group.
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
* (optional) If a new user was created, login as that user.
|
|
40
|
+
|
|
41
|
+
The Bootstrap command can be extended to perform additional actions by CLI plugins. The plugin just
|
|
42
|
+
needs to define a new class in Conjur::Bootstrap::Command. Its "perform" method will be run automatically.
|
|
40
43
|
)
|
|
41
44
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
# * Is a user
|
|
46
|
-
# * Has admin privilege on the security_admin group role
|
|
47
|
-
# * Is an owner of the security_admin group resource
|
|
48
|
-
#
|
|
49
|
-
# The admin user will always satisfy these conditions, unless they are revoked for some reason.
|
|
50
|
-
# Other users created by the bootstrap command will (typically) also have these powers.
|
|
51
|
-
def self.security_admin_manager? api
|
|
52
|
-
return true if elevated?
|
|
53
|
-
|
|
54
|
-
username = api.username
|
|
55
|
-
user = if username.index('/')
|
|
56
|
-
nil
|
|
57
|
-
else
|
|
58
|
-
api.user(username)
|
|
45
|
+
class BootstrapListener
|
|
46
|
+
def echo msg
|
|
47
|
+
$stderr.puts msg
|
|
59
48
|
end
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
# The user has a role which is admin of the security_admin role
|
|
66
|
-
# The user has the role which owns the security_admin resource
|
|
67
|
-
has_admin?(user.role, security_admin.role) &&
|
|
68
|
-
memberships.member?(security_admin.resource.ownerid)
|
|
69
|
-
else
|
|
70
|
-
user.login == "admin"
|
|
71
|
-
end
|
|
72
|
-
else
|
|
73
|
-
false
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
class << self
|
|
52
|
+
def quiet? options
|
|
53
|
+
!$stdin.tty? || options[:quiet]
|
|
74
54
|
end
|
|
75
55
|
end
|
|
76
56
|
|
|
77
57
|
Conjur::CLI.command :bootstrap do |c|
|
|
78
|
-
c.desc "
|
|
79
|
-
c.
|
|
80
|
-
|
|
58
|
+
c.desc "Print out all the commands to stderr as they run."
|
|
59
|
+
c.default_value true
|
|
60
|
+
c.switch [:v, :verbose]
|
|
61
|
+
|
|
62
|
+
c.desc "Don't prompt for any user input, even if there's a TTY."
|
|
63
|
+
c.long_desc %Q(By default, 'bootstrap' may issue prompts on the TTY. For example, it will prompt you
|
|
64
|
+
to login if you aren't currently logged in as any user. It will also ask you if you want to create a new
|
|
65
|
+
'security_admin' user. This switch can be used to disable all such prompts, making it safe to run
|
|
66
|
+
'bootstrap' even when requests for user input cannot be handled. Prompts are also disabled if STDIN
|
|
67
|
+
is not a tty.)
|
|
68
|
+
c.default_value false
|
|
69
|
+
c.switch [:q, :quiet]
|
|
70
|
+
|
|
81
71
|
c.action do |global_options,options,args|
|
|
82
72
|
require 'highline/import'
|
|
83
73
|
|
|
84
74
|
# Ensure there's a logged in user
|
|
85
|
-
|
|
75
|
+
connect_options = {}
|
|
76
|
+
connect_options[:noask] = true if quiet?(options)
|
|
77
|
+
Conjur::Authn.connect nil, connect_options
|
|
86
78
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
security_admin.resource.give_to(security_admin) unless security_admin.resource.ownerid == security_admin.role.roleid
|
|
98
|
-
|
|
99
|
-
key_managers = api.group("pubkeys-1.0/key-managers")
|
|
100
|
-
unless security_admin.role.memberships.map(&:roleid).member?(key_managers.role.roleid)
|
|
101
|
-
puts "Permitting group 'security_admin' to manage public keys"
|
|
102
|
-
key_managers.add_member security_admin, admin_option: true
|
|
103
|
-
end
|
|
104
|
-
|
|
105
|
-
security_administrators = security_admin.role.members.select{|m| m.member.roleid.split(':')[1..-1] != [ 'user', 'admin'] }
|
|
106
|
-
puts "Current 'security_admin' members are : #{security_administrators.map{|m| m.member.roleid.split(':')[-1]}.join(', ')}" unless security_administrators.blank?
|
|
107
|
-
created_user = nil
|
|
108
|
-
if security_administrators.empty? || agree("Create a new security_admin? (answer 'y' or 'yes'):")
|
|
109
|
-
username = ask("Enter #{security_administrators.empty? ? 'your' : 'the'} username:")
|
|
110
|
-
password = prompt_for_password
|
|
111
|
-
puts "Creating user '#{username}'"
|
|
112
|
-
created_user = user = api.create_user(username, password: password)
|
|
113
|
-
Conjur::API.new_from_key(user.login, password).user(user.login).resource.give_to security_admin
|
|
114
|
-
puts "User created"
|
|
115
|
-
puts "Making '#{username}' a member and admin of group 'security_admin'"
|
|
116
|
-
security_admin.add_member user, admin_option: true
|
|
117
|
-
puts "Adminship granted"
|
|
79
|
+
unless api.global_privilege_permitted?('elevate')
|
|
80
|
+
$stderr.puts [
|
|
81
|
+
"You must have 'elevate' privilege to bootstrap Conjur.",
|
|
82
|
+
"If are performing a first-time bootstrap of Conjur, you should login as the 'admin' user",
|
|
83
|
+
"using the admin password you selected when you ran 'evoke configure master'.",
|
|
84
|
+
"",
|
|
85
|
+
"If you have run 'conjur bootstrap' before, using CLI version 4.30.0 or later, the 'elevate'",
|
|
86
|
+
"privilege is available to all members of the security_admin group."
|
|
87
|
+
].join("\n")
|
|
88
|
+
exit_now! "Insufficient privileges to run 'bootstrap'."
|
|
118
89
|
end
|
|
90
|
+
|
|
91
|
+
saved_log = Conjur.log
|
|
92
|
+
Conjur.log = $stderr if options[:verbose]
|
|
93
|
+
|
|
94
|
+
api = self.api.with_privilege('elevate')
|
|
95
|
+
self.api = api
|
|
119
96
|
|
|
120
|
-
|
|
121
|
-
if (attic = api.user(attic_user_name)).exists?
|
|
122
|
-
puts "User '#{attic_user_name}' already exists"
|
|
123
|
-
else
|
|
124
|
-
puts "Creating user '#{attic_user_name}' to own retired records"
|
|
125
|
-
attic = api.create_user(attic_user_name)
|
|
126
|
-
api.create_variable "text/plain",
|
|
127
|
-
"conjur-api-key",
|
|
128
|
-
id: "conjur/users/#{attic_user_name}/api-key",
|
|
129
|
-
value: attic.api_key,
|
|
130
|
-
ownerid: security_admin.role.roleid
|
|
131
|
-
end
|
|
97
|
+
api.bootstrap BootstrapListener.new
|
|
132
98
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
99
|
+
unless quiet?(options)
|
|
100
|
+
security_admin = api.group('security_admin')
|
|
101
|
+
security_administrators = security_admin.role.members.select{|m| m.member.roleid.split(':')[1..-1] != [ 'user', 'admin'] }
|
|
102
|
+
$stderr.puts "Current 'security_admin' members are : #{security_administrators.map{|m| m.member.roleid.split(':', 3)[1..-1].join(':')}.sort.join(', ')}" unless security_administrators.blank?
|
|
103
|
+
created_user = nil
|
|
104
|
+
if security_administrators.empty? || agree("Create a new security_admin? (answer 'y' or 'yes'):")
|
|
105
|
+
username = ask("Enter #{security_administrators.empty? ? 'your' : 'the'} username:")
|
|
106
|
+
password = prompt_for_password
|
|
107
|
+
begin
|
|
108
|
+
# Don't echo the new admin user's password
|
|
109
|
+
Conjur.log = nil
|
|
110
|
+
$stderr.puts "Creating user '#{username}'"
|
|
111
|
+
created_user = user = api.create_user(username, password: password)
|
|
112
|
+
ensure
|
|
113
|
+
Conjur.log = saved_log
|
|
114
|
+
end
|
|
115
|
+
Conjur::API.new_from_key(user.login, password).user(user.login).resource.give_to security_admin
|
|
116
|
+
$stderr.puts "User created"
|
|
117
|
+
$stderr.puts "Making '#{username}' a member and admin of group 'security_admin'"
|
|
118
|
+
security_admin.add_member user, admin_option: true
|
|
119
|
+
$stderr.puts "Adminship granted"
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
if created_user && agree("Login as user '#{created_user.login}'? (answer 'y' or 'yes'):")
|
|
123
|
+
Conjur::Authn.fetch_credentials(username: created_user.login, password: created_user.api_key)
|
|
124
|
+
$stderr.puts "Logged in as '#{created_user.login}'"
|
|
125
|
+
end
|
|
136
126
|
end
|
|
137
127
|
end
|
|
138
128
|
end
|
|
@@ -44,6 +44,9 @@ class Conjur::Command::HostFactories < Conjur::Command
|
|
|
44
44
|
layers = (options[:layer] || "").split(/\s/)
|
|
45
45
|
exit_now! "Provide at least one layer" unless layers.count > 0
|
|
46
46
|
|
|
47
|
+
unless has_admin?(current_role, owner_role)
|
|
48
|
+
exit_now! "#{owner_role.id} must be an admin of role '#{owner_role.roleid}' to create a host factory for it"
|
|
49
|
+
end
|
|
47
50
|
layers.each do |layerid|
|
|
48
51
|
layer = api.layer(layerid)
|
|
49
52
|
exit_now! "Layer '#{layerid}' does not exist" unless layer.exists?
|
data/lib/conjur/version.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#
|
|
2
|
-
# Copyright (C) 2014-
|
|
2
|
+
# Copyright (C) 2014-2016 Conjur Inc.
|
|
3
3
|
#
|
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
5
5
|
# this software and associated documentation files (the "Software"), to deal in
|
|
@@ -19,6 +19,6 @@
|
|
|
19
19
|
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
20
20
|
#
|
|
21
21
|
module Conjur
|
|
22
|
-
VERSION = "4.
|
|
22
|
+
VERSION = "4.30.0"
|
|
23
23
|
::Version=VERSION
|
|
24
24
|
end
|
data/publish.sh
CHANGED
|
@@ -3,18 +3,20 @@ require 'conjur/command/host_factories'
|
|
|
3
3
|
|
|
4
4
|
describe Conjur::Command::HostFactories, :logged_in => true do
|
|
5
5
|
let (:group_memberships) { double(:group_memberships, :roleid => 'the-account:group:security_admin') }
|
|
6
|
-
let (:
|
|
6
|
+
let (:current_role) { double(:current_role, roleid: 'the-account:user:dknuth', :memberships => [ double(:current_role_role, roleid: 'the-account:user:dknuth') ]) }
|
|
7
|
+
let (:group_members) { double(:layer_members, :member => double(:member, :roleid => 'the-account:user:dknuth'), :admin_option => true ) }
|
|
8
|
+
let (:group) { double(:group, roleid: 'the-account:group:the-group', :exists? => true, :memberships => [group_memberships], :members => [group_members]) }
|
|
7
9
|
let (:layer_members) { double(:layer_members, :member => double(:member, :roleid => 'the-account:group:security_admin'), :admin_option => true ) }
|
|
8
|
-
let (:layer_role) { double(:layer_role, :members => [layer_members]) }
|
|
10
|
+
let (:layer_role) { double(:layer_role, roleid: 'the-account:layer:layer1', :members => [layer_members]) }
|
|
9
11
|
let (:layer) { double(:layer, :exists? => true, :role => layer_role) }
|
|
10
12
|
|
|
11
13
|
before do
|
|
14
|
+
allow(Conjur::Command.api).to receive(:role).with("user:dknuth").and_return current_role
|
|
12
15
|
allow(Conjur::Command.api).to receive(:role).with("the-account:group:the-group").and_return group
|
|
13
16
|
allow(Conjur::Command.api).to receive(:layer).with("layer1").and_return layer
|
|
14
17
|
end
|
|
15
18
|
|
|
16
19
|
describe_command 'hostfactory:create --as-group the-group --layer layer1 hf1 ' do
|
|
17
|
-
|
|
18
20
|
it 'calls api.create_host_factory and prints the results' do
|
|
19
21
|
expect_any_instance_of(Conjur::API).to receive(:create_host_factory).and_return '{}'
|
|
20
22
|
expect { invoke }.to write('{}')
|
|
@@ -32,7 +34,5 @@ describe Conjur::Command::HostFactories, :logged_in => true do
|
|
|
32
34
|
expect {invoke}.to raise_error('Provide at least one layer')
|
|
33
35
|
end
|
|
34
36
|
end
|
|
35
|
-
|
|
36
37
|
end
|
|
37
|
-
|
|
38
38
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: conjur-cli
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 4.
|
|
4
|
+
version: 4.30.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Rafal Rzepecki
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2016-02-
|
|
12
|
+
date: 2016-02-29 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: activesupport
|
|
@@ -297,6 +297,7 @@ files:
|
|
|
297
297
|
- acceptance-features/authorization/role/graph.feature
|
|
298
298
|
- acceptance-features/authorization/role/members.feature
|
|
299
299
|
- acceptance-features/authorization/role/memberships.feature
|
|
300
|
+
- acceptance-features/bootstrap.feature
|
|
300
301
|
- acceptance-features/conjurenv/check.feature
|
|
301
302
|
- acceptance-features/conjurenv/run.feature
|
|
302
303
|
- acceptance-features/conjurenv/template.feature
|
|
@@ -365,6 +366,7 @@ files:
|
|
|
365
366
|
- features/support/host.json
|
|
366
367
|
- features/support/world.rb
|
|
367
368
|
- jenkins.sh
|
|
369
|
+
- lib/conjur-cli.rb
|
|
368
370
|
- lib/conjur.rb
|
|
369
371
|
- lib/conjur/audit/follower.rb
|
|
370
372
|
- lib/conjur/authn.rb
|