uffizzi-cli 0.11.4 → 0.11.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/uffizzi/cli/connect.rb +58 -33
- data/lib/uffizzi/clients/api/api_client.rb +8 -1
- data/lib/uffizzi/clients/api/api_routes.rb +1 -1
- data/lib/uffizzi/version.rb +1 -1
- data/man/uffizzi-connect +6 -0
- data/man/uffizzi-connect.ronn +6 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a81fa2bb6f00491f6c59e4c10ea3ce067da1b75b26ff8543e1a08558893058c0
|
4
|
+
data.tar.gz: fec82e0d04c499515f0221740a1a40b51bd5593a35223c0a7723648f20b25a5e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 82610a6fe745521646e7d7e7c5e0f65a39263ea53987f1e431d0a0d0b69033d015a67bcd48b07e30c5d044f2167c752f307525438ca232044e90c5b60eb0f602
|
7
|
+
data.tar.gz: 67d5b6c3947e01e72c3ec678b6b14a1ccc6b78583d34f46274cdfa1f7692c9632b98728f43bf1ab5e0b3e984313db98e536c5231ddb9d2a07cc8156b8334ca2e
|
data/lib/uffizzi/cli/connect.rb
CHANGED
@@ -20,24 +20,26 @@ module Uffizzi
|
|
20
20
|
desc 'docker-hub', 'Connect to Docker Hub (hub.docker.com)'
|
21
21
|
method_option :skip_raise_existence_error, type: :boolean, default: false,
|
22
22
|
desc: 'Skip raising an error within check the credential'
|
23
|
+
method_option :update_credential_if_exists, type: :boolean, default: false
|
23
24
|
def docker_hub
|
24
25
|
type = Uffizzi.configuration.credential_types[:dockerhub]
|
25
|
-
|
26
|
+
credential_exists = credential_exists?(type)
|
27
|
+
handle_existing_credential_options('docker-hub') if credential_exists
|
26
28
|
|
27
|
-
username = ENV['DOCKERHUB_USERNAME'] || Uffizzi.ui.ask('Username:
|
28
|
-
password = ENV['DOCKERHUB_PASSWORD'] || Uffizzi.ui.ask('Password:
|
29
|
+
username = ENV['DOCKERHUB_USERNAME'] || Uffizzi.ui.ask('Username:')
|
30
|
+
password = ENV['DOCKERHUB_PASSWORD'] || Uffizzi.ui.ask('Password:', echo: false)
|
29
31
|
|
30
32
|
params = {
|
31
33
|
username: username,
|
32
34
|
password: password,
|
33
|
-
type:
|
35
|
+
type: type,
|
34
36
|
}
|
35
37
|
|
36
38
|
server = ConfigFile.read_option(:server)
|
37
|
-
response =
|
39
|
+
response = create_or_update_credential(server, params, create: !credential_exists)
|
38
40
|
|
39
|
-
if
|
40
|
-
print_success_message('
|
41
|
+
if successful?(response)
|
42
|
+
print_success_message('Docker Hub')
|
41
43
|
else
|
42
44
|
ResponseHelper.handle_failed_response(response)
|
43
45
|
end
|
@@ -46,13 +48,15 @@ module Uffizzi
|
|
46
48
|
desc 'acr', 'Connect to Azure Container Registry (azurecr.io)'
|
47
49
|
method_option :skip_raise_existence_error, type: :boolean, default: false,
|
48
50
|
desc: 'Skip raising an error within check the credential'
|
51
|
+
method_option :update_credential_if_exists, type: :boolean, default: false
|
49
52
|
def acr
|
50
53
|
type = Uffizzi.configuration.credential_types[:azure]
|
51
|
-
|
54
|
+
credential_exists = credential_exists?(type)
|
55
|
+
handle_existing_credential_options('acr') if credential_exists
|
52
56
|
|
53
|
-
registry_url = ENV['ACR_REGISTRY_URL'] || Uffizzi.ui.ask('Registry Domain:
|
54
|
-
username = ENV['ACR_USERNAME'] || Uffizzi.ui.ask('Docker ID:
|
55
|
-
password = ENV['ACR_PASSWORD'] || Uffizzi.ui.ask('Password/Access Token:
|
57
|
+
registry_url = ENV['ACR_REGISTRY_URL'] || Uffizzi.ui.ask('Registry Domain:')
|
58
|
+
username = ENV['ACR_USERNAME'] || Uffizzi.ui.ask('Docker ID:')
|
59
|
+
password = ENV['ACR_PASSWORD'] || Uffizzi.ui.ask('Password/Access Token:', echo: false)
|
56
60
|
|
57
61
|
params = {
|
58
62
|
username: username,
|
@@ -62,9 +66,9 @@ module Uffizzi
|
|
62
66
|
}
|
63
67
|
|
64
68
|
server = ConfigFile.read_option(:server)
|
65
|
-
response =
|
69
|
+
response = create_or_update_credential(server, params, create: !credential_exists)
|
66
70
|
|
67
|
-
if
|
71
|
+
if successful?(response)
|
68
72
|
print_success_message('ACR')
|
69
73
|
else
|
70
74
|
ResponseHelper.handle_failed_response(response)
|
@@ -74,13 +78,15 @@ module Uffizzi
|
|
74
78
|
desc 'ecr', 'Connect to Amazon Elastic Container Registry'
|
75
79
|
method_option :skip_raise_existence_error, type: :boolean, default: false,
|
76
80
|
desc: 'Skip raising an error within check the credential'
|
81
|
+
method_option :update_credential_if_exists, type: :boolean, default: false
|
77
82
|
def ecr
|
78
83
|
type = Uffizzi.configuration.credential_types[:amazon]
|
79
|
-
|
84
|
+
credential_exists = credential_exists?(type)
|
85
|
+
handle_existing_credential_options('ecr') if credential_exists
|
80
86
|
|
81
|
-
registry_url = ENV['AWS_REGISTRY_URL'] || Uffizzi.ui.ask('Registry Domain:
|
82
|
-
access_key = ENV['AWS_ACCESS_KEY_ID'] || Uffizzi.ui.ask('Access key ID:
|
83
|
-
secret_access_key = ENV['AWS_SECRET_ACCESS_KEY'] || Uffizzi.ui.ask('Secret access key:
|
87
|
+
registry_url = ENV['AWS_REGISTRY_URL'] || Uffizzi.ui.ask('Registry Domain:')
|
88
|
+
access_key = ENV['AWS_ACCESS_KEY_ID'] || Uffizzi.ui.ask('Access key ID:')
|
89
|
+
secret_access_key = ENV['AWS_SECRET_ACCESS_KEY'] || Uffizzi.ui.ask('Secret access key:', echo: false)
|
84
90
|
|
85
91
|
params = {
|
86
92
|
username: access_key,
|
@@ -90,9 +96,9 @@ module Uffizzi
|
|
90
96
|
}
|
91
97
|
|
92
98
|
server = ConfigFile.read_option(:server)
|
93
|
-
response =
|
99
|
+
response = create_or_update_credential(server, params, create: !credential_exists)
|
94
100
|
|
95
|
-
if
|
101
|
+
if successful?(response)
|
96
102
|
print_success_message('ECR')
|
97
103
|
else
|
98
104
|
ResponseHelper.handle_failed_response(response)
|
@@ -102,9 +108,11 @@ module Uffizzi
|
|
102
108
|
desc 'gcr', 'Connect to Google Container Registry (gcr.io)'
|
103
109
|
method_option :skip_raise_existence_error, type: :boolean, default: false,
|
104
110
|
desc: 'Skip raising an error within check the credential'
|
111
|
+
method_option :update_credential_if_exists, type: :boolean, default: false
|
105
112
|
def gcr(credential_file_path = nil)
|
106
113
|
type = Uffizzi.configuration.credential_types[:google]
|
107
|
-
|
114
|
+
credential_exists = credential_exists?(type)
|
115
|
+
handle_existing_credential_options('gcr') if credential_exists
|
108
116
|
|
109
117
|
credential_content = google_service_account_content(credential_file_path)
|
110
118
|
|
@@ -114,9 +122,9 @@ module Uffizzi
|
|
114
122
|
}
|
115
123
|
|
116
124
|
server = ConfigFile.read_option(:server)
|
117
|
-
response =
|
125
|
+
response = create_or_update_credential(server, params, create: !credential_exists)
|
118
126
|
|
119
|
-
if
|
127
|
+
if successful?(response)
|
120
128
|
print_success_message('GCR')
|
121
129
|
else
|
122
130
|
ResponseHelper.handle_failed_response(response)
|
@@ -126,11 +134,13 @@ module Uffizzi
|
|
126
134
|
desc 'ghcr', 'Connect to GitHub Container Registry (ghcr.io)'
|
127
135
|
method_option :skip_raise_existence_error, type: :boolean, default: false,
|
128
136
|
desc: 'Skip raising an error within check the credential'
|
137
|
+
method_option :update_credential_if_exists, type: :boolean, default: false
|
129
138
|
method_option :username, type: :string, aliases: :u
|
130
139
|
method_option :token, type: :string, aliases: :t
|
131
140
|
def ghcr
|
132
141
|
type = Uffizzi.configuration.credential_types[:github_registry]
|
133
|
-
|
142
|
+
credential_exists = credential_exists?(type)
|
143
|
+
handle_existing_credential_options('ghcr') if credential_exists
|
134
144
|
|
135
145
|
username = options[:username] || ENV['GITHUB_USERNAME'] || Uffizzi.ui.ask('Github Username:')
|
136
146
|
password = options[:token] || ENV['GITHUB_ACCESS_TOKEN'] || Uffizzi.ui.ask('Access Token:', echo: false)
|
@@ -142,9 +152,9 @@ module Uffizzi
|
|
142
152
|
}
|
143
153
|
|
144
154
|
server = ConfigFile.read_option(:server)
|
145
|
-
response =
|
155
|
+
response = create_or_update_credential(server, params, create: !credential_exists)
|
146
156
|
|
147
|
-
if
|
157
|
+
if successful?(response)
|
148
158
|
print_success_message('GHCR')
|
149
159
|
else
|
150
160
|
ResponseHelper.handle_failed_response(response)
|
@@ -156,31 +166,46 @@ module Uffizzi
|
|
156
166
|
|
157
167
|
private
|
158
168
|
|
169
|
+
def successful?(response)
|
170
|
+
ResponseHelper.created?(response) || ResponseHelper.ok?(response)
|
171
|
+
end
|
172
|
+
|
159
173
|
def prepare_registry_url(registry_url)
|
160
174
|
return registry_url if registry_url.match?(/^(?:http(s)?:\/\/)/)
|
161
175
|
|
162
176
|
"https://#{registry_url}"
|
163
177
|
end
|
164
178
|
|
165
|
-
def print_success_message(
|
166
|
-
Uffizzi.ui.say("Successfully connected to #{
|
179
|
+
def print_success_message(credential_type_slug)
|
180
|
+
Uffizzi.ui.say("Successfully connected to #{credential_type_slug}.")
|
167
181
|
end
|
168
182
|
|
169
|
-
def
|
183
|
+
def credential_exists?(type)
|
170
184
|
server = ConfigFile.read_option(:server)
|
171
185
|
response = check_credential(server, type)
|
172
|
-
|
186
|
+
!ResponseHelper.ok?(response)
|
187
|
+
end
|
188
|
+
|
189
|
+
def handle_existing_credential_options(credential_type_slug)
|
190
|
+
if options.update_credential_if_exists?
|
191
|
+
Uffizzi.ui.say('Updating existing credential.')
|
192
|
+
return
|
193
|
+
end
|
173
194
|
|
174
195
|
if options.skip_raise_existence_error?
|
175
|
-
Uffizzi.ui.say("
|
196
|
+
Uffizzi.ui.say("Credential of type #{credential_type_slug} already exists for this account.")
|
176
197
|
exit(true)
|
177
198
|
else
|
178
|
-
message = "
|
179
|
-
"To remove them, run
|
199
|
+
message = "Credential of type #{credential_type_slug} already exists for this account.\n" \
|
200
|
+
"To remove them, run uffizzi disconnect #{credential_type_slug}."
|
180
201
|
raise Uffizzi::Error.new(message)
|
181
202
|
end
|
182
203
|
end
|
183
204
|
|
205
|
+
def create_or_update_credential(server, params, create: true)
|
206
|
+
create ? create_credential(server, params) : update_credential(server, params, params[:type])
|
207
|
+
end
|
208
|
+
|
184
209
|
def handle_list_credentials_success(response)
|
185
210
|
credentials = response[:body][:credentials]
|
186
211
|
credentials.each do |credential|
|
@@ -204,7 +229,7 @@ module Uffizzi
|
|
204
229
|
def google_service_account_content(credential_file_path = nil)
|
205
230
|
return ENV['GCLOUD_SERVICE_KEY'] if ENV['GCLOUD_SERVICE_KEY']
|
206
231
|
|
207
|
-
|
232
|
+
raise Uffizzi::Error.new("Path to a google service account key file wasn't specified.") if credential_file_path.nil?
|
208
233
|
|
209
234
|
begin
|
210
235
|
credential_content = File.read(credential_file_path)
|
@@ -70,6 +70,13 @@ module ApiClient
|
|
70
70
|
build_response(response)
|
71
71
|
end
|
72
72
|
|
73
|
+
def update_credential(server, params, type)
|
74
|
+
uri = credential_uri(server, type)
|
75
|
+
response = http_client.make_put_request(uri, params)
|
76
|
+
|
77
|
+
build_response(response)
|
78
|
+
end
|
79
|
+
|
73
80
|
def fetch_deployment_services(server, project_slug, deployment_id)
|
74
81
|
uri = preview_services_uri(server, project_slug, deployment_id)
|
75
82
|
response = http_client.make_get_request(uri)
|
@@ -78,7 +85,7 @@ module ApiClient
|
|
78
85
|
end
|
79
86
|
|
80
87
|
def delete_credential(server, credential_type)
|
81
|
-
uri =
|
88
|
+
uri = credential_uri(server, credential_type)
|
82
89
|
response = http_client.make_delete_request(uri)
|
83
90
|
|
84
91
|
build_response(response)
|
@@ -64,7 +64,7 @@ module ApiRoutes
|
|
64
64
|
"#{server}/api/cli/v1/projects/#{project_slug}/deployments/#{deployment_id}/containers"
|
65
65
|
end
|
66
66
|
|
67
|
-
def
|
67
|
+
def credential_uri(server, credential_type)
|
68
68
|
"#{server}/api/cli/v1/account/credentials/#{credential_type}"
|
69
69
|
end
|
70
70
|
|
data/lib/uffizzi/version.rb
CHANGED
data/man/uffizzi-connect
CHANGED
@@ -33,5 +33,11 @@ gcr
|
|
33
33
|
ghcr
|
34
34
|
Connect to GitHub Container Registry (ghcr\.io)\.
|
35
35
|
.fi
|
36
|
+
.SH "FLAGS"
|
37
|
+
.nf
|
38
|
+
\-\-skip\-raise\-existence\-error If credential exist, do not raise an exception, just print a message
|
39
|
+
|
40
|
+
\-\-update\-credential\-if\-exists Update credential if it exists
|
41
|
+
.fi
|
36
42
|
.P
|
37
43
|
Run \'uffizzi connect COMMAND \-\-help\' for more information on a command\.
|
data/man/uffizzi-connect.ronn
CHANGED
@@ -28,4 +28,10 @@ uffizzi-connect - grant a Uffizzi user account access to external services
|
|
28
28
|
ghcr
|
29
29
|
Connect to GitHub Container Registry (ghcr.io).
|
30
30
|
|
31
|
+
|
32
|
+
## FLAGS
|
33
|
+
--skip-raise-existence-error If credential exist, do not raise an exception, just print a message
|
34
|
+
|
35
|
+
--update-credential-if-exists Update credential if it exists
|
36
|
+
|
31
37
|
Run 'uffizzi connect COMMAND --help' for more information on a command.
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: uffizzi-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.11.
|
4
|
+
version: 0.11.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Thurman
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2022-
|
12
|
+
date: 2022-08-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: awesome_print
|