1
1
import { Processor , Process , InjectQueue } from '@nestjs/bull'
2
- import { Logger } from '@nestjs/common'
2
+ import { Inject , Logger } from '@nestjs/common'
3
3
import { Job , Queue } from 'bull'
4
- import { ImageDescriptor } from '../kubernetes/k8s.service'
4
+ import { IK8sService , ImageDescriptor } from '../kubernetes/k8s.service'
5
5
import { getManifest , contentTypes } from '@snyk/docker-registry-v2-client'
6
6
@Processor ( 'analyzer.check.updates' )
7
7
export class ImageDescriptorWorker {
8
8
private readonly logger = new Logger ( ImageDescriptorWorker . name )
9
9
private readonly patchQueue : Queue
10
+ private readonly k8sService : IK8sService
10
11
11
- constructor ( @InjectQueue ( 'patcher.update' ) queue : Queue ) {
12
+ constructor (
13
+ @InjectQueue ( 'patcher.update' ) queue : Queue ,
14
+ @Inject ( 'K8S_SERVICE' ) k8sService : IK8sService
15
+ ) {
12
16
this . patchQueue = queue
17
+ this . k8sService = k8sService
13
18
}
14
19
15
20
@Process ( )
16
- async fetchImageList ( job : Job < ImageDescriptor > ) {
21
+ async checkForUpdates ( job : Job < ImageDescriptor > ) {
17
22
try {
18
23
this . logger . debug (
19
24
`Checking for updates of ${ job . data . repository } :${
@@ -49,34 +54,42 @@ export class ImageDescriptorWorker {
49
54
acceptManifest : `${ contentTypes . MANIFEST_V2 } , ${ contentTypes . MANIFEST_LIST_V2 } , ${ contentTypes . OCI_INDEX_V1 } , ${ contentTypes . OCI_MANIFEST_V1 } ` ,
50
55
}
51
56
: undefined
57
+ let username
58
+ let password
59
+ if ( job . data . pullSecret ) {
60
+ const creds = await this . k8sService . getPullSecretCredentials ( job . data )
61
+ username = creds . username
62
+ password = creds . password
63
+ }
52
64
const manifest = await getManifest (
53
65
registry ,
54
66
repo ,
55
67
job . data . tag ,
56
- undefined ,
57
- undefined ,
68
+ username ,
69
+ password ,
58
70
reqOptions ,
59
71
{
60
72
os : 'linux' ,
61
73
architecture : job . data . arch ,
62
74
}
63
75
)
64
- if ( manifest == null || manifest ?. indexDigest == null ) {
76
+ if (
77
+ manifest == null ||
78
+ ( manifest ?. indexDigest == null && manifest . manifestDigest == null )
79
+ ) {
65
80
this . logger . warn (
66
81
'Failed to get a workable manifest for %s with tag %s from registry %s' ,
67
82
repo ,
68
83
job . data . tag ,
69
84
registry
70
85
)
71
86
}
87
+ const digest = manifest . indexDigest ?? manifest . manifestDigest
72
88
this . logger . debug (
73
- `Fetched manifest digest = ${ manifest ?. indexDigest } , running hash = ${ job . data . hash } , repo = ${ job . data . repository } ` ,
89
+ `Fetched manifest digest = ${ digest } , running hash = ${ job . data . hash } , repo = ${ job . data . repository } ` ,
74
90
manifest
75
91
)
76
- if (
77
- manifest . indexDigest !== job . data . hash &&
78
- manifest . indexDigest != null
79
- ) {
92
+ if ( digest !== job . data . hash && digest != null ) {
80
93
this . logger . warn (
81
94
`Found an update for ${ registry } /${ repo } :${ job . data . tag } `
82
95
)
@@ -85,19 +98,19 @@ export class ImageDescriptorWorker {
85
98
...job . data ,
86
99
...{
87
100
currentSha : job . data . hash ,
88
- targetSha : manifest . indexDigest ,
101
+ targetSha : digest ,
89
102
} ,
90
103
} )
91
104
return {
92
105
detectedUpdate : true ,
93
106
current : job . data . hash ,
94
- detectedLatest : manifest . indexDigest ,
107
+ detectedLatest : digest ,
95
108
}
96
109
} else {
97
110
return {
98
111
detectedUpdate : false ,
99
112
current : job . data . hash ,
100
- detectedLatest : manifest . indexDigest ,
113
+ detectedLatest : digest ,
101
114
}
102
115
}
103
116
} catch ( err ) {
0 commit comments