All files manifest.js

94.74% Statements 18/19
86.36% Branches 19/22
91.67% Functions 11/12
94.74% Lines 18/19
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 721x   1x                       16x 16x   2x   2x             12x         8x 1x 1x 6x         8x       8x       8x 1x     1x     6x       8x                          
const BUILD_INSTRUCTIONS_ANNOTATION = 'google.cloud.container.build';
 
const SUPPORTED_RESOURCES = [
    'Pod',
    'CronJob',
    'Deployment',
    'DaemonSet',
    'Job',
    'ReplicaSet',
    'ReplicationController',
    'StatefulSet',
];
 
function visitManifest(manifest, visitor) {
    const {kind} = manifest;
    switch (kind) {
        case 'Pod':
            return visitor.pod(manifest);
        case 'CronJob':
            return visitor.cronJob(manifest);
        case 'Deployment':
        case 'DaemonSet':
        case 'Job':
        case 'ReplicaSet':
        case 'ReplicationController':
        case 'StatefulSet':
            return visitor.composite(manifest);
    }
}
 
function getPodSpec(manifest) {
    return visitManifest(manifest, {
        pod: () => manifest.spec,
        cronJob: () => manifest.spec.jobTemplate.spec.template.spec,
        composite: () => manifest.spec.template.spec,
    });
}
 
function getPodSpecContainers({initContainers = [], containers = []}) {
    return initContainers.concat(containers);
}
 
function getContainers(manifest) {
    return getPodSpecContainers(getPodSpec(manifest));
}
 
function getBuilds(manifest) {
    const json = visitManifest(manifest, {
        pod: () => manifest.metadata &&
                manifest.metadata.annotations &&
                manifest.metadata.annotations[BUILD_INSTRUCTIONS_ANNOTATION],
        cronJob: () => manifest.spec.jobTemplate.spec.template.metadata &&
                manifest.spec.jobTemplate.spec.template.metadata.annotations &&
                manifest.spec.jobTemplate.spec.template.metadata.annotations[BUILD_INSTRUCTIONS_ANNOTATION],
        composite: () => manifest.spec.template.metadata &&
                manifest.spec.template.metadata.annotations &&
                manifest.spec.template.metadata.annotations[BUILD_INSTRUCTIONS_ANNOTATION]
    });
    return json && JSON.parse(json) || null;
}
 
function isSupported({kind}) {
    return SUPPORTED_RESOURCES.indexOf(kind) > -1;
}
 
export {
    BUILD_INSTRUCTIONS_ANNOTATION,
    isSupported,
    getContainers,
    getBuilds,
};