Socket
Socket
Sign inDemoInstall

skucli

Package Overview
Dependencies
61
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.1.0 to 0.1.1

bin/install.ts

11

build/commands/run.js

@@ -24,3 +24,8 @@ "use strict";

region: { type: 'string', desc: 'Region to deploy to' },
project: { type: 'string', desc: 'Project name' }
project: { type: 'string', desc: 'Project name' },
image: { type: 'string', desc: 'Docker image name' },
name: { type: 'string', desc: 'Service name' },
port: { type: 'string', desc: 'Port number' },
replica: { type: 'string', desc: 'Replica number' },
type: { type: 'string', desc: 'Type of service: ClusterIP, NodePort, LoadBalancer, or ExternalName' }
})

@@ -36,4 +41,4 @@ .positional('action', {

console.log(chalk_1.default.greenBright(figlet_1.default.textSync('skucli', { horizontalLayout: 'full' })));
const { action, cluster, namespace, config, region, project } = argv;
const skucli = new main_1.Main(cluster, namespace, config, region, project);
const { action, cluster, namespace, config, region, project, image, name, port, replica, type } = argv;
const skucli = new main_1.Main(cluster, namespace, config, region, project, image, name, port, replica, type);
skucli.inititialise();

@@ -40,0 +45,0 @@ console.log('action: ', action);

@@ -5,5 +5,6 @@ "use strict";

exports.commands = [
'ibmLogin', 'ibmSetup', 'ibmListCluster', 'ibmSwitchRegion', 'ibmConfigCluster', 'setup',
'setKubeConfig', 'createNamespace', 'setCurrentNamespace', 'installRouteInNamespace'
'ibmLogin', 'ibmSetup', 'ibmListCluster', 'ibmSwitchRegion', 'ibmConfigCluster', 'setup', 'status',
'setKubeConfig', 'createNamespace', 'setCurrentNamespace', 'installRouteInNamespace', 'initWithoutIngress',
'retrievePassword', 'deployService', 'exposeService', 'showService', 'deleteService'
];
//# sourceMappingURL=hzn-model.js.map

@@ -8,4 +8,9 @@ import { Utils } from './utils';

project: any;
image: any;
name: any;
port: any;
replica: any;
type: any;
utils: Utils;
constructor(cluster: any, namespace: any, config: any, region: any, project: any);
constructor(cluster: any, namespace: any, config: any, region: any, project: any, image: any, name: any, port: any, replica: any, type: any);
inititialise(): void;

@@ -23,2 +28,11 @@ ibmSwitchRegion(): import("rxjs").Observable<unknown>;

setup(): import("rxjs").Observable<unknown>;
status(): import("rxjs").Observable<unknown>;
initWithoutIngress(): import("rxjs").Observable<unknown>;
retrievePassword(): import("rxjs").Observable<unknown>;
deployFrontend(): import("rxjs").Observable<unknown>;
deployBackend(): import("rxjs").Observable<unknown>;
deployService(): import("rxjs").Observable<unknown>;
exposeService(): import("rxjs").Observable<unknown>;
showService(): import("rxjs").Observable<unknown>;
deleteService(): import("rxjs").Observable<unknown>;
}

@@ -6,3 +6,3 @@ "use strict";

class Main {
constructor(cluster, namespace, config, region, project) {
constructor(cluster, namespace, config, region, project, image, name, port, replica, type) {
this.cluster = cluster;

@@ -13,2 +13,7 @@ this.namespace = namespace;

this.project = project || 'ieam';
this.image = image;
this.name = name;
this.port = port;
this.replica = replica || 0;
this.type = type || 'ClusterIP';
this.inititialise();

@@ -52,4 +57,31 @@ }

}
status() {
return this.utils.status();
}
initWithoutIngress() {
return this.utils.initWithoutIngress();
}
retrievePassword() {
return this.utils.retrievePassword();
}
deployFrontend() {
return this.utils.deployFrontend(this.image);
}
deployBackend() {
return this.utils.deployBackend(this.image);
}
deployService() {
return this.utils.deployService(this.name, this.image, this.replica);
}
exposeService() {
return this.utils.exposeService(this.name, this.port, this.type);
}
showService() {
return this.utils.showService(this.name);
}
deleteService() {
return this.utils.deleteService(this.name);
}
}
exports.Main = Main;
//# sourceMappingURL=main.js.map

@@ -9,3 +9,12 @@ import { Observable } from 'rxjs';

initialise(): void;
status(): Observable<unknown>;
setup(): Observable<unknown>;
initWithoutIngress(): Observable<unknown>;
deployFrontend(image: string): Observable<unknown>;
deployBackend(image: string, replicas?: number): Observable<unknown>;
deployService(name: string, image: string, replica?: number): Observable<unknown>;
exposeService(service: string, port: string, type: string): Observable<unknown>;
showService(service: string): Observable<unknown>;
deleteService(service: string): Observable<unknown>;
retrievePassword(): Observable<unknown>;
ibmLogin(): Observable<unknown>;

@@ -12,0 +21,0 @@ ibmListCluster(): Observable<unknown>;

@@ -45,5 +45,63 @@ "use strict";

}
status() {
return new rxjs_1.Observable((observer) => {
let arg = `skupper status`;
this.shell(arg, `done checking status`, `failed to check status`)
.subscribe(() => {
observer.next();
observer.complete();
});
});
}
setup() {
return new rxjs_1.Observable((observer) => {
console.log(this.cwd, this.homePath, this.globalPath);
//console.log(this.cwd, this.homePath, this.globalPath)
console.log('Step 1:');
console.log('Skupper is designed for use with multiple namespaces, typically on different clusters. The skupper command uses your kubeconfig and current context to select the namespace where it operates.');
console.log('A single kubeconfig supports only one active context per user. We will be creating two contexts in this exercise.');
console.log('In a separate console, run this command in each console to start a console session\n');
console.log('In console #1 (west), run "export KUBECONFIG=$HOME/.kube/config-west"');
console.log('In console #2 (east), run "export KUBECONFIG=$HOME/.kube/config-east"\n');
console.log('Step 2:');
console.log('Configure cluster access');
console.log('In this exercise, we will be using IBM Kubernetes Service. For other providers, please refer to https://skupper.io/start/index.html');
console.log('If you have not already set up your IBM Cloud account & environment, please go here https://skupper.io/start/ibmks.html#cluster-access\n');
console.log('If you have not logged into your IBM account, you can run "skucli run ibmLogin');
console.log('To use kubectl with a cluster, you must configure your local kubeconfig.');
console.log('Run "skucli run ibmListCluster to list the available clusters. With IBM free account, you should see mycluster-free');
console.log('Run "skucli run ibmConfigCluster --cluster mycluster-free" to configure the specified cluster\n');
console.log('Step 3:');
console.log('Create namespaces');
console.log('Run the following commands to create and configure namespace for each session');
console.log('In console #1');
console.log('run "skucli run createNamespace --namespace west"');
console.log('run "skucli run setCurrentNamespace --namespace west"\n');
console.log('In console #2');
console.log('run "skucli run createNamespace --namespace east"');
console.log('run "skucli run setCurrentNamespace --namespace east"\n');
console.log('Step 4:');
console.log('Install Skupper router in each namespace');
console.log('If you have a free tier account(which does not support load balancer), use initWithoutIngress, otherwise use installRouteInNamespace');
console.log('In console #1');
console.log('run "skucli run initWithoutIngress"');
console.log('run "skucli run status"\n');
console.log('In console #2');
console.log('run "skucli run initWithoutIngress"');
console.log('run "skucli run status"\n');
console.log('Step 5:');
console.log('Link namespaces');
console.log('In console #1');
console.log('run "skucli run createToken --namespace west"');
console.log('In console #2');
console.log('run "skucli run createLink --namespace west"\n');
console.log('Step 6:');
console.log('Deploy frontend and backend services');
console.log('In console #1');
console.log('run "skucli run deployService --name frontend --image quay.io/skupper/hello-world-frontend"');
console.log('In console #2');
console.log('run "skucli run deployService --name backend --image quay.io/skupper/hello-world-backend --replica 3"');
console.log('Expose backend service from East and make it available in West');
console.log('run "skucli run exposeService --name backend --port 8080"');
console.log('In console #1 (west), to see if the service backend from the East is available in the West');
console.log('run "skucli run showService --name backend"');
observer.next();

@@ -53,2 +111,119 @@ observer.complete();

}
initWithoutIngress() {
return new rxjs_1.Observable((observer) => {
let arg = `skupper init --ingress none --enable-console --enable-flow-collector`;
this.shell(arg, `done init with no Ingress`, `failed to init with no Ingress`)
.subscribe(() => {
observer.next();
observer.complete();
});
});
}
deployFrontend(image) {
return new rxjs_1.Observable((observer) => {
if (!image || image.length == 0) {
observer.next('Please provide docker --image name');
observer.complete();
}
else {
let arg = `kubectl create deployment frontend --image ${image}`;
this.shell(arg, `done deploying ${image}`, `failed to deploy ${image}`)
.subscribe(() => {
observer.next();
observer.complete();
});
}
});
}
deployBackend(image, replicas = 3) {
return new rxjs_1.Observable((observer) => {
if (!image || image.length == 0) {
observer.next('Please provide docker --image name');
observer.complete();
}
else {
let arg = `kubectl create deployment backend --image ${image} --replicas ${replicas}`;
this.shell(arg, `done deploying ${image}`, `failed to deploy ${image}`)
.subscribe(() => {
observer.next();
observer.complete();
});
}
});
}
deployService(name, image, replica = 0) {
return new rxjs_1.Observable((observer) => {
if (!image || image.length == 0 || !name || name.length == 0) {
observer.next('Please provide docker --image and --name');
observer.complete();
}
else {
const replicas = replica > 0 ? `--replacas ${replica}` : '';
let arg = `kubectl create deployment ${name} --image ${image} ${replicas}`;
this.shell(arg, `done deploying ${image}`, `failed to deploy ${image}`)
.subscribe(() => {
observer.next();
observer.complete();
});
}
});
}
exposeService(service, port, type) {
return new rxjs_1.Observable((observer) => {
if (!service || service.length == 0 || !port || port.length == 0) {
observer.next('Please provide service --name and --port');
observer.complete();
}
else {
let arg = `skupper expose deployment/${service} --port ${port} --type ${type}`;
this.shell(arg, `done exposing ${service} at port ${port}`, `failed to expose ${service}`)
.subscribe(() => {
observer.next();
observer.complete();
});
}
});
}
showService(service) {
return new rxjs_1.Observable((observer) => {
if (!service || service.length == 0) {
observer.next('Please provide service --name');
observer.complete();
}
else {
let arg = `kubectl get service/${service}`;
this.shell(arg, `done getting ${service} service`, `failed to get ${service} service`)
.subscribe(() => {
observer.next();
observer.complete();
});
}
});
}
deleteService(service) {
return new rxjs_1.Observable((observer) => {
if (!service || service.length == 0) {
observer.next('Please provide service --name');
observer.complete();
}
else {
let arg = `kubectl delete service/${service}`;
this.shell(arg, `done deleting ${service} service`, `failed to delete ${service} service`)
.subscribe(() => {
observer.next();
observer.complete();
});
}
});
}
retrievePassword() {
return new rxjs_1.Observable((observer) => {
let arg = `kubectl get secret skupper-console-users -o jsonpath={.data.admin} | base64 -d`;
this.shell(arg, `done retrieving password`, `failed to retrieve password`)
.subscribe(() => {
observer.next();
observer.complete();
});
});
}
ibmLogin() {

@@ -55,0 +230,0 @@ return new rxjs_1.Observable((observer) => {

{
"name": "skucli",
"version": "0.1.0",
"version": "0.1.1",
"description": "",

@@ -18,2 +18,3 @@ "main": "./build/index.js",

"switch-region": "ibmcloud cr region-set ${region} && ibmcloud cr login",
"postinstall": "ts-node bin/install.ts",
"pre-commit": "npm run build",

@@ -20,0 +21,0 @@ "test": "echo \"Error: no test specified\" && exit 1",

@@ -12,5 +12,6 @@ # Skucli

```
action Available actions: createNamespace ibmConfigCluster ibmListCluster
ibmLogin ibmSetup ibmSwitchRegion installRouteInNamespace
setCurrentNamespace setKubeConfig setup
action Available actions: createNamespace deleteService deployService
exposeService ibmConfigCluster ibmListCluster ibmLogin ibmSetup
ibmSwitchRegion initWithoutIngress installRouteInNamespace
retrievePassword setCurrentNamespace setKubeConfig setup showService
```

@@ -17,0 +18,0 @@

@@ -27,3 +27,8 @@ import chalk from 'chalk';

region: {type: 'string', desc: 'Region to deploy to'},
project: {type: 'string', desc: 'Project name'}
project: {type: 'string', desc: 'Project name'},
image: {type: 'string', desc: 'Docker image name'},
name: {type: 'string', desc: 'Service name'},
port: {type: 'string', desc: 'Port number'},
replica: {type: 'string', desc: 'Replica number'},
type: {type: 'string', desc: 'Type of service: ClusterIP, NodePort, LoadBalancer, or ExternalName'}
})

@@ -43,4 +48,4 @@ .positional('action', {

);
const { action, cluster, namespace, config, region, project } = argv;
const skucli = new Main(cluster, namespace, config, region, project);
const { action, cluster, namespace, config, region, project, image, name, port, replica, type } = argv;
const skucli = new Main(cluster, namespace, config, region, project, image, name, port, replica, type);
skucli.inititialise();

@@ -47,0 +52,0 @@ console.log('action: ', action)

export const commands = [
'ibmLogin', 'ibmSetup', 'ibmListCluster', 'ibmSwitchRegion', 'ibmConfigCluster', 'setup',
'setKubeConfig', 'createNamespace', 'setCurrentNamespace', 'installRouteInNamespace'
'ibmLogin', 'ibmSetup', 'ibmListCluster', 'ibmSwitchRegion', 'ibmConfigCluster', 'setup', 'status',
'setKubeConfig', 'createNamespace', 'setCurrentNamespace', 'installRouteInNamespace', 'initWithoutIngress',
'retrievePassword', 'deployService', 'exposeService', 'showService', 'deleteService'
];

@@ -9,2 +9,7 @@ import { Utils } from './utils';

project;
image;
name;
port;
replica;
type;
utils: Utils;

@@ -16,3 +21,8 @@ constructor(

region,
project
project,
image,
name,
port,
replica,
type
) {

@@ -24,2 +34,7 @@ this.cluster = cluster;

this.project = project || 'ieam';
this.image = image;
this.name = name;
this.port = port;
this.replica = replica || 0;
this.type = type || 'ClusterIP'
this.inititialise();

@@ -64,2 +79,29 @@ }

}
status() {
return this.utils.status();
}
initWithoutIngress() {
return this.utils.initWithoutIngress();
}
retrievePassword() {
return this.utils.retrievePassword();
}
deployFrontend() {
return this.utils.deployFrontend(this.image);
}
deployBackend() {
return this.utils.deployBackend(this.image);
}
deployService() {
return this.utils.deployService(this.name, this.image, this.replica);
}
exposeService() {
return this.utils.exposeService(this.name, this.port, this.type);
}
showService() {
return this.utils.showService(this.name);
}
deleteService() {
return this.utils.deleteService(this.name);
}
}

@@ -46,5 +46,65 @@ import { exec } from 'child_process';

}
status() {
return new Observable((observer) => {
let arg = `skupper status`
this.shell(arg,`done checking status`, `failed to check status`)
.subscribe(() => {
observer.next();
observer.complete();
})
})
}
setup() {
return new Observable((observer) => {
console.log(this.cwd, this.homePath, this.globalPath)
//console.log(this.cwd, this.homePath, this.globalPath)
console.log('Step 1:')
console.log('Skupper is designed for use with multiple namespaces, typically on different clusters. The skupper command uses your kubeconfig and current context to select the namespace where it operates.')
console.log('A single kubeconfig supports only one active context per user. We will be creating two contexts in this exercise.')
console.log('In a separate console, run this command in each console to start a console session\n')
console.log('In console #1 (west), run "export KUBECONFIG=$HOME/.kube/config-west"')
console.log('In console #2 (east), run "export KUBECONFIG=$HOME/.kube/config-east"\n')
console.log('Step 2:')
console.log('Configure cluster access')
console.log('In this exercise, we will be using IBM Kubernetes Service. For other providers, please refer to https://skupper.io/start/index.html')
console.log('If you have not already set up your IBM Cloud account & environment, please go here https://skupper.io/start/ibmks.html#cluster-access\n')
console.log('If you have not logged into your IBM account, you can run "skucli run ibmLogin')
console.log('To use kubectl with a cluster, you must configure your local kubeconfig.')
console.log('Run "skucli run ibmListCluster to list the available clusters. With IBM free account, you should see mycluster-free')
console.log('Run "skucli run ibmConfigCluster --cluster mycluster-free" to configure the specified cluster\n')
console.log('Step 3:')
console.log('Create namespaces')
console.log('Run the following commands to create and configure namespace for each session')
console.log('In console #1')
console.log('run "skucli run createNamespace --namespace west"')
console.log('run "skucli run setCurrentNamespace --namespace west"\n')
console.log('In console #2')
console.log('run "skucli run createNamespace --namespace east"')
console.log('run "skucli run setCurrentNamespace --namespace east"\n')
console.log('Step 4:')
console.log('Install Skupper router in each namespace')
console.log('If you have a free tier account(which does not support load balancer), use initWithoutIngress, otherwise use installRouteInNamespace')
console.log('In console #1')
console.log('run "skucli run initWithoutIngress"')
console.log('run "skucli run status"\n')
console.log('In console #2')
console.log('run "skucli run initWithoutIngress"')
console.log('run "skucli run status"\n')
console.log('Step 5:')
console.log('Link namespaces')
console.log('In console #1')
console.log('run "skucli run createToken --namespace west"')
console.log('In console #2')
console.log('run "skucli run createLink --namespace west"\n')
console.log('Step 6:')
console.log('Deploy frontend and backend services')
console.log('In console #1')
console.log('run "skucli run deployService --name frontend --image quay.io/skupper/hello-world-frontend"')
console.log('In console #2')
console.log('run "skucli run deployService --name backend --image quay.io/skupper/hello-world-backend --replica 3"')
console.log('Expose backend service from East and make it available in West')
console.log('run "skucli run exposeService --name backend --port 8080"')
console.log('In console #1 (west), to see if the service backend from the East is available in the West')
console.log('run "skucli run showService --name backend"')
observer.next()

@@ -54,2 +114,113 @@ observer.complete()

}
initWithoutIngress() {
return new Observable((observer) => {
let arg = `skupper init --ingress none --enable-console --enable-flow-collector`
this.shell(arg,`done init with no Ingress`, `failed to init with no Ingress`)
.subscribe(() => {
observer.next();
observer.complete();
})
})
}
deployFrontend(image: string) {
return new Observable((observer) => {
if(!image || image.length == 0) {
observer.next('Please provide docker --image name')
observer.complete()
} else {
let arg = `kubectl create deployment frontend --image ${image}`
this.shell(arg,`done deploying ${image}`, `failed to deploy ${image}`)
.subscribe(() => {
observer.next();
observer.complete();
})
}
})
}
deployBackend(image: string, replicas = 3) {
return new Observable((observer) => {
if(!image || image.length == 0) {
observer.next('Please provide docker --image name')
observer.complete()
} else {
let arg = `kubectl create deployment backend --image ${image} --replicas ${replicas}`
this.shell(arg,`done deploying ${image}`, `failed to deploy ${image}`)
.subscribe(() => {
observer.next();
observer.complete();
})
}
})
}
deployService(name: string, image: string, replica = 0) {
return new Observable((observer) => {
if(!image || image.length == 0 || !name || name.length == 0) {
observer.next('Please provide docker --image and --name')
observer.complete()
} else {
const replicas = replica > 0 ? `--replacas ${replica}` : ''
let arg = `kubectl create deployment ${name} --image ${image} ${replicas}`
this.shell(arg,`done deploying ${image}`, `failed to deploy ${image}`)
.subscribe(() => {
observer.next();
observer.complete();
})
}
})
}
exposeService(service: string, port: string, type: string) {
return new Observable((observer) => {
if(!service || service.length == 0 || !port || port.length == 0) {
observer.next('Please provide service --name and --port')
observer.complete()
} else {
let arg = `skupper expose deployment/${service} --port ${port} --type ${type}`
this.shell(arg,`done exposing ${service} at port ${port}`, `failed to expose ${service}`)
.subscribe(() => {
observer.next();
observer.complete();
})
}
})
}
showService(service: string) {
return new Observable((observer) => {
if(!service || service.length == 0) {
observer.next('Please provide service --name')
observer.complete()
} else {
let arg = `kubectl get service/${service}`
this.shell(arg,`done getting ${service} service`, `failed to get ${service} service`)
.subscribe(() => {
observer.next();
observer.complete();
})
}
})
}
deleteService(service: string) {
return new Observable((observer) => {
if(!service || service.length == 0) {
observer.next('Please provide service --name')
observer.complete()
} else {
let arg = `kubectl delete service/${service}`
this.shell(arg,`done deleting ${service} service`, `failed to delete ${service} service`)
.subscribe(() => {
observer.next();
observer.complete();
})
}
})
}
retrievePassword() {
return new Observable((observer) => {
let arg = `kubectl get secret skupper-console-users -o jsonpath={.data.admin} | base64 -d`
this.shell(arg,`done retrieving password`, `failed to retrieve password`)
.subscribe(() => {
observer.next();
observer.complete();
})
})
}
ibmLogin() {

@@ -56,0 +227,0 @@ return new Observable((observer) => {

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc