Skip to content

Commit 3b86e0a

Browse files
author
Oleg Sucharevich
authored
add cmd to add helm repo from s3 bucket and from http web server
1 parent 31c7a4d commit 3b86e0a

File tree

7 files changed

+185
-66
lines changed

7 files changed

+185
-66
lines changed

codefresh.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ steps:
2525
type: build
2626
dockerfile: Dockerfile
2727
image-name: codefresh/cli
28-
tag: ${{CF_BRANCH}}
28+
tag: ${{CF_BRANCH_TAG_NORMALIZED}}
2929

3030
push_to_registry_revision:
3131
title: "Pushing image tagged with revision to registry"

lib/interface/cli/commands/context/create/createHelmRepository.cmd.js

-60
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
const debug = require('debug')('codefresh:cli:create:context:helmRepo');
2+
const Command = require('../../../../Command');
3+
const createContext = require('../../create.cmd');
4+
5+
const command = new Command({
6+
command: 'helm-repository',
7+
parent: createContext,
8+
description: 'Create a helm-repository context [type]',
9+
usage: ``,
10+
webDocs: {
11+
category: 'Create Context',
12+
subCategory : 'Helm Repository',
13+
title: 'Create Helm-Repository Context',
14+
},
15+
builder: (yargs) => {
16+
return yargs;
17+
},
18+
handler: async (argv) => {
19+
yargs.showHelp();
20+
},
21+
});
22+
23+
module.exports = command;
24+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
const debug = require('debug')('codefresh:cli:create:context:helmRepo:http');
2+
const Command = require('../../../../../Command');
3+
const CFError = require('cf-errors');
4+
const createHelmRepoCmd = require('./../base.cmd');
5+
const { context } = require('../../../../../../../logic/index').api;
6+
7+
8+
const command = new Command({
9+
command: 'http <name>',
10+
parent: createHelmRepoCmd,
11+
description: 'Create a helm-repository context from HTTP server',
12+
usage: `
13+
A chart repository is an HTTP server that houses an index.yaml file and optionally some packaged charts.
14+
When you're ready to share your charts, the preferred way to do so is by uploading them to a chart repository.
15+
Read more: https://github.com/kubernetes/helm/blob/master/docs/chart_repository.md`,
16+
webDocs: {
17+
category: 'Create Helm-Repository Context',
18+
subCategory: 'HTTP',
19+
title: 'From HTTP web server',
20+
},
21+
builder: (yargs) => {
22+
yargs
23+
.option('url', {
24+
describe: 'Url to the web server',
25+
required: true,
26+
});
27+
return yargs;
28+
},
29+
handler: async (argv) => {
30+
const data = {
31+
apiVersion: 'v1',
32+
kind: 'context',
33+
owner: argv.owner,
34+
metadata: {
35+
name: argv.name,
36+
},
37+
spec: {
38+
type: 'helm-repository',
39+
data: {
40+
repositoryUrl: argv.url,
41+
},
42+
},
43+
};
44+
45+
let { url } = argv;
46+
const indexFileName = 'index.yaml';
47+
if (url.endsWith(indexFileName)) {
48+
url = url.substring(0, url.indexOf(indexFileName));
49+
}
50+
51+
if (!data.metadata.name || !data.spec.type) {
52+
throw new CFError('Name and type must be provided');
53+
}
54+
55+
await context.createContext(data);
56+
console.log(`Context: ${data.metadata.name} created`);
57+
},
58+
});
59+
60+
module.exports = command;
61+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
const debug = require('debug')('codefresh:cli:create:context:helmRepo:s3');
2+
const Command = require('../../../../../Command');
3+
const CFError = require('cf-errors');
4+
const createHelmRepoCmd = require('./../base.cmd');
5+
const { context } = require('../../../../../../../logic/index').api;
6+
7+
const AWS = {
8+
keyId: {
9+
awsEnvVar: 'AWS_ACCESS_KEY_ID',
10+
},
11+
secretKey: {
12+
awsEnvVar: 'AWS_SECRET_ACCESS_KEY',
13+
},
14+
region: {
15+
awsEnvVar: 'AWS_DEFAULT_REGION',
16+
},
17+
};
18+
19+
AWS.keyId.cliFlag = AWS.keyId.awsEnvVar.replace(/_/g, '-').toLowerCase();
20+
AWS.secretKey.cliFlag = AWS.secretKey.awsEnvVar.replace(/_/g, '-').toLowerCase();
21+
AWS.region.cliFlag = AWS.region.awsEnvVar.replace(/_/g, '-').toLowerCase();
22+
23+
const command = new Command({
24+
command: 's3 <name>',
25+
parent: createHelmRepoCmd,
26+
description: 'Create a helm-repository context from s3 bucket',
27+
usage: `
28+
Helm repository can be stored in AWS S3 bucket.
29+
Codefresh will integrate with the bucket in the following order
30+
If environment variables ${AWS.keyId.awsEnvVar}, ${AWS.secretKey.awsEnvVar} ,${AWS.region.awsEnvVar} are set, will use it to create context.
31+
You can override them using flags ${AWS.keyId.cliFlag} ${AWS.secretKey.cliFlag} ${AWS.region.cliFlag}`,
32+
webDocs: {
33+
category: 'Create Helm-Repository Context',
34+
subCategory: 'S3',
35+
title: 'From AWS S3 bucket',
36+
},
37+
builder: (yargs) => {
38+
yargs
39+
.option(AWS.keyId.cliFlag, {
40+
describe: 'Amazon access key id',
41+
default: process.env[AWS.keyId.awsEnvVar],
42+
required: true,
43+
})
44+
.option(AWS.secretKey.cliFlag, {
45+
describe: 'Amazon access secret key with permissions to the bucket',
46+
default: process.env[AWS.secretKey.awsEnvVar],
47+
required: true,
48+
})
49+
.option(AWS.region.cliFlag, {
50+
describe: 'Amazon default region',
51+
default: process.env[AWS.region.awsEnvVar],
52+
required: true,
53+
})
54+
.option('bucket', {
55+
describe: 'Name of the bucket',
56+
required: true,
57+
});
58+
return yargs;
59+
},
60+
handler: async (argv) => {
61+
let bucket = '';
62+
if (argv.bucket.startsWith('s3://')) {
63+
({ bucket } = argv);
64+
} else {
65+
bucket = `s3://${argv.bucket}`;
66+
}
67+
68+
const data = {
69+
apiVersion: 'v1',
70+
kind: 'context',
71+
owner: argv.owner,
72+
metadata: {
73+
name: argv.name,
74+
},
75+
spec: {
76+
type: 'helm-repository',
77+
data: {
78+
repositoryUrl: bucket,
79+
variables: {
80+
[AWS.keyId.awsEnvVar]: argv[AWS.keyId.cliFlag],
81+
[AWS.secretKey.awsEnvVar]: argv[AWS.secretKey.cliFlag],
82+
[AWS.region.awsEnvVar]: argv[AWS.region.cliFlag],
83+
},
84+
},
85+
},
86+
};
87+
88+
if (!data.metadata.name || !data.spec.type) {
89+
throw new CFError('Name and type must be provided');
90+
}
91+
92+
await context.createContext(data);
93+
console.log(`Context: ${data.metadata.name} created`);
94+
},
95+
});
96+
97+
module.exports = command;
98+

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "codefresh",
3-
"version": "0.8.22",
3+
"version": "0.8.23",
44
"description": "Codefresh command line utility",
55
"main": "index.js",
66
"preferGlobal": true,

yarn.lock

-4
Original file line numberDiff line numberDiff line change
@@ -2054,10 +2054,6 @@ is-typedarray@~1.0.0:
20542054
version "1.0.0"
20552055
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
20562056

2057-
is-url@^1.2.2:
2058-
version "1.2.2"
2059-
resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.2.tgz#498905a593bf47cc2d9e7f738372bbf7696c7f26"
2060-
20612057
is-utf8@^0.2.0:
20622058
version "0.2.1"
20632059
resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"

0 commit comments

Comments
 (0)