Skip to content

Commit 9cd2079

Browse files
author
Oleg Sucharevich
authored
Add cmd to generate image pull secret
This requires kubernetes cluster and docker registry integrated with codefresh
1 parent 7cf9284 commit 9cd2079

File tree

5 files changed

+97
-1
lines changed

5 files changed

+97
-1
lines changed

docs/content/more/_index.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
+++
2+
title = "More"
3+
weight = 40
4+
+++
5+
6+
7+
{{COMMANDS}}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
const debug = require('debug')('codefresh:cli:generate:imagePullSecret');
2+
const Command = require('../../Command');
3+
const genCmd = require('../root/generate.cmd');
4+
const {
5+
generateImagePullSecret,
6+
} = require('./../../../../logic/api/kubernetes');
7+
8+
const command = new Command({
9+
command: 'image-pull-secret',
10+
parent: genCmd,
11+
description: 'Generate image pull secret on Kubernetes cluster from integrated Docker registry',
12+
usage: `
13+
For Kuberentes cluster to pull an image from your private registry it needs special secret typed as \`kubernetes.io/dockercfg\`.
14+
After this secret been created you can use them in pod template that lives in the same namespace.
15+
You can generate this secret from any integrated Docker registry on your account.
16+
More information about image pull secret can be found here: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/`,
17+
webDocs: {
18+
category: 'More',
19+
title: 'Image Pull Secret',
20+
},
21+
builder: (yargs) => {
22+
return yargs
23+
.option('cluster', {
24+
describe: 'cluster name',
25+
required: true,
26+
})
27+
.option('namespace', {
28+
describe: 'namespace name',
29+
default: 'default',
30+
})
31+
.option('registry', {
32+
describe: 'name of Docker registry to generate pull secret from',
33+
required: true,
34+
})
35+
.example('codefresh generate image-pull-secret --cluster cluster --registry cfcr', 'Generate image pull secret');
36+
},
37+
handler: async (argv) => {
38+
const res = await generateImagePullSecret({
39+
cluster: argv.cluster,
40+
namespace: argv.namespace,
41+
registry: argv.registry,
42+
});
43+
console.log(`Image Pull Secret created with name: ${res.name}`);
44+
console.log('Avaliable via kubectl:');
45+
console.log(`kubectl get secret --context ${argv.cluster} --namespace ${argv.namespace} ${res.name}`);
46+
},
47+
});
48+
49+
module.exports = command;
50+
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
const Command = require('../../Command');
2+
const yargs = require('yargs');
3+
4+
const get = new Command({
5+
root: true,
6+
command: 'generate',
7+
description: 'Generate resources as Kubernetes image pull secret and Codefresh Registry token',
8+
usage: 'Codefresh generate --help',
9+
handler: async () => {
10+
yargs.showHelp();
11+
},
12+
});
13+
14+
module.exports = get;

lib/logic/api/kubernetes.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
const CFError = require('cf-errors'); // eslint-disable-line
2+
const { sendHttpRequest } = require('./helper');
3+
4+
5+
const generateImagePullSecret = async (data) => {
6+
const body = {
7+
registry: data.registry,
8+
};
9+
10+
const options = {
11+
url: '/api/kubernetes/secrets/imagePullSecret',
12+
method: 'POST',
13+
qs: {
14+
namespace: data.namespace,
15+
selector: data.cluster,
16+
},
17+
body,
18+
};
19+
return sendHttpRequest(options);
20+
};
21+
22+
23+
module.exports = {
24+
generateImagePullSecret,
25+
};

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "codefresh",
3-
"version": "0.8.19",
3+
"version": "0.8.20",
44
"description": "Codefresh command line utility",
55
"main": "index.js",
66
"preferGlobal": true,

0 commit comments

Comments
 (0)