From 7b2113a87137863e180ba7b612b3fe87b0dd17c7 Mon Sep 17 00:00:00 2001 From: Tim Date: Wed, 23 Oct 2019 01:02:05 -0700 Subject: [PATCH] Add support for "dynamic" EKS token auth (#189) --- lib/helpers.js | 25 +++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/lib/helpers.js b/lib/helpers.js index 15d778e..a57473f 100644 --- a/lib/helpers.js +++ b/lib/helpers.js @@ -21,6 +21,7 @@ const fs = require('fs'); const moment = require('moment'); const path = require('path'); const yaml = require('js-yaml'); +const proc = require('child_process'); function loadKubeConfig() { const kubeCfgPath = path.join(process.env.HOME, '.kube/config'); @@ -104,6 +105,7 @@ function getToken(userInfo) { const token = _.get(userInfo, 'user.token') || _.get(userInfo, 'user.auth-provider.config.id-token'); const accessToken = _.get(userInfo, 'user.auth-provider.config.access-token'); + let cmd = _.get(userInfo, 'user.exec.command'); if (token) { return token; } else if (accessToken) { @@ -117,6 +119,29 @@ function getToken(userInfo) { } } return accessToken; + } else if (cmd && cmd === 'aws') { + const args = _.get(userInfo, 'user.exec.args'); + if (args) { + cmd = `${cmd} ${args.join(' ')}`; + } + const env = _.get(userInfo, 'user.exec.env', []); + if (env) { + const profile = _.find(env, e => e.name === 'AWS_PROFILE'); + if (profile) { + cmd = `${cmd} --profile ${profile.value}`; + } + } + let output = {}; + try { + output = proc.execSync(cmd); + } catch (err) { + throw new Error(`Failed to refresh token: ${err.message}`); + } + const resultObj = JSON.parse(output); + const execToken = _.get(resultObj, 'status.token'); + if (execToken) { + return execToken; + } } return null; } diff --git a/package.json b/package.json index 9c40ba1..2cb4aa3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "serverless-kubeless", - "version": "0.8.0", + "version": "0.8.1", "description": "This plugin enables support for Kubeless within the [Serverless Framework](https://github.com/serverless).", "main": "index.js", "directories": {