Skip to content

Commit

Permalink
feat: Add support for EKS clusters and fix helm v3 home issue (#27)
Browse files Browse the repository at this point in the history
As discussed in #22, the kubeconfig for an EKS cluster relies on having the aws CLI available.
This PR adds the aws-cli dependency and configure the PYTHONPATH so the aws command
can find its modules.
  • Loading branch information
rvichery authored Apr 2, 2020
1 parent 547935f commit 70b15cc
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 11 deletions.
6 changes: 5 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ ENV BASE_URL="https://get.helm.sh"
ENV HELM_2_FILE="helm-v2.16.1-linux-amd64.tar.gz"
ENV HELM_3_FILE="helm-v3.0.0-linux-amd64.tar.gz"

RUN apk add --no-cache ca-certificates jq curl bash nodejs && \
RUN apk add --no-cache ca-certificates \
--repository http://dl-3.alpinelinux.org/alpine/edge/community/ \
jq curl bash nodejs aws-cli && \
# Install helm version 2:
curl -L ${BASE_URL}/${HELM_2_FILE} |tar xvz && \
mv linux-amd64/helm /usr/bin/helm && \
Expand All @@ -19,5 +21,7 @@ RUN apk add --no-cache ca-certificates jq curl bash nodejs && \
# Init version 2 helm:
helm init --client-only

ENV PYTHONPATH "/usr/lib/python3.8/site-packages/"

COPY . /usr/src/
ENTRYPOINT ["node", "/usr/src/index.js"]
23 changes: 13 additions & 10 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -188,9 +188,6 @@ async function run() {


// Setup command options and arguments.
const opts = { env: {
KUBECONFIG: process.env.KUBECONFIG,
}};
const args = [
"upgrade",
release,
Expand All @@ -199,9 +196,17 @@ async function run() {
"--wait",
"--atomic",
`--namespace=${namespace}`,
'--home=/root/.helm/',
];

// Per https://helm.sh/docs/faq/#xdg-base-directory-support
if (helm === "helm3") {
process.env.XDG_DATA_HOME = "/root/.helm/"
process.env.XDG_CACHE_HOME = "/root/.helm/"
process.env.XDG_CONFIG_HOME = "/root/.helm/"
} else {
process.env.HELM_HOME = "/root/.helm/"
}

if (dryRun) args.push("--dry-run");
if (appName) args.push(`--set=app.name=${appName}`);
if (version) args.push(`--set=app.version=${version}`);
Expand All @@ -220,12 +225,12 @@ async function run() {

// Setup necessary files.
if (process.env.KUBECONFIG_FILE) {
opts.env.KUBECONFIG = "./kubeconfig.yml";
await writeFile(opts.env.KUBECONFIG, process.env.KUBECONFIG_FILE);
process.env.KUBECONFIG = "./kubeconfig.yml";
await writeFile(process.env.KUBECONFIG, process.env.KUBECONFIG_FILE);
}
await writeFile("./values.yml", values);

core.debug(`env: KUBECONFIG="${opts.env.KUBECONFIG}"`);
core.debug(`env: KUBECONFIG="${process.env.KUBECONFIG}"`);

// Render value files using github variables.
await renderFiles(valueFiles.concat(["./values.yml"]), {
Expand All @@ -237,19 +242,17 @@ async function run() {
if (removeCanary) {
core.debug(`removing canary ${appName}-canary`);
await exec.exec(helm, deleteCmd(helm, namespace, `${appName}-canary`), {
...opts,
ignoreReturnCode: true
});
}

// Actually execute the deployment here.
if (task === "remove") {
await exec.exec(helm, deleteCmd(helm, namespace, release), {
...opts,
ignoreReturnCode: true
});
} else {
await exec.exec(helm, args, opts);
await exec.exec(helm, args);
}

await status(task === "remove" ? "inactive" : "success");
Expand Down

0 comments on commit 70b15cc

Please sign in to comment.