uffizzi_core 0.3.5 → 0.3.6
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/app/controllers/uffizzi_core/api/cli/v1/account/credentials_controller.rb +21 -0
- data/app/forms/uffizzi_core/api/cli/v1/account/credential/check_credential_form.rb +1 -1
- data/app/forms/uffizzi_core/api/cli/v1/account/credential/update_form.rb +21 -0
- data/app/jobs/uffizzi_core/account/update_credential_job.rb +10 -0
- data/app/jobs/uffizzi_core/deployment/update_credential_job.rb +32 -0
- data/app/policies/uffizzi_core/api/cli/v1/account/credentials_policy.rb +4 -0
- data/app/repositories/uffizzi_core/deployment_repo.rb +3 -0
- data/app/services/uffizzi_core/account_service.rb +10 -8
- data/app/services/uffizzi_core/credential_service.rb +1 -2
- data/config/routes.rb +1 -1
- data/lib/uffizzi_core/version.rb +1 -1
- data/swagger/v1/swagger.json +90 -26
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7022668d1f77cf69c6d793ec22992f029947adad2ec8e735e6c319e632a7f745
|
4
|
+
data.tar.gz: 56bcce7234c9a6e8d194195624b621322d5aa18630dbd1c29ecb16987b6e9cc6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e6ae611e6ec7dc0dd3f20fbc465ff03f7d2504a18e950145b8ef9925ccffff4f8477e1ecaf3f6ccfdc7150d848669e5a884b26bd2ddbfb904c5deeb377a8b96e
|
7
|
+
data.tar.gz: f4d09c156e135e44e56c79ae94d906e876767a330f7d09576b511637e8d8d264db104846b3cc3ca0a101ec2ca45dcaab68335a13e3c7e442bf5be21390b31f71
|
@@ -40,6 +40,27 @@ class UffizziCore::Api::Cli::V1::Account::CredentialsController < UffizziCore::A
|
|
40
40
|
respond_with credential_form
|
41
41
|
end
|
42
42
|
|
43
|
+
# Update existing credential of the given type
|
44
|
+
#
|
45
|
+
# @path [PUT] /api/cli/v1/account/credentials/{type}
|
46
|
+
#
|
47
|
+
# @parameter type(required,path) [string] Credential type
|
48
|
+
# @parameter credential(required,body) [object<type:string>]
|
49
|
+
# @response [object<id:integer, registry_url:string, username:string, password:string>] 200 OK
|
50
|
+
# @response [object<errors>] 422 Unprocessable entity
|
51
|
+
def update
|
52
|
+
credential = resource_account.credentials.find_by!(type: params[:type])
|
53
|
+
credential_form = credential.becomes(UffizziCore::Api::Cli::V1::Account::Credential::UpdateForm)
|
54
|
+
credential_form.assign_attributes(credential_params)
|
55
|
+
|
56
|
+
if credential_form.save
|
57
|
+
UffizziCore::Account::UpdateCredentialJob.perform_async(credential_form.id)
|
58
|
+
respond_with credential_form
|
59
|
+
else
|
60
|
+
respond_with credential_form, status: :unprocessable_entity
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
43
64
|
# Check if credential of the type already exists in the account
|
44
65
|
#
|
45
66
|
# @path [GET] /api/cli/v1/account/credentials/{type}/check_credential
|
@@ -11,6 +11,6 @@ class UffizziCore::Api::Cli::V1::Account::Credential::CheckCredentialForm
|
|
11
11
|
private
|
12
12
|
|
13
13
|
def credential_exists?
|
14
|
-
errors.add(:type,
|
14
|
+
errors.add(:type, :exist) if account.credentials.by_type(type).exists?
|
15
15
|
end
|
16
16
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class UffizziCore::Api::Cli::V1::Account::Credential::UpdateForm < UffizziCore::Credential
|
4
|
+
include UffizziCore::ApplicationForm
|
5
|
+
|
6
|
+
permit :registry_url, :username, :password
|
7
|
+
|
8
|
+
validates :password, presence: { message: :password_blank }
|
9
|
+
validate :check_registry_url, if: -> { errors[:password].empty? }
|
10
|
+
validate :check_credential_correctness, if: -> { errors[:password].empty? }
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def check_registry_url
|
15
|
+
errors.add(:registry_url, :invalid_scheme) if URI.parse(registry_url).scheme.nil?
|
16
|
+
end
|
17
|
+
|
18
|
+
def check_credential_correctness
|
19
|
+
errors.add(:username, :incorrect) unless UffizziCore::CredentialService.correct_credentials?(self)
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class UffizziCore::Account::UpdateCredentialJob < UffizziCore::ApplicationJob
|
4
|
+
sidekiq_options queue: :accounts, retry: 5
|
5
|
+
|
6
|
+
def perform(id)
|
7
|
+
credential = UffizziCore::Credential.find(id)
|
8
|
+
UffizziCore::AccountService.update_credential(credential)
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class UffizziCore::Deployment::UpdateCredentialJob < UffizziCore::ApplicationJob
|
4
|
+
sidekiq_options queue: :deployments, retry: Settings.controller.resource_update_retry_count
|
5
|
+
|
6
|
+
sidekiq_retry_in do |count, exception|
|
7
|
+
case exception
|
8
|
+
when UffizziCore::DeploymentNotFoundError
|
9
|
+
Rails.logger.info("DEPLOYMENT_PROCESS UpdateCredentialJob retry deployment_id=#{exception.deployment_id} count=#{count}")
|
10
|
+
Settings.controller.resource_update_retry_time
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def perform(deployment_id, credential_id)
|
15
|
+
Rails.logger.info("DEPLOYMENT_PROCESS deployment_id=#{deployment_id} UpdateCredentialJob(cred_id:#{credential_id})")
|
16
|
+
|
17
|
+
deployment = UffizziCore::Deployment.find(deployment_id)
|
18
|
+
credential = UffizziCore::Credential.find(credential_id)
|
19
|
+
|
20
|
+
if deployment.disabled?
|
21
|
+
Rails.logger.info("DEPLOYMENT_PROCESS deployment_id=#{deployment.id} deployment was disabled. Stop updating credential")
|
22
|
+
return
|
23
|
+
end
|
24
|
+
|
25
|
+
unless UffizziCore::ControllerService.deployment_exists?(deployment)
|
26
|
+
raise UffizziCore::DeploymentNotFoundError,
|
27
|
+
deployment_id
|
28
|
+
end
|
29
|
+
|
30
|
+
UffizziCore::ControllerService.apply_credential(deployment, credential)
|
31
|
+
end
|
32
|
+
end
|
@@ -9,6 +9,10 @@ class UffizziCore::Api::Cli::V1::Account::CredentialsPolicy < UffizziCore::Appli
|
|
9
9
|
context.user_access_module.admin_access_to_account?(context.user, context.account)
|
10
10
|
end
|
11
11
|
|
12
|
+
def update?
|
13
|
+
context.user_access_module.admin_access_to_account?(context.user, context.account)
|
14
|
+
end
|
15
|
+
|
12
16
|
def check_credential?
|
13
17
|
context.user_access_module.admin_access_to_account?(context.user, context.account)
|
14
18
|
end
|
@@ -9,5 +9,8 @@ module UffizziCore::DeploymentRepo
|
|
9
9
|
}
|
10
10
|
scope :with_amazon_repos, -> { includes(containers: [:repo]).where(containers: { repos: { type: UffizziCore::Repo::Amazon.name } }) }
|
11
11
|
scope :existed, -> { where(state: [:active, :failed]) }
|
12
|
+
scope :active_for_credential_id, ->(credential_id) {
|
13
|
+
active.joins(project: :credentials).merge(UffizziCore::Project.active).where(credentials: { id: credential_id })
|
14
|
+
}
|
12
15
|
end
|
13
16
|
end
|
@@ -3,18 +3,20 @@
|
|
3
3
|
class UffizziCore::AccountService
|
4
4
|
class << self
|
5
5
|
def create_credential(credential)
|
6
|
-
credential.
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
UffizziCore::Deployment.active_for_credential_id(credential.id).pluck(:id).each do |deployment_id|
|
7
|
+
UffizziCore::Deployment::CreateCredentialJob.perform_async(deployment_id, credential.id)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def update_credential(credential)
|
12
|
+
UffizziCore::Deployment.active_for_credential_id(credential.id).pluck(:id).each do |deployment_id|
|
13
|
+
UffizziCore::Deployment::UpdateCredentialJob.perform_async(deployment_id, credential.id)
|
10
14
|
end
|
11
15
|
end
|
12
16
|
|
13
17
|
def delete_credential(credential)
|
14
|
-
credential.
|
15
|
-
|
16
|
-
UffizziCore::Deployment::DeleteCredentialJob.perform_async(deployment.id, credential.id)
|
17
|
-
end
|
18
|
+
UffizziCore::Deployment.active_for_credential_id(credential.id).pluck(:id).each do |deployment_id|
|
19
|
+
UffizziCore::Deployment::DeleteCredentialJob.perform_async(deployment_id, credential.id)
|
18
20
|
end
|
19
21
|
end
|
20
22
|
end
|
@@ -19,8 +19,7 @@ class UffizziCore::CredentialService
|
|
19
19
|
end
|
20
20
|
|
21
21
|
if credential.persisted? && credential.active? && !status
|
22
|
-
Rails.logger.warn("
|
23
|
-
credential.unauthorize!
|
22
|
+
Rails.logger.warn("Wrong credential: credential_correct? credential_id=#{credential.id}")
|
24
23
|
end
|
25
24
|
|
26
25
|
status
|
data/config/routes.rb
CHANGED
@@ -46,7 +46,7 @@ UffizziCore::Engine.routes.draw do
|
|
46
46
|
|
47
47
|
resource :account, only: [] do
|
48
48
|
scope module: :account do
|
49
|
-
resources :credentials, only: ['index', 'create', 'destroy'], param: :type do
|
49
|
+
resources :credentials, only: ['index', 'create', 'update', 'destroy'], param: :type do
|
50
50
|
member do
|
51
51
|
get :check_credential
|
52
52
|
end
|
data/lib/uffizzi_core/version.rb
CHANGED
data/swagger/v1/swagger.json
CHANGED
@@ -122,12 +122,12 @@
|
|
122
122
|
"x-action": "create"
|
123
123
|
}
|
124
124
|
},
|
125
|
-
"/api/cli/v1/account/credentials/{type}
|
126
|
-
"
|
125
|
+
"/api/cli/v1/account/credentials/{type}": {
|
126
|
+
"put": {
|
127
127
|
"tags": [
|
128
128
|
"Account/Credential"
|
129
129
|
],
|
130
|
-
"operationId": "Account/Credential-
|
130
|
+
"operationId": "Account/Credential-update",
|
131
131
|
"parameters": [
|
132
132
|
{
|
133
133
|
"name": "credential",
|
@@ -145,27 +145,48 @@
|
|
145
145
|
},
|
146
146
|
{
|
147
147
|
"name": "type",
|
148
|
-
"description": "
|
148
|
+
"description": "Credential type",
|
149
149
|
"required": true,
|
150
150
|
"in": "path",
|
151
151
|
"type": "string"
|
152
152
|
}
|
153
153
|
],
|
154
154
|
"responses": {
|
155
|
-
"422": {
|
156
|
-
"description": "Unprocessable entity"
|
157
|
-
},
|
158
155
|
"200": {
|
159
|
-
"description": "OK"
|
156
|
+
"description": "OK",
|
157
|
+
"schema": {
|
158
|
+
"type": "object",
|
159
|
+
"properties": {
|
160
|
+
"id": {
|
161
|
+
"type": "integer"
|
162
|
+
},
|
163
|
+
"registry_url": {
|
164
|
+
"type": "string"
|
165
|
+
},
|
166
|
+
"username": {
|
167
|
+
"type": "string"
|
168
|
+
},
|
169
|
+
"password": {
|
170
|
+
"type": "string"
|
171
|
+
}
|
172
|
+
}
|
173
|
+
}
|
174
|
+
},
|
175
|
+
"422": {
|
176
|
+
"description": "Unprocessable entity",
|
177
|
+
"schema": {
|
178
|
+
"type": "object",
|
179
|
+
"additionalProperties": {
|
180
|
+
"type": "errors"
|
181
|
+
}
|
182
|
+
}
|
160
183
|
}
|
161
184
|
},
|
162
|
-
"description": "
|
163
|
-
"summary": "
|
185
|
+
"description": "Update existing credential of the given type",
|
186
|
+
"summary": "Update existing credential of the given type",
|
164
187
|
"x-controller": "uffizzi_core/api/cli/v1/account/credentials",
|
165
|
-
"x-action": "
|
166
|
-
}
|
167
|
-
},
|
168
|
-
"/api/cli/v1/account/credentials/{type}": {
|
188
|
+
"x-action": "update"
|
189
|
+
},
|
169
190
|
"delete": {
|
170
191
|
"tags": [
|
171
192
|
"Account/Credential"
|
@@ -210,6 +231,49 @@
|
|
210
231
|
"x-action": "destroy"
|
211
232
|
}
|
212
233
|
},
|
234
|
+
"/api/cli/v1/account/credentials/{type}/check_credential": {
|
235
|
+
"get": {
|
236
|
+
"tags": [
|
237
|
+
"Account/Credential"
|
238
|
+
],
|
239
|
+
"operationId": "Account/Credential-check_credential",
|
240
|
+
"parameters": [
|
241
|
+
{
|
242
|
+
"name": "credential",
|
243
|
+
"description": "credential",
|
244
|
+
"required": true,
|
245
|
+
"in": "body",
|
246
|
+
"schema": {
|
247
|
+
"type": "object",
|
248
|
+
"properties": {
|
249
|
+
"type": {
|
250
|
+
"type": "string"
|
251
|
+
}
|
252
|
+
}
|
253
|
+
}
|
254
|
+
},
|
255
|
+
{
|
256
|
+
"name": "type",
|
257
|
+
"description": "Scope response to type",
|
258
|
+
"required": true,
|
259
|
+
"in": "path",
|
260
|
+
"type": "string"
|
261
|
+
}
|
262
|
+
],
|
263
|
+
"responses": {
|
264
|
+
"422": {
|
265
|
+
"description": "Unprocessable entity"
|
266
|
+
},
|
267
|
+
"200": {
|
268
|
+
"description": "OK"
|
269
|
+
}
|
270
|
+
},
|
271
|
+
"description": "Check if credential of the type already exists in the account",
|
272
|
+
"summary": "Check if credential of the type already exists in the account",
|
273
|
+
"x-controller": "uffizzi_core/api/cli/v1/account/credentials",
|
274
|
+
"x-action": "check_credential"
|
275
|
+
}
|
276
|
+
},
|
213
277
|
"/api/cli/v1/projects/{project_slug}/compose_file": {
|
214
278
|
"get": {
|
215
279
|
"tags": [
|
@@ -1237,8 +1301,16 @@
|
|
1237
1301
|
}
|
1238
1302
|
],
|
1239
1303
|
"responses": {
|
1240
|
-
"
|
1241
|
-
"description": "
|
1304
|
+
"200": {
|
1305
|
+
"description": "OK",
|
1306
|
+
"schema": {
|
1307
|
+
"type": "object",
|
1308
|
+
"properties": {
|
1309
|
+
"project": {
|
1310
|
+
"$ref": "#/definitions/Project"
|
1311
|
+
}
|
1312
|
+
}
|
1313
|
+
}
|
1242
1314
|
},
|
1243
1315
|
"404": {
|
1244
1316
|
"description": "Not Found"
|
@@ -1267,16 +1339,8 @@
|
|
1267
1339
|
}
|
1268
1340
|
],
|
1269
1341
|
"responses": {
|
1270
|
-
"
|
1271
|
-
"description": "
|
1272
|
-
"schema": {
|
1273
|
-
"type": "object",
|
1274
|
-
"properties": {
|
1275
|
-
"project": {
|
1276
|
-
"$ref": "#/definitions/Project"
|
1277
|
-
}
|
1278
|
-
}
|
1279
|
-
}
|
1342
|
+
"204": {
|
1343
|
+
"description": "No content"
|
1280
1344
|
},
|
1281
1345
|
"404": {
|
1282
1346
|
"description": "Not Found"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: uffizzi_core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Thurman
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
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: aasm
|
@@ -729,6 +729,7 @@ files:
|
|
729
729
|
- app/errors/uffizzi_core/deployment_not_found_error.rb
|
730
730
|
- app/forms/uffizzi_core/api/cli/v1/account/credential/check_credential_form.rb
|
731
731
|
- app/forms/uffizzi_core/api/cli/v1/account/credential/create_form.rb
|
732
|
+
- app/forms/uffizzi_core/api/cli/v1/account/credential/update_form.rb
|
732
733
|
- app/forms/uffizzi_core/api/cli/v1/compose_file/check_credentials_form.rb
|
733
734
|
- app/forms/uffizzi_core/api/cli/v1/compose_file/cli_form.rb
|
734
735
|
- app/forms/uffizzi_core/api/cli/v1/compose_file/create_form.rb
|
@@ -747,6 +748,7 @@ files:
|
|
747
748
|
- app/forms/uffizzi_core/mass_assignment_control_concern.rb
|
748
749
|
- app/helpers/uffizzi_core/application_helper.rb
|
749
750
|
- app/jobs/uffizzi_core/account/create_credential_job.rb
|
751
|
+
- app/jobs/uffizzi_core/account/update_credential_job.rb
|
750
752
|
- app/jobs/uffizzi_core/activity_item/docker/update_digest_job.rb
|
751
753
|
- app/jobs/uffizzi_core/application_job.rb
|
752
754
|
- app/jobs/uffizzi_core/config_file/apply_job.rb
|
@@ -759,6 +761,7 @@ files:
|
|
759
761
|
- app/jobs/uffizzi_core/deployment/delete_job.rb
|
760
762
|
- app/jobs/uffizzi_core/deployment/deploy_containers_job.rb
|
761
763
|
- app/jobs/uffizzi_core/deployment/manage_deploy_activity_item_job.rb
|
764
|
+
- app/jobs/uffizzi_core/deployment/update_credential_job.rb
|
762
765
|
- app/lib/uffizzi_core/concerns/models/account.rb
|
763
766
|
- app/lib/uffizzi_core/concerns/models/activity_item.rb
|
764
767
|
- app/lib/uffizzi_core/concerns/models/build.rb
|