mirror of https://github.com/rancher/ui.git
103 lines
2.5 KiB
JavaScript
103 lines
2.5 KiB
JavaScript
import { inject as service } from '@ember/service';
|
|
import { get, set, computed } from '@ember/object';
|
|
import Component from '@ember/component';
|
|
import ModalBase from 'shared/mixins/modal-base';
|
|
import layout from './template';
|
|
|
|
const CONFIG_TPL = `apiVersion: v1
|
|
kind: Config
|
|
clusters:
|
|
- name: "%clusterName%"
|
|
cluster:
|
|
api-version: v1%maybeInsecure%
|
|
server: "%baseUrl%/k8s/clusters/%clusterId%"
|
|
|
|
users:
|
|
- name: "%username%"
|
|
user:
|
|
token: "%token%"
|
|
|
|
contexts:
|
|
- name: "%clusterName%"
|
|
context:
|
|
user: "%username%"
|
|
cluster: "%clusterName%"
|
|
|
|
current-context: "%clusterName%"
|
|
`;
|
|
|
|
|
|
|
|
export default Component.extend(ModalBase, {
|
|
layout,
|
|
classNames: ['modal-container', 'large-modal', 'alert'],
|
|
globalStore: service(),
|
|
access: service(),
|
|
growl: service(),
|
|
scope: service(),
|
|
modalService: service('modal'),
|
|
|
|
token: null,
|
|
|
|
step: 1,
|
|
|
|
downloadUrl: 'http://kubernetes.io/docs/user-guide/prereqs/',
|
|
|
|
replaceVariables(str) {
|
|
let base = window.location.origin;
|
|
let insecure = false;
|
|
if ( base.indexOf('http://') === 0 ) {
|
|
base = base.replace(/^http:\/\//,'https://');
|
|
if ( ! window.location.port ) {
|
|
base += ':80';
|
|
}
|
|
insecure = true;
|
|
}
|
|
|
|
const me = get(this, 'access.me');
|
|
const cluster = get(this, 'scope.currentCluster');
|
|
const tokenObj = get(this, 'token');
|
|
|
|
let token = '';
|
|
if ( tokenObj ) {
|
|
token = btoa(`Bearer ${tokenObj.token}`);
|
|
}
|
|
|
|
return str
|
|
.replace(/%baseUrl%/g, base)
|
|
.replace(/%maybeInsecure%/g,(insecure ? '\n insecure-skip-tls-verify: true' : ''))
|
|
.replace(/%clusterId%/g, get(cluster, 'id'))
|
|
.replace(/%clusterName%/g, get(cluster, 'displayName'))
|
|
.replace(/%username%/g, get(me, 'username'))
|
|
.replace(/%token%/g, token);
|
|
},
|
|
|
|
didReceiveAttrs() {
|
|
const body = {
|
|
description: this.replaceVariables('kubectl token for %clusterName% cluster'),
|
|
responseType: 'json',
|
|
ttl: 365*24*60*60*1000
|
|
};
|
|
|
|
return this.get('globalStore').request({
|
|
url: 'tokens',
|
|
method: 'POST',
|
|
data: body,
|
|
}).then((token) => {
|
|
if ( typeof token === 'string' ) {
|
|
token = JSON.parse(token);
|
|
}
|
|
|
|
set(this, 'token', token);
|
|
set(this, 'step', 2);
|
|
}).catch((err) => {
|
|
this.get('growl').fromError('Error creating API Key',err);
|
|
this.get('modalService').toggleModal();
|
|
});
|
|
},
|
|
|
|
kubeconfig: computed('token', function() {
|
|
return this.replaceVariables(CONFIG_TPL);
|
|
}),
|
|
});
|