uffizzi_core 1.0.1 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/clients/uffizzi_core/docker_hub_client.rb +9 -0
- data/app/services/uffizzi_core/compose_file/builders/container_builder_service.rb +4 -2
- data/app/services/uffizzi_core/compose_file/container_service.rb +16 -7
- data/app/services/uffizzi_core/docker_hub_service.rb +14 -0
- data/config/locales/en.yml +1 -1
- data/lib/uffizzi_core/version.rb +1 -1
- 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: '0339ca44a1964075ce650d5e830911c67b91242cdfb8c899a7a21a0277a81025'
|
4
|
+
data.tar.gz: 20cb6887c0fb29b7335faef953a67f31645c96b2ee4b7817bcd32d095401a107
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b2901c9c5a66c41344a9fff26031e516bbe7f983d084ee9aad6365ecbc1b7a8509f031d3bfb7beeb7436fcf50c1ce32d6631197f9860cffd18dbc541103d5327
|
7
|
+
data.tar.gz: 8dc9721c025a2e9f434922295cfd287f0c1e83c1a4ea1574f6afe681b2fb5ea2e4e3fe83a62df37156cf7aaaa0089270a0deb47ed4e59939b93dbbe71329f5ce
|
@@ -23,6 +23,15 @@ class UffizziCore::DockerHubClient
|
|
23
23
|
nil
|
24
24
|
end
|
25
25
|
|
26
|
+
def repository(namespace:, image:)
|
27
|
+
url = "#{BASE_URL}/v2/repositories/#{namespace}/#{image}"
|
28
|
+
|
29
|
+
response = connection.get(url) do |request|
|
30
|
+
request.headers['Authorization'] = "JWT #{jwt}"
|
31
|
+
end
|
32
|
+
RequestResult.new(status: response.status, result: response.body)
|
33
|
+
end
|
34
|
+
|
26
35
|
def public_images(q:, page: 1, per_page: 25)
|
27
36
|
url = "#{BASE_URL}/api/content/v1/products/search"
|
28
37
|
params = { page_size: per_page, q: q, type: :image, page: page }
|
@@ -206,9 +206,11 @@ class UffizziCore::ComposeFile::Builders::ContainerBuilderService
|
|
206
206
|
|
207
207
|
def build_docker_repo_attributes(image_data, credentials, scope, repo_type)
|
208
208
|
credential = credentials.send(scope).first
|
209
|
-
|
209
|
+
if UffizziCore::ComposeFile::ContainerService.image_available?(credential, image_data, scope)
|
210
|
+
return docker_builder(repo_type).build_attributes(image_data)
|
211
|
+
end
|
210
212
|
|
211
|
-
|
213
|
+
raise UffizziCore::ComposeFile::BuildError, I18n.t('compose.unprocessable_image', value: scope)
|
212
214
|
end
|
213
215
|
|
214
216
|
def variables(variables_data, dependencies)
|
@@ -55,23 +55,32 @@ class UffizziCore::ComposeFile::ContainerService
|
|
55
55
|
|
56
56
|
def credential_for_container(container, credentials)
|
57
57
|
if UffizziCore::ComposeFile::ContainerService.azure?(container)
|
58
|
-
detect_credential(credentials, :azure)
|
58
|
+
detect_credential(container, credentials, :azure)
|
59
59
|
elsif UffizziCore::ComposeFile::ContainerService.docker_hub?(container)
|
60
|
-
detect_credential(credentials, :docker_hub)
|
60
|
+
detect_credential(container, credentials, :docker_hub)
|
61
61
|
elsif UffizziCore::ComposeFile::ContainerService.google?(container)
|
62
|
-
detect_credential(credentials, :google)
|
62
|
+
detect_credential(container, credentials, :google)
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
|
-
def detect_credential(credentials, type)
|
66
|
+
def detect_credential(container, credentials, type)
|
67
67
|
credential = credentials.detect do |item|
|
68
68
|
item.send("#{type}?")
|
69
69
|
end
|
70
70
|
|
71
|
-
|
72
|
-
raise UffizziCore::ComposeFile::CredentialError.new(error_message) if credential.nil?
|
71
|
+
return credential if image_available?(credential, container[:image], type)
|
73
72
|
|
74
|
-
|
73
|
+
raise UffizziCore::ComposeFile::CredentialError.new(I18n.t('compose.unprocessable_image', value: type))
|
74
|
+
end
|
75
|
+
|
76
|
+
def image_available?(credential, image_data, type)
|
77
|
+
case type
|
78
|
+
when :docker_hub
|
79
|
+
UffizziCore::DockerHubService.image_available?(credential, image_data)
|
80
|
+
else
|
81
|
+
# TODO check image availability in other registry types
|
82
|
+
credential.present?
|
83
|
+
end
|
75
84
|
end
|
76
85
|
end
|
77
86
|
end
|
@@ -11,6 +11,16 @@ class UffizziCore::DockerHubService
|
|
11
11
|
accounts_response.nil? ? [] : accounts_response.namespaces
|
12
12
|
end
|
13
13
|
|
14
|
+
def image_available?(credential, image_data)
|
15
|
+
namespace = image_data[:namespace]
|
16
|
+
repo_name = image_data[:name]
|
17
|
+
client = UffizziCore::DockerHubClient.new(credential)
|
18
|
+
response = client.repository(namespace: namespace, image: repo_name)
|
19
|
+
return false if not_found?(response)
|
20
|
+
|
21
|
+
true
|
22
|
+
end
|
23
|
+
|
14
24
|
def user_client(credential)
|
15
25
|
return @client if @client&.credential&.username == credential.username
|
16
26
|
|
@@ -36,5 +46,9 @@ class UffizziCore::DockerHubService
|
|
36
46
|
def public_docker_hub_client
|
37
47
|
@public_docker_hub_client ||= UffizziCore::DockerHubClient.new
|
38
48
|
end
|
49
|
+
|
50
|
+
def not_found?(response)
|
51
|
+
response.status == 404
|
52
|
+
end
|
39
53
|
end
|
40
54
|
end
|
data/config/locales/en.yml
CHANGED
@@ -17,7 +17,7 @@ en:
|
|
17
17
|
no_services: Service services has neither an image nor a build context specified. At least one must be provided.
|
18
18
|
no_ingress: Service ingress has not been defined.
|
19
19
|
invalid_image_value: Invalid image value '%{value}'
|
20
|
-
|
20
|
+
unprocessable_image: Invalid credential '%{value} or image does not exist'
|
21
21
|
invalid_repo_type: Unsupported repo type
|
22
22
|
repo_not_found: The specified repository doesn't exist '%{name}'
|
23
23
|
ingress_port_not_specified: Ingress port not specified
|
data/lib/uffizzi_core/version.rb
CHANGED
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: 1.0.
|
4
|
+
version: 1.0.3
|
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-09-
|
12
|
+
date: 2022-09-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: aasm
|