Skip to content

Commit 3cde643

Browse files
lsongsusexingzhang-suse
authored andcommitted
Registry configuration page - create/edit a registry
1 parent 6739461 commit 3cde643

File tree

4 files changed

+121
-108
lines changed

4 files changed

+121
-108
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import {
2+
RegistryTypeOptions,
3+
ScanIntervalOptions
4+
} from '@sbombastic-image-vulnerability-scanner/types/sbombastic-image-vulnerability-scanner';
5+
6+
export const SCAN_INTERVAL_OPTIONS: { label: string; value: ScanIntervalOptions }[] = [
7+
{ label: 'Every 1 hour', value: '1h' },
8+
{ label: 'Every 3 hours', value: '3h' },
9+
{ label: 'Every 6 hours', value: '6h' },
10+
{ label: 'Every 12 hours', value: '12h' },
11+
{ label: 'Every 24 hours', value: '24h' },
12+
{ label: 'Manual Scan', value: '0s' } // backend disables auto-scan
13+
];
14+
15+
export const REGISTRY_TYPE_OPTIONS: {label: string; value: RegistryTypeOptions }[] = [
16+
{ label: 'Docker Hub', value: 'dockerhub'}
17+
];

pkg/sbombastic-image-vulnerability-scanner/edit/sbombastic.rancher.io.registry.vue

Lines changed: 94 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,12 @@ import SelectOrCreateAuthSecret from '@shell/components/form/SelectOrCreateAuthS
99
import LabeledSelect from '@shell/components/form/LabeledSelect';
1010
import Banner from '@components/Banner/Banner.vue';
1111
import { Checkbox } from '@components/Form/Checkbox';
12-
import { MANAGEMENT, NAMESPACE, CLUSTER_REPO_TYPES } from '@shell/config/types';
12+
import { MANAGEMENT, NAMESPACE } from '@shell/config/types';
1313
import UnitInput from '@shell/components/form/UnitInput.vue';
14-
import {ref} from "vue";
14+
import {
15+
REGISTRY_TYPE_OPTIONS,
16+
SCAN_INTERVAL_OPTIONS
17+
} from "@sbombastic-image-vulnerability-scanner/constants/scan-interval-options";
1518
1619
export default {
1720
name: 'CruRegistry',
@@ -32,7 +35,6 @@ export default {
3235
mixins: [CreateEditView],
3336
3437
data() {
35-
3638
if (!this.value.spec) {
3739
this.value.spec = {
3840
insecure: true,
@@ -49,8 +51,6 @@ export default {
4951
};
5052
}
5153
52-
console.log('this.value after:',this.value);
53-
5454
return {
5555
selectedRegistryType: this.value.type || 'ecr',
5656
secretNamespace: this.$store.getters['defaultNamespace'],
@@ -60,19 +60,6 @@ export default {
6060
},
6161
6262
computed: {
63-
registryTypeOptions(){
64-
return [
65-
{
66-
label: this.t('imageScanner.registries.configuration.cru.registry.type.ecr'),
67-
value: 'ecr',
68-
},
69-
{
70-
label: this.t('imageScanner.registries.configuration.cru.registry.type.azure'),
71-
value: 'azure',
72-
},
73-
];
74-
},
75-
7663
namespace(){
7764
console.log('this.value.spec.type:',this.value.spec.type);
7865
return this.value.spec.type === 'ecr'?"kube-system":""
@@ -93,6 +80,14 @@ export default {
9380
return this.$store.getters[`${ this.inStore }/all`](NAMESPACE)[0]?.id;
9481
},
9582
83+
SCAN_INTERVAL_OPTIONS: function() {
84+
return SCAN_INTERVAL_OPTIONS;
85+
},
86+
87+
REGISTRY_TYPE_OPTIONS: function() {
88+
return REGISTRY_TYPE_OPTIONS;
89+
},
90+
9691
useProxy: {
9792
get() {
9893
return !this.value.spec.insecure;
@@ -111,103 +106,102 @@ export default {
111106
{{t('imageScanner.registries.configuration.cru.description')}}
112107
</Banner>
113108
<CruResource
114-
:done-route="doneRoute"
115-
:mode="mode"
116-
:resource="value"
117-
:subtypes="[]"
118-
:validation-passed="true"
119-
:errors="errors"
120-
@error="(e) => (errors = e)"
121-
@finish="save"
122-
@cancel="done"
123-
>
124-
<NameNsDescription
125-
:value="value"
126-
:mode="mode"
127-
:namespaced="isNamespaced"
128-
@update:value="$emit('input', $event)"
129-
/>
130-
131-
<div class="registry-input-label">
132-
{{ t('imageScanner.registries.configuration.cru.registry.label') }}
133-
</div>
134-
135-
<div class="row">
136-
<div class="col span-6" >
137-
<LabeledSelect
138-
v-model:value="value.spec.type"
139-
data-testid="registry-type-select"
140-
:label="t('imageScanner.registries.configuration.cru.registry.type.label')"
141-
:options="registryTypeOptions"
142-
:placeholder="t('imageScanner.registry.configuration.cru.registry.type.placeholder')"
143-
required
144-
/>
145-
</div>
146-
<div class="col span-3">
147-
<LabeledInput
148-
:label="t('imageScanner.registries.configuration.cru.registry.namespace.label')"
149-
:value="namespace"
150-
:placeholderKey="t('imageScanner.registries.configuration.cru.registry.namespace.placeholder')"
151-
disabled=true
152-
/>
153-
</div>
154-
</div>
155-
156-
<Checkbox
157-
v-model:value="useProxy"
158-
class="mt-20 mb-10"
109+
:done-route="doneRoute"
159110
:mode="mode"
160-
:label="t('imageScanner.registries.configuration.cru.proxy.enable')"
161-
:tooltipKey="t('imageScanner.registries.configuration.cru.proxy.tooltip')"
162-
data-testid="registry-use-proxy"
163-
/>
164-
165-
<div v-if="useProxy">
166-
<div class="registry-input-label mb-0">
167-
{{ t('imageScanner.registries.configuration.cru.authLabel') }}
168-
</div>
169-
<SelectOrCreateAuthSecret
170-
:value="value.spec.authSecret"
111+
:resource="value"
112+
:subtypes="[]"
113+
:validation-passed="true"
114+
:errors="errors"
115+
@error="(e) => (errors = e)"
116+
@finish="save"
117+
@cancel="done"
118+
>
119+
<NameNsDescription
120+
:value="value"
171121
:mode="mode"
172-
data-testid="registry-auth-secret"
173-
:register-before-hook="registerBeforeHook"
174-
:namespace="secretNamespace"
175-
:limit-to-namespace="false"
176-
:in-store="inStore"
177-
:allow-ssh=false
178-
generate-name="registry-auth-"
179-
:cache-secrets="true"
180-
@input="val => value.spec.authSecret = val"
122+
@update:value="$emit('input', $event)"
181123
/>
182124
183-
<div class="registry-input-label mt-24">
184-
{{ t('imageScanner.registries.configuration.cru.scan.label') }}
125+
<div class="registry-input-label">
126+
{{ t('imageScanner.registries.configuration.cru.registry.label') }}
185127
</div>
186128
187129
<div class="row">
188130
<div class="col span-6" >
189131
<LabeledSelect
190-
v-model:value="value.spec.repositories"
191-
:label="t('imageScanner.registries.configuration.cru.scan.type')"
192-
>
193-
</LabeledSelect>
132+
data-testid="registry-type-select"
133+
:label="t('imageScanner.registries.configuration.cru.registry.type.label')"
134+
:options="REGISTRY_TYPE_OPTIONS"
135+
option-key="value"
136+
option-label="label"
137+
value="dockerhub"
138+
required
139+
/>
194140
</div>
195-
<div class="col span-3">
196-
<UnitInput
197-
v-model:value="unitInput"
198-
:label="t('imageScanner.registries.configuration.cru.scan.schedule.label')"
199-
:mode="mode"
200-
min="0"
201-
:suffix="t('unit.hour', { count: 3 })"
202-
:placeholder="t('imageScanner.registries.configuration.cru.scan.schedule.placeholder', { hours: 3 })"
203-
@update:value="updateRefreshInterval($event)"
141+
<div class="col span-6">
142+
<LabeledInput
143+
:label="t('imageScanner.registries.configuration.cru.registry.uri.label')"
144+
v-model:value="value.spec.uri"
145+
:placeholderKey="t('imageScanner.registries.configuration.cru.registry.uri.placeholder')"
204146
/>
205147
</div>
206148
</div>
207149
208-
</div>
150+
<Checkbox
151+
v-model:value="useProxy"
152+
class="mt-20 mb-10"
153+
:mode="mode"
154+
:label="t('imageScanner.registries.configuration.cru.proxy.enable')"
155+
:tooltipKey="t('imageScanner.registries.configuration.cru.proxy.tooltip')"
156+
data-testid="registry-use-proxy"
157+
/>
158+
159+
<div v-if="useProxy">
160+
<div class="registry-input-label mb-0">
161+
{{ t('imageScanner.registries.configuration.cru.authLabel') }}
162+
</div>
163+
<SelectOrCreateAuthSecret
164+
:value="value.spec.authSecret"
165+
:mode="mode"
166+
data-testid="registry-auth-secret"
167+
:register-before-hook="registerBeforeHook"
168+
:namespace="secretNamespace"
169+
:limit-to-namespace="true"
170+
:in-store="inStore"
171+
:allow-ssh=false
172+
generate-name="registry-auth-"
173+
:cache-secrets="true"
174+
@input="val => value.spec.authSecret = val"
175+
/>
176+
177+
<div class="registry-input-label mt-24">
178+
{{ t('imageScanner.registries.configuration.cru.scan.label') }}
179+
</div>
180+
181+
<div class="row">
182+
<div class="col span-6" >
183+
<LabeledSelect
184+
v-model:value="value.spec.repositories"
185+
:label="t('imageScanner.registries.configuration.cru.scan.type')"
186+
>
187+
</LabeledSelect>
188+
</div>
189+
<div class="col span-3">
190+
<LabeledSelect
191+
v-model:value="value.spec.scanInterval"
192+
data-testid="registry-scan-interval-select"
193+
:options = "SCAN_INTERVAL_OPTIONS"
194+
option-key="value"
195+
option-label="label"
196+
value="0s"
197+
:label="t('imageScanner.registries.configuration.cru.scan.schedule.label')"
198+
/>
199+
</div>
200+
</div>
201+
202+
</div>
209203
210-
</CruResource>
204+
</CruResource>
211205
</div>
212206
</template>
213207

pkg/sbombastic-image-vulnerability-scanner/l10n/en-us.yaml

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
product:
2-
imageScanner: Image Vulnerability Scanner
2+
imageScanner: Image Vulnerability Scanner
33
imageScanner:
44
registries:
55
title: Registries configuration
@@ -30,13 +30,12 @@ imageScanner:
3030
label: Registry
3131
type:
3232
label: Type
33-
ecr: Amazon ECR Registry
34-
azure: Azure Container Registry
33+
ecr: Docker Hub Registry
3534
custom: Custom Registry
3635
placeholder: Choose a registry type
37-
namespace:
38-
label: Namespace
39-
placeholder: "Choose the registry first"
36+
uri:
37+
label: URI
38+
placeholder: "The registry address URI"
4039
proxy:
4140
enable: Use the embedded proxy
4241
tooltip: "When enabled, Rancher routes all registry traffic through its secure proxy instead of direct connections."
@@ -45,8 +44,7 @@ imageScanner:
4544
label: Scanning
4645
type: Repositories to scan
4746
schedule:
48-
label: Refresh Interval
49-
placeholder: 'default: {hours}'
47+
label: Scan Interval
5048
scan: Start Scan
5149
meta:
5250
registry: Registry

pkg/sbombastic-image-vulnerability-scanner/types/sbombastic-image-vulnerability-scanner.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,7 @@ export interface MetadataProperty {
1717
value?: string;
1818
tags?: string[];
1919
}
20+
21+
export type ScanIntervalOptions = "1h" | "3h" | "6h" | "12h" | "24h" | "0s";
22+
23+
export type RegistryTypeOptions = "dockerhub" | "custom";

0 commit comments

Comments
 (0)