From 16476655156801678ab819d000543d0ab8cf7240 Mon Sep 17 00:00:00 2001 From: Ivan Pedrazas Date: Wed, 21 Dec 2016 14:18:29 +0000 Subject: [PATCH 01/20] delete event --- .drone.yml | 10 +--------- .drone.yml.sig | 2 +- README.md | 7 +++---- plugin.go | 45 +++++++++++++++++++++++++++++++++++++++------ plugin_test.go | 7 ++----- 5 files changed, 46 insertions(+), 25 deletions(-) diff --git a/.drone.yml b/.drone.yml index d0e309c..91d4a01 100644 --- a/.drone.yml +++ b/.drone.yml @@ -26,15 +26,7 @@ pipeline: when: event: [push] branch: [master] - - helm_deploy: - image: quay.io/ipedrazas/drone-helm - skip_tls_verify: true - chart: stable/redis - release: ${DRONE_BRANCH}-drone-helm - api_server: $STAGING_API_SERVER - debug: true - + slack: image: plugins/slack channel: deploys diff --git a/.drone.yml.sig b/.drone.yml.sig index 1610618..4e7b69e 100644 --- a/.drone.yml.sig +++ b/.drone.yml.sig @@ -1 +1 @@ -eyJhbGciOiJIUzI1NiJ9.d29ya3NwYWNlOgogIGJhc2U6IC9nbwoKcGlwZWxpbmU6CiAgdGVzdDoKICAgIGltYWdlOiBnb2xhbmc6MS42CiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBDR09fRU5BQkxFRD0wCiAgICBjb21tYW5kczoKICAgICAgLSBnbyBnZXQKICAgICAgLSBnbyB0ZXN0IC1jb3ZlciAtY292ZXJwcm9maWxlPWNvdmVyYWdlLm91dAogICAgICAtIGdvIGJ1aWxkIC1sZGZsYWdzICItcyAtdyAtWCBtYWluLmJ1aWxkPSREUk9ORV9CVUlMRF9OVU1CRVIiIC1hIC10YWdzIG5ldGdvCgoKICBidWlsZF9kb2NrZXJfaW1hZ2U6CiAgICBpbWFnZTogZG9ja2VyOjEuMTIKICAgIGVudmlyb25tZW50OgogICAgICAtIERPQ0tFUl9IT1NUPXRjcDovLzEyNy4wLjAuMToyMzc1CiAgICAgIC0gVEFHPSR7RFJPTkVfQlJBTkNIfS0ke0RST05FX0NPTU1JVF9TSEE6MDo3fQogICAgY29tbWFuZHM6CiAgICAgIC0gZG9ja2VyIGxvZ2luIC11PSIke1FVQVlfVVNFUk5BTUV9IiAtcD0iJHtRVUFZX1BBU1NXT1JEfSIgcXVheS5pbwogICAgICAtIGRvY2tlciBidWlsZCAtdCBpbWFnZSAuICAgICAgCiAgICAgIC0gZG9ja2VyIHRhZyBpbWFnZSBxdWF5LmlvL2lwZWRyYXphcy9kcm9uZS1oZWxtOmxhdGVzdAogICAgICAtIGRvY2tlciB0YWcgaW1hZ2UgcXVheS5pby9pcGVkcmF6YXMvZHJvbmUtaGVsbToke1RBR30KICAgICAgLSBkb2NrZXIgcHVzaCBxdWF5LmlvL2lwZWRyYXphcy9kcm9uZS1oZWxtCiAgICB3aGVuOgogICAgIGV2ZW50OiBbcHVzaF0KICAgICBicmFuY2g6IFttYXN0ZXJdCiAgCiAgaGVsbV9kZXBsb3k6ICAgIAogICAgaW1hZ2U6IHF1YXkuaW8vaXBlZHJhemFzL2Ryb25lLWhlbG0gICAgCiAgICBza2lwX3Rsc192ZXJpZnk6IHRydWUKICAgIGNoYXJ0OiBzdGFibGUvcmVkaXMKICAgIHJlbGVhc2U6ICR7RFJPTkVfQlJBTkNIfS1kcm9uZS1oZWxtICAgIAogICAgYXBpX3NlcnZlcjogJFNUQUdJTkdfQVBJX1NFUlZFUgogICAgZGVidWc6IHRydWUKICAKICBzbGFjazoKICAgIGltYWdlOiBwbHVnaW5zL3NsYWNrCiAgICBjaGFubmVsOiBkZXBsb3lzCiAgICB1c2VybmFtZTogZHJvbmUKICAgIHRlbXBsYXRlOiA-CiAgICAgIHt7IGJ1aWxkLmF1dGhvciB9fSBmaW5pc2hlZCBidWlsZGluZyAgKjxodHRwOi8vZHJvbmUuc29ob2hvdXNlZGlnaXRhbC5jb20vU29ob0hvdXNlL3t7IHJlcG8ubmFtZSB9fS97eyBidWlsZC5udW1iZXIgfX18e3sgYnVpbGQuYnJhbmNoIH19ICh7eyBidWlsZC5udW1iZXIgfX0pPiogb2Yge3sgcmVwby5uYW1lIH19ICB3aXRoIGEge3sgYnVpbGQuc3RhdHVzIH19IHN0YXR1cwoKICAgICAgICAKc2VydmljZXM6CiAgZGluZDoKICAgIGltYWdlOiBkb2NrZXI6MS4xMi1kaW5kCiAgICBwcml2aWxlZ2VkOiB0cnVlCiAgICBjb21tYW5kOgogICAgICAtICItcyIKICAgICAgLSAib3ZlcmxheSIKICAKcGx1Z2luOgogIG5hbWU6IGRyb25lLWhlbG0KICBkZXNjOiBFeGVjdXRlIGhlbG0gdG8gCiAgdHlwZTogZGVwbG95CiAgaW1hZ2U6IHF1YXkuaW8vaXBlZHJhemFzL2Ryb25lLWhlbG0KICBsYWJlbHM6CiAgICAtIGRlcGxveQogICAgLSBrdWJlcm5ldGVzCiAgICAtIGhlbG0.lbTVbRgOWKvlqaZY0RVnJO8zw4niLBZ9yOCXqJTKoKA \ No newline at end of file +eyJhbGciOiJIUzI1NiJ9.d29ya3NwYWNlOgogIGJhc2U6IC9nbwoKcGlwZWxpbmU6CiAgdGVzdDoKICAgIGltYWdlOiBnb2xhbmc6MS42CiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBDR09fRU5BQkxFRD0wCiAgICBjb21tYW5kczoKICAgICAgLSBnbyBnZXQKICAgICAgLSBnbyB0ZXN0IC1jb3ZlciAtY292ZXJwcm9maWxlPWNvdmVyYWdlLm91dAogICAgICAtIGdvIGJ1aWxkIC1sZGZsYWdzICItcyAtdyAtWCBtYWluLmJ1aWxkPSREUk9ORV9CVUlMRF9OVU1CRVIiIC1hIC10YWdzIG5ldGdvCgoKICBidWlsZF9kb2NrZXJfaW1hZ2U6CiAgICBpbWFnZTogZG9ja2VyOjEuMTIKICAgIGVudmlyb25tZW50OgogICAgICAtIERPQ0tFUl9IT1NUPXRjcDovLzEyNy4wLjAuMToyMzc1CiAgICAgIC0gVEFHPSR7RFJPTkVfQlJBTkNIfS0ke0RST05FX0NPTU1JVF9TSEE6MDo3fQogICAgY29tbWFuZHM6CiAgICAgIC0gZG9ja2VyIGxvZ2luIC11PSIke1FVQVlfVVNFUk5BTUV9IiAtcD0iJHtRVUFZX1BBU1NXT1JEfSIgcXVheS5pbwogICAgICAtIGRvY2tlciBidWlsZCAtdCBpbWFnZSAuICAgICAgCiAgICAgIC0gZG9ja2VyIHRhZyBpbWFnZSBxdWF5LmlvL2lwZWRyYXphcy9kcm9uZS1oZWxtOmxhdGVzdAogICAgICAtIGRvY2tlciB0YWcgaW1hZ2UgcXVheS5pby9pcGVkcmF6YXMvZHJvbmUtaGVsbToke1RBR30KICAgICAgLSBkb2NrZXIgcHVzaCBxdWF5LmlvL2lwZWRyYXphcy9kcm9uZS1oZWxtCiAgICB3aGVuOgogICAgIGV2ZW50OiBbcHVzaF0KICAgICBicmFuY2g6IFttYXN0ZXJdCiAgIAogIHNsYWNrOgogICAgaW1hZ2U6IHBsdWdpbnMvc2xhY2sKICAgIGNoYW5uZWw6IGRlcGxveXMKICAgIHVzZXJuYW1lOiBkcm9uZQogICAgdGVtcGxhdGU6ID4KICAgICAge3sgYnVpbGQuYXV0aG9yIH19IGZpbmlzaGVkIGJ1aWxkaW5nICAqPGh0dHA6Ly9kcm9uZS5zb2hvaG91c2VkaWdpdGFsLmNvbS9Tb2hvSG91c2Uve3sgcmVwby5uYW1lIH19L3t7IGJ1aWxkLm51bWJlciB9fXx7eyBidWlsZC5icmFuY2ggfX0gKHt7IGJ1aWxkLm51bWJlciB9fSk-KiBvZiB7eyByZXBvLm5hbWUgfX0gIHdpdGggYSB7eyBidWlsZC5zdGF0dXMgfX0gc3RhdHVzCgogICAgICAgIApzZXJ2aWNlczoKICBkaW5kOgogICAgaW1hZ2U6IGRvY2tlcjoxLjEyLWRpbmQKICAgIHByaXZpbGVnZWQ6IHRydWUKICAgIGNvbW1hbmQ6CiAgICAgIC0gIi1zIgogICAgICAtICJvdmVybGF5IgogIApwbHVnaW46CiAgbmFtZTogZHJvbmUtaGVsbQogIGRlc2M6IEV4ZWN1dGUgaGVsbSB0byAKICB0eXBlOiBkZXBsb3kKICBpbWFnZTogcXVheS5pby9pcGVkcmF6YXMvZHJvbmUtaGVsbQogIGxhYmVsczoKICAgIC0gZGVwbG95CiAgICAtIGt1YmVybmV0ZXMKICAgIC0gaGVsbQ.3yHjlpd6ckptH7mVnPqzyH2EWHsBmFPbx162SmlYoVA \ No newline at end of file diff --git a/README.md b/README.md index 5c7d314..e283c77 100644 --- a/README.md +++ b/README.md @@ -37,17 +37,16 @@ To test the plugin, you can run `minikube` and just run the docker image as foll docker run --rm \ -e PLUGIN_API_SERVER=https://192.168.64.5:8443 \ - -e PLUGIN_TOKEN="eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ld..." \ + -e PLUGIN_TOKEN="" \ -e PLUGIN_NAMESPACE=default \ -e PLUGIN_SKIP_TLS_VERIFY=true \ -e PLUGIN_RELEASE=my-release \ - -e PLUGIMN_CHART=stable/jenkins \ + -e PLUGIMN_CHART=stable/redis \ -e PLUGIN_VALUES="tag=TAG,api=API" \ -e PLUGIN_SECRETS=TAG,API \ - -e TAG=v1.0.1 \ - -e API=http://myapi \ -e PLUGIN_DEBUG=true \ -e PLUGIN_DRY_RUN=true \ + -e DRONE_BUILD_EVENT=delete \ quay.io/ipedrazas/drone-helm diff --git a/plugin.go b/plugin.go index cd82511..fa08306 100644 --- a/plugin.go +++ b/plugin.go @@ -37,7 +37,18 @@ type ( } ) -func setHelmCommand(p *Plugin) { +func setHelmHelp(p *Plugin) { + p.Config.HelmCommand = []string{""} +} +func setDeleteEventCommand(p *Plugin) { + upgrade := make([]string, 2) + upgrade[0] = "delete" + upgrade[1] = p.Config.Release + + p.Config.HelmCommand = upgrade +} + +func setPushEventCommand(p *Plugin) { upgrade := make([]string, 2) upgrade[0] = "upgrade" upgrade[1] = "--install" @@ -56,10 +67,25 @@ func setHelmCommand(p *Plugin) { upgrade = append(upgrade, "--debug") } p.Config.HelmCommand = upgrade + +} + +func setHelmCommand(p *Plugin) { + buildEvent := os.Getenv("DRONE_BUILD_EVENT") + switch buildEvent { + case "push": + setPushEventCommand(p) + case "delete": + setDeleteEventCommand(p) + default: + setHelmHelp(p) + } + } // Exec default method func (p *Plugin) Exec() error { + if p.Config.APIServer == "" { return fmt.Errorf("Error: API Server is needed to deploy.") } @@ -72,13 +98,13 @@ func (p *Plugin) Exec() error { p.debug() } - fmt.Println(p) init := make([]string, 1) init[0] = "init" err := runCommand(init) if err != nil { return fmt.Errorf("Error running helm comand: " + strings.Join(init[:], " ")) } + setHelmCommand(p) if p.Config.Debug { log.Println("helm comand: " + strings.Join(p.Config.HelmCommand[:], " ")) @@ -113,16 +139,22 @@ func resolveSecrets(p *Plugin) { if len(p.Config.Secrets) > 0 { for _, secret := range p.Config.Secrets { envval := os.Getenv(secret) - p.Config.Values = resolveEnvVar(p.Config.Values, secret, envval) - p.Config.APIServer = resolveEnvVar(p.Config.APIServer, secret, envval) - p.Config.Token = resolveEnvVar(p.Config.Token, secret, envval) + p.Config.Values = resolveEnvVar(p.Config.Values, secret, envval, p.Config.Prefix) + p.Config.APIServer = resolveEnvVar(p.Config.APIServer, secret, envval, p.Config.Prefix) + p.Config.Token = resolveEnvVar(p.Config.Token, secret, envval, p.Config.Prefix) } } } +// if prefix is specified, Vars with prefix will be used + +// regex to get envvars +// \$(\{?(\w+)\}?)\.? + // this functions checks if $VAR or ${VAR} exists and // returns the text with resolved vars -func resolveEnvVar(key string, envvar string, envval string) string { +func resolveEnvVar(key string, envvar string, envval string, prefix string) string { + if strings.Contains(key, "$"+envvar) { key = strings.Replace(key, "$"+envvar, envval, -1) } @@ -133,6 +165,7 @@ func resolveEnvVar(key string, envvar string, envval string) string { } func (p *Plugin) debug() { + fmt.Println(p) // debug env vars for _, e := range os.Environ() { fmt.Println(e) diff --git a/plugin_test.go b/plugin_test.go index 7e19ca4..3234ba9 100644 --- a/plugin_test.go +++ b/plugin_test.go @@ -57,7 +57,8 @@ func TestGetHelmCommand(t *testing.T) { } setHelmCommand(plugin) res := strings.Join(plugin.Config.HelmCommand[:], " ") - expected := "upgrade --install test-release ./chart/test --set image.tag=v.0.1.0,nameOverride=my-over-app --dry-run --debug" + expected := "" + // expected := "upgrade --install test-release ./chart/test --set image.tag=v.0.1.0,nameOverride=my-over-app --dry-run --debug" if res != expected { t.Errorf("Result is %s and we expected %s", res, expected) } @@ -93,10 +94,6 @@ func TestResolveSecrets(t *testing.T) { if !strings.Contains(plugin.Config.Values, tag) { t.Errorf("env var %s not resolved %s", secrets[0], tag) } - // test that subistutes more than 1 envvar - if strings.Contains(plugin.Config.Values, secrets[0]) { - t.Errorf("env var %s not resolved %s", secrets[0], tag) - } // // test that the subsitution works with more than one envvar if strings.Contains(plugin.Config.Values, secrets[1]) { t.Errorf("env var %s not resolved %s", secrets[1], api) From ff4395a6a8a214d59077554c9ab081691b9cae5f Mon Sep 17 00:00:00 2001 From: Ivan Pedrazas Date: Sat, 7 Jan 2017 01:55:25 +0000 Subject: [PATCH 02/20] prefix envvars --- .drone.yml | 14 ++++++------- .drone.yml.sig | 2 +- main.go | 15 -------------- plugin.go | 52 ++++++++++++++++++++++++++++--------------------- plugin_test.go | 53 ++++++++++++++++++++++++++++++++++++-------------- 5 files changed, 76 insertions(+), 60 deletions(-) diff --git a/.drone.yml b/.drone.yml index 91d4a01..76e9236 100644 --- a/.drone.yml +++ b/.drone.yml @@ -19,14 +19,14 @@ pipeline: - TAG=${DRONE_BRANCH}-${DRONE_COMMIT_SHA:0:7} commands: - docker login -u="${QUAY_USERNAME}" -p="${QUAY_PASSWORD}" quay.io - - docker build -t image . - - docker tag image quay.io/ipedrazas/drone-helm:latest + - docker build -t image . + # - docker tag image quay.io/ipedrazas/drone-helm:latest - docker tag image quay.io/ipedrazas/drone-helm:${TAG} - docker push quay.io/ipedrazas/drone-helm when: event: [push] branch: [master] - + slack: image: plugins/slack channel: deploys @@ -34,7 +34,7 @@ pipeline: template: > {{ build.author }} finished building ** of {{ repo.name }} with a {{ build.status }} status - + services: dind: image: docker:1.12-dind @@ -42,13 +42,13 @@ services: command: - "-s" - "overlay" - + plugin: name: drone-helm - desc: Execute helm to + desc: Execute helm to type: deploy image: quay.io/ipedrazas/drone-helm labels: - deploy - kubernetes - - helm \ No newline at end of file + - helm diff --git a/.drone.yml.sig b/.drone.yml.sig index 4e7b69e..6ee63a4 100644 --- a/.drone.yml.sig +++ b/.drone.yml.sig @@ -1 +1 @@ -eyJhbGciOiJIUzI1NiJ9.d29ya3NwYWNlOgogIGJhc2U6IC9nbwoKcGlwZWxpbmU6CiAgdGVzdDoKICAgIGltYWdlOiBnb2xhbmc6MS42CiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBDR09fRU5BQkxFRD0wCiAgICBjb21tYW5kczoKICAgICAgLSBnbyBnZXQKICAgICAgLSBnbyB0ZXN0IC1jb3ZlciAtY292ZXJwcm9maWxlPWNvdmVyYWdlLm91dAogICAgICAtIGdvIGJ1aWxkIC1sZGZsYWdzICItcyAtdyAtWCBtYWluLmJ1aWxkPSREUk9ORV9CVUlMRF9OVU1CRVIiIC1hIC10YWdzIG5ldGdvCgoKICBidWlsZF9kb2NrZXJfaW1hZ2U6CiAgICBpbWFnZTogZG9ja2VyOjEuMTIKICAgIGVudmlyb25tZW50OgogICAgICAtIERPQ0tFUl9IT1NUPXRjcDovLzEyNy4wLjAuMToyMzc1CiAgICAgIC0gVEFHPSR7RFJPTkVfQlJBTkNIfS0ke0RST05FX0NPTU1JVF9TSEE6MDo3fQogICAgY29tbWFuZHM6CiAgICAgIC0gZG9ja2VyIGxvZ2luIC11PSIke1FVQVlfVVNFUk5BTUV9IiAtcD0iJHtRVUFZX1BBU1NXT1JEfSIgcXVheS5pbwogICAgICAtIGRvY2tlciBidWlsZCAtdCBpbWFnZSAuICAgICAgCiAgICAgIC0gZG9ja2VyIHRhZyBpbWFnZSBxdWF5LmlvL2lwZWRyYXphcy9kcm9uZS1oZWxtOmxhdGVzdAogICAgICAtIGRvY2tlciB0YWcgaW1hZ2UgcXVheS5pby9pcGVkcmF6YXMvZHJvbmUtaGVsbToke1RBR30KICAgICAgLSBkb2NrZXIgcHVzaCBxdWF5LmlvL2lwZWRyYXphcy9kcm9uZS1oZWxtCiAgICB3aGVuOgogICAgIGV2ZW50OiBbcHVzaF0KICAgICBicmFuY2g6IFttYXN0ZXJdCiAgIAogIHNsYWNrOgogICAgaW1hZ2U6IHBsdWdpbnMvc2xhY2sKICAgIGNoYW5uZWw6IGRlcGxveXMKICAgIHVzZXJuYW1lOiBkcm9uZQogICAgdGVtcGxhdGU6ID4KICAgICAge3sgYnVpbGQuYXV0aG9yIH19IGZpbmlzaGVkIGJ1aWxkaW5nICAqPGh0dHA6Ly9kcm9uZS5zb2hvaG91c2VkaWdpdGFsLmNvbS9Tb2hvSG91c2Uve3sgcmVwby5uYW1lIH19L3t7IGJ1aWxkLm51bWJlciB9fXx7eyBidWlsZC5icmFuY2ggfX0gKHt7IGJ1aWxkLm51bWJlciB9fSk-KiBvZiB7eyByZXBvLm5hbWUgfX0gIHdpdGggYSB7eyBidWlsZC5zdGF0dXMgfX0gc3RhdHVzCgogICAgICAgIApzZXJ2aWNlczoKICBkaW5kOgogICAgaW1hZ2U6IGRvY2tlcjoxLjEyLWRpbmQKICAgIHByaXZpbGVnZWQ6IHRydWUKICAgIGNvbW1hbmQ6CiAgICAgIC0gIi1zIgogICAgICAtICJvdmVybGF5IgogIApwbHVnaW46CiAgbmFtZTogZHJvbmUtaGVsbQogIGRlc2M6IEV4ZWN1dGUgaGVsbSB0byAKICB0eXBlOiBkZXBsb3kKICBpbWFnZTogcXVheS5pby9pcGVkcmF6YXMvZHJvbmUtaGVsbQogIGxhYmVsczoKICAgIC0gZGVwbG95CiAgICAtIGt1YmVybmV0ZXMKICAgIC0gaGVsbQ.3yHjlpd6ckptH7mVnPqzyH2EWHsBmFPbx162SmlYoVA \ No newline at end of file +eyJhbGciOiJIUzI1NiJ9.d29ya3NwYWNlOgogIGJhc2U6IC9nbwoKcGlwZWxpbmU6CiAgdGVzdDoKICAgIGltYWdlOiBnb2xhbmc6MS42CiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBDR09fRU5BQkxFRD0wCiAgICBjb21tYW5kczoKICAgICAgLSBnbyBnZXQKICAgICAgLSBnbyB0ZXN0IC1jb3ZlciAtY292ZXJwcm9maWxlPWNvdmVyYWdlLm91dAogICAgICAtIGdvIGJ1aWxkIC1sZGZsYWdzICItcyAtdyAtWCBtYWluLmJ1aWxkPSREUk9ORV9CVUlMRF9OVU1CRVIiIC1hIC10YWdzIG5ldGdvCgoKICBidWlsZF9kb2NrZXJfaW1hZ2U6CiAgICBpbWFnZTogZG9ja2VyOjEuMTIKICAgIGVudmlyb25tZW50OgogICAgICAtIERPQ0tFUl9IT1NUPXRjcDovLzEyNy4wLjAuMToyMzc1CiAgICAgIC0gVEFHPSR7RFJPTkVfQlJBTkNIfS0ke0RST05FX0NPTU1JVF9TSEE6MDo3fQogICAgY29tbWFuZHM6CiAgICAgIC0gZG9ja2VyIGxvZ2luIC11PSIke1FVQVlfVVNFUk5BTUV9IiAtcD0iJHtRVUFZX1BBU1NXT1JEfSIgcXVheS5pbwogICAgICAtIGRvY2tlciBidWlsZCAtdCBpbWFnZSAuCiAgICAgICMgLSBkb2NrZXIgdGFnIGltYWdlIHF1YXkuaW8vaXBlZHJhemFzL2Ryb25lLWhlbG06bGF0ZXN0CiAgICAgIC0gZG9ja2VyIHRhZyBpbWFnZSBxdWF5LmlvL2lwZWRyYXphcy9kcm9uZS1oZWxtOiR7VEFHfQogICAgICAtIGRvY2tlciBwdXNoIHF1YXkuaW8vaXBlZHJhemFzL2Ryb25lLWhlbG0KICAgIHdoZW46CiAgICAgZXZlbnQ6IFtwdXNoXQogICAgIGJyYW5jaDogW21hc3Rlcl0KCiAgc2xhY2s6CiAgICBpbWFnZTogcGx1Z2lucy9zbGFjawogICAgY2hhbm5lbDogZGVwbG95cwogICAgdXNlcm5hbWU6IGRyb25lCiAgICB0ZW1wbGF0ZTogPgogICAgICB7eyBidWlsZC5hdXRob3IgfX0gZmluaXNoZWQgYnVpbGRpbmcgICo8aHR0cDovL2Ryb25lLnNvaG9ob3VzZWRpZ2l0YWwuY29tL1NvaG9Ib3VzZS97eyByZXBvLm5hbWUgfX0ve3sgYnVpbGQubnVtYmVyIH19fHt7IGJ1aWxkLmJyYW5jaCB9fSAoe3sgYnVpbGQubnVtYmVyIH19KT4qIG9mIHt7IHJlcG8ubmFtZSB9fSAgd2l0aCBhIHt7IGJ1aWxkLnN0YXR1cyB9fSBzdGF0dXMKCgpzZXJ2aWNlczoKICBkaW5kOgogICAgaW1hZ2U6IGRvY2tlcjoxLjEyLWRpbmQKICAgIHByaXZpbGVnZWQ6IHRydWUKICAgIGNvbW1hbmQ6CiAgICAgIC0gIi1zIgogICAgICAtICJvdmVybGF5IgoKcGx1Z2luOgogIG5hbWU6IGRyb25lLWhlbG0KICBkZXNjOiBFeGVjdXRlIGhlbG0gdG8KICB0eXBlOiBkZXBsb3kKICBpbWFnZTogcXVheS5pby9pcGVkcmF6YXMvZHJvbmUtaGVsbQogIGxhYmVsczoKICAgIC0gZGVwbG95CiAgICAtIGt1YmVybmV0ZXMKICAgIC0gaGVsbQo.Aaowkafid_oo6qbDKGYjJAtFH68xIhgASITg_CeFfF4 \ No newline at end of file diff --git a/main.go b/main.go index 748a744..849b5a4 100644 --- a/main.go +++ b/main.go @@ -23,16 +23,6 @@ func main() { Usage: "add the command Helm has to execute", EnvVar: "PLUGIN_HELM_COMMAND,HELM_COMMAND", }, - cli.StringFlag{ - Name: "api_server", - Usage: "Api Server url", - EnvVar: "PLUGIN_API_SERVER,API_SERVER", - }, - cli.StringFlag{ - Name: "token", - Usage: "Kubernetes Token", - EnvVar: "PLUGIN_TOKEN,KUBERNETES_TOKEN", - }, cli.StringFlag{ Name: "namespace", Usage: "Kubernetes namespace", @@ -68,11 +58,6 @@ func main() { Usage: "Helm dry-run", EnvVar: "PLUGIN_DRY_RUN,DRY_RUN", }, - cli.StringSliceFlag{ - Name: "secrets", - Usage: "add the secrets used in the values field", - EnvVar: "PLUGIN_SECRETS,SECRETS", - }, cli.StringSliceFlag{ Name: "prefix", Usage: "Prefix for all the secrets", diff --git a/plugin.go b/plugin.go index fa08306..93d4673 100644 --- a/plugin.go +++ b/plugin.go @@ -2,13 +2,13 @@ package main import ( "fmt" + "github.com/alecthomas/template" "io/ioutil" "log" "os" "os/exec" + "regexp" "strings" - - "github.com/alecthomas/template" ) var HELM_BIN = "/bin/helm" @@ -136,32 +136,40 @@ func runCommand(params []string) error { } func resolveSecrets(p *Plugin) { - if len(p.Config.Secrets) > 0 { - for _, secret := range p.Config.Secrets { - envval := os.Getenv(secret) - p.Config.Values = resolveEnvVar(p.Config.Values, secret, envval, p.Config.Prefix) - p.Config.APIServer = resolveEnvVar(p.Config.APIServer, secret, envval, p.Config.Prefix) - p.Config.Token = resolveEnvVar(p.Config.Token, secret, envval, p.Config.Prefix) - } - } + p.Config.Values = resolveEnvVar(p.Config.Values, p.Config.Prefix) + p.Config.APIServer = resolveEnvVar("${API_SERVER}", p.Config.Prefix) + p.Config.Token = resolveEnvVar("${TOKEN}", p.Config.Prefix) } -// if prefix is specified, Vars with prefix will be used +func getEnvVars(envvars string) [][]string { + re := regexp.MustCompile(`\$(\{?(\w+)\}?)\.?`) + extracted := re.FindAllStringSubmatch(envvars, -1) + return extracted +} -// regex to get envvars -// \$(\{?(\w+)\}?)\.? +func replaceEnvvars(envvars [][]string, prefix string, s string) string { + for _, envvar := range envvars { + envvarName := envvar[0] + envvarKey := envvar[2] + envval := os.Getenv(envvarKey) + if prefix != "" { + envval = os.Getenv(prefix + "_" + envvarKey) + } + + if strings.Contains(s, envvarKey) { + s = strings.Replace(s, envvarName, envval, -1) + } + } + // fmt.Println(s) + return s +} // this functions checks if $VAR or ${VAR} exists and // returns the text with resolved vars -func resolveEnvVar(key string, envvar string, envval string, prefix string) string { - - if strings.Contains(key, "$"+envvar) { - key = strings.Replace(key, "$"+envvar, envval, -1) - } - if strings.Contains(key, "${"+envvar+"}") { - key = strings.Replace(key, "${"+envvar+"}", envval, -1) - } - return key +func resolveEnvVar(key string, prefix string) string { + envvars := getEnvVars(key) + // fmt.Println(envvars) + return replaceEnvvars(envvars, prefix, key) } func (p *Plugin) debug() { diff --git a/plugin_test.go b/plugin_test.go index 3234ba9..c6f9904 100644 --- a/plugin_test.go +++ b/plugin_test.go @@ -1,6 +1,7 @@ package main import ( + "fmt" "io/ioutil" "os" "strings" @@ -65,18 +66,14 @@ func TestGetHelmCommand(t *testing.T) { } func TestResolveSecrets(t *testing.T) { - secrets := make([]string, 2) - secrets[0] = "TAG" - secrets[1] = "API_SERVER" tag := "v0.1.1" api := "http://apiserver" - os.Setenv("TAG", tag) - os.Setenv("API_SERVER", api) + os.Setenv("MY_TAG", tag) + os.Setenv("MY_API_SERVER", api) + os.Setenv("MY_TOKEN", "12345") plugin := &Plugin{ Config: Config{ - APIServer: "${API_SERVER}", - Token: "secret-token", HelmCommand: nil, Namespace: "default", SkipTLSVerify: true, @@ -84,22 +81,48 @@ func TestResolveSecrets(t *testing.T) { DryRun: true, Chart: "./chart/test", Release: "test-release", + Prefix: "MY", Values: "image.tag=$TAG,api=${API_SERVER},nameOverride=my-over-app,second.tag=${TAG}", - Secrets: secrets, }, } resolveSecrets(plugin) + fmt.Println(plugin.Config.Values) + fmt.Println(plugin.Config.APIServer) // test that the subsitution works if !strings.Contains(plugin.Config.Values, tag) { - t.Errorf("env var %s not resolved %s", secrets[0], tag) + t.Errorf("env var ${TAG} not resolved %s", tag) } - // // test that the subsitution works with more than one envvar - if strings.Contains(plugin.Config.Values, secrets[1]) { - t.Errorf("env var %s not resolved %s", secrets[1], api) + if strings.Contains(plugin.Config.Values, "${TAG}") { + t.Errorf("env var ${TAG} not resolved %s", tag) } - // // test that the subsitution works with more than one envvar - if strings.Contains(plugin.Config.APIServer, secrets[1]) { - t.Errorf("env var %s not resolved %s", secrets[1], api) + + if plugin.Config.APIServer != api { + t.Errorf("env var ${API_SERVER} not resolved %s", api) + } +} + +func TestGetEnvVars(t *testing.T) { + + testText := "this should be ${TAG} now" + result := getEnvVars(testText) + if len(result) == 0 { + t.Error("No envvar was found") + } + envvar := result[0] + if !strings.Contains(envvar[2], "TAG") { + t.Errorf("envvar not found in %s", testText) + } +} + +func TestReplaceEnvvars(t *testing.T) { + tag := "tagged" + os.Setenv("MY_TAG", tag) + prefix := "MY" + testText := "this should be ${TAG} now ${TAG}" + result := getEnvVars(testText) + resolved := replaceEnvvars(result, prefix, testText) + if !strings.Contains(resolved, tag) { + t.Errorf("EnvVar MY_TAG no replaced by %s ", tag) } } From 534dc1ac7d715223d0557fbd3011e72f216156f7 Mon Sep 17 00:00:00 2001 From: Ivan Pedrazas Date: Sat, 7 Jan 2017 01:59:14 +0000 Subject: [PATCH 03/20] cleanup --- plugin_test.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/plugin_test.go b/plugin_test.go index c6f9904..41d13f5 100644 --- a/plugin_test.go +++ b/plugin_test.go @@ -1,7 +1,6 @@ package main import ( - "fmt" "io/ioutil" "os" "strings" @@ -87,8 +86,6 @@ func TestResolveSecrets(t *testing.T) { } resolveSecrets(plugin) - fmt.Println(plugin.Config.Values) - fmt.Println(plugin.Config.APIServer) // test that the subsitution works if !strings.Contains(plugin.Config.Values, tag) { t.Errorf("env var ${TAG} not resolved %s", tag) From bea0484b0eededdc9939fc4d8fed659aa93ed034 Mon Sep 17 00:00:00 2001 From: Ivan Pedrazas Date: Sat, 7 Jan 2017 02:04:35 +0000 Subject: [PATCH 04/20] test fixed --- plugin_test.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugin_test.go b/plugin_test.go index 41d13f5..afae42e 100644 --- a/plugin_test.go +++ b/plugin_test.go @@ -1,6 +1,7 @@ package main import ( + "fmt" "io/ioutil" "os" "strings" @@ -41,6 +42,7 @@ func TestInitialiseKubeconfig(t *testing.T) { } func TestGetHelmCommand(t *testing.T) { + os.Setenv("DRONE_BUILD_EVENT", "push") plugin := &Plugin{ Config: Config{ APIServer: "http://myapiserver", @@ -57,8 +59,9 @@ func TestGetHelmCommand(t *testing.T) { } setHelmCommand(plugin) res := strings.Join(plugin.Config.HelmCommand[:], " ") - expected := "" - // expected := "upgrade --install test-release ./chart/test --set image.tag=v.0.1.0,nameOverride=my-over-app --dry-run --debug" + expected := "upgrade --install test-release ./chart/test --set image.tag=v.0.1.0,nameOverride=my-over-app --dry-run --debug" + fmt.Println(res) + fmt.Println(expected) if res != expected { t.Errorf("Result is %s and we expected %s", res, expected) } From 0d84f22dc2ae9ffc3f7b7cb31b0b9203db6df333 Mon Sep 17 00:00:00 2001 From: Ivan Pedrazas Date: Sat, 7 Jan 2017 02:12:14 +0000 Subject: [PATCH 05/20] docker push no latest --- .drone.yml | 6 +++--- .drone.yml.sig | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.drone.yml b/.drone.yml index 76e9236..81d7063 100644 --- a/.drone.yml +++ b/.drone.yml @@ -23,9 +23,9 @@ pipeline: # - docker tag image quay.io/ipedrazas/drone-helm:latest - docker tag image quay.io/ipedrazas/drone-helm:${TAG} - docker push quay.io/ipedrazas/drone-helm - when: - event: [push] - branch: [master] + # when: + # event: [push] + # branch: [master] slack: image: plugins/slack diff --git a/.drone.yml.sig b/.drone.yml.sig index 6ee63a4..81f6da6 100644 --- a/.drone.yml.sig +++ b/.drone.yml.sig @@ -1 +1 @@ -eyJhbGciOiJIUzI1NiJ9.d29ya3NwYWNlOgogIGJhc2U6IC9nbwoKcGlwZWxpbmU6CiAgdGVzdDoKICAgIGltYWdlOiBnb2xhbmc6MS42CiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBDR09fRU5BQkxFRD0wCiAgICBjb21tYW5kczoKICAgICAgLSBnbyBnZXQKICAgICAgLSBnbyB0ZXN0IC1jb3ZlciAtY292ZXJwcm9maWxlPWNvdmVyYWdlLm91dAogICAgICAtIGdvIGJ1aWxkIC1sZGZsYWdzICItcyAtdyAtWCBtYWluLmJ1aWxkPSREUk9ORV9CVUlMRF9OVU1CRVIiIC1hIC10YWdzIG5ldGdvCgoKICBidWlsZF9kb2NrZXJfaW1hZ2U6CiAgICBpbWFnZTogZG9ja2VyOjEuMTIKICAgIGVudmlyb25tZW50OgogICAgICAtIERPQ0tFUl9IT1NUPXRjcDovLzEyNy4wLjAuMToyMzc1CiAgICAgIC0gVEFHPSR7RFJPTkVfQlJBTkNIfS0ke0RST05FX0NPTU1JVF9TSEE6MDo3fQogICAgY29tbWFuZHM6CiAgICAgIC0gZG9ja2VyIGxvZ2luIC11PSIke1FVQVlfVVNFUk5BTUV9IiAtcD0iJHtRVUFZX1BBU1NXT1JEfSIgcXVheS5pbwogICAgICAtIGRvY2tlciBidWlsZCAtdCBpbWFnZSAuCiAgICAgICMgLSBkb2NrZXIgdGFnIGltYWdlIHF1YXkuaW8vaXBlZHJhemFzL2Ryb25lLWhlbG06bGF0ZXN0CiAgICAgIC0gZG9ja2VyIHRhZyBpbWFnZSBxdWF5LmlvL2lwZWRyYXphcy9kcm9uZS1oZWxtOiR7VEFHfQogICAgICAtIGRvY2tlciBwdXNoIHF1YXkuaW8vaXBlZHJhemFzL2Ryb25lLWhlbG0KICAgIHdoZW46CiAgICAgZXZlbnQ6IFtwdXNoXQogICAgIGJyYW5jaDogW21hc3Rlcl0KCiAgc2xhY2s6CiAgICBpbWFnZTogcGx1Z2lucy9zbGFjawogICAgY2hhbm5lbDogZGVwbG95cwogICAgdXNlcm5hbWU6IGRyb25lCiAgICB0ZW1wbGF0ZTogPgogICAgICB7eyBidWlsZC5hdXRob3IgfX0gZmluaXNoZWQgYnVpbGRpbmcgICo8aHR0cDovL2Ryb25lLnNvaG9ob3VzZWRpZ2l0YWwuY29tL1NvaG9Ib3VzZS97eyByZXBvLm5hbWUgfX0ve3sgYnVpbGQubnVtYmVyIH19fHt7IGJ1aWxkLmJyYW5jaCB9fSAoe3sgYnVpbGQubnVtYmVyIH19KT4qIG9mIHt7IHJlcG8ubmFtZSB9fSAgd2l0aCBhIHt7IGJ1aWxkLnN0YXR1cyB9fSBzdGF0dXMKCgpzZXJ2aWNlczoKICBkaW5kOgogICAgaW1hZ2U6IGRvY2tlcjoxLjEyLWRpbmQKICAgIHByaXZpbGVnZWQ6IHRydWUKICAgIGNvbW1hbmQ6CiAgICAgIC0gIi1zIgogICAgICAtICJvdmVybGF5IgoKcGx1Z2luOgogIG5hbWU6IGRyb25lLWhlbG0KICBkZXNjOiBFeGVjdXRlIGhlbG0gdG8KICB0eXBlOiBkZXBsb3kKICBpbWFnZTogcXVheS5pby9pcGVkcmF6YXMvZHJvbmUtaGVsbQogIGxhYmVsczoKICAgIC0gZGVwbG95CiAgICAtIGt1YmVybmV0ZXMKICAgIC0gaGVsbQo.Aaowkafid_oo6qbDKGYjJAtFH68xIhgASITg_CeFfF4 \ No newline at end of file +eyJhbGciOiJIUzI1NiJ9.d29ya3NwYWNlOgogIGJhc2U6IC9nbwoKcGlwZWxpbmU6CiAgdGVzdDoKICAgIGltYWdlOiBnb2xhbmc6MS42CiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBDR09fRU5BQkxFRD0wCiAgICBjb21tYW5kczoKICAgICAgLSBnbyBnZXQKICAgICAgLSBnbyB0ZXN0IC1jb3ZlciAtY292ZXJwcm9maWxlPWNvdmVyYWdlLm91dAogICAgICAtIGdvIGJ1aWxkIC1sZGZsYWdzICItcyAtdyAtWCBtYWluLmJ1aWxkPSREUk9ORV9CVUlMRF9OVU1CRVIiIC1hIC10YWdzIG5ldGdvCgoKICBidWlsZF9kb2NrZXJfaW1hZ2U6CiAgICBpbWFnZTogZG9ja2VyOjEuMTIKICAgIGVudmlyb25tZW50OgogICAgICAtIERPQ0tFUl9IT1NUPXRjcDovLzEyNy4wLjAuMToyMzc1CiAgICAgIC0gVEFHPSR7RFJPTkVfQlJBTkNIfS0ke0RST05FX0NPTU1JVF9TSEE6MDo3fQogICAgY29tbWFuZHM6CiAgICAgIC0gZG9ja2VyIGxvZ2luIC11PSIke1FVQVlfVVNFUk5BTUV9IiAtcD0iJHtRVUFZX1BBU1NXT1JEfSIgcXVheS5pbwogICAgICAtIGRvY2tlciBidWlsZCAtdCBpbWFnZSAuCiAgICAgICMgLSBkb2NrZXIgdGFnIGltYWdlIHF1YXkuaW8vaXBlZHJhemFzL2Ryb25lLWhlbG06bGF0ZXN0CiAgICAgIC0gZG9ja2VyIHRhZyBpbWFnZSBxdWF5LmlvL2lwZWRyYXphcy9kcm9uZS1oZWxtOiR7VEFHfQogICAgICAtIGRvY2tlciBwdXNoIHF1YXkuaW8vaXBlZHJhemFzL2Ryb25lLWhlbG0KICAgICMgd2hlbjoKICAgICMgIGV2ZW50OiBbcHVzaF0KICAgICMgIGJyYW5jaDogW21hc3Rlcl0KCiAgc2xhY2s6CiAgICBpbWFnZTogcGx1Z2lucy9zbGFjawogICAgY2hhbm5lbDogZGVwbG95cwogICAgdXNlcm5hbWU6IGRyb25lCiAgICB0ZW1wbGF0ZTogPgogICAgICB7eyBidWlsZC5hdXRob3IgfX0gZmluaXNoZWQgYnVpbGRpbmcgICo8aHR0cDovL2Ryb25lLnNvaG9ob3VzZWRpZ2l0YWwuY29tL1NvaG9Ib3VzZS97eyByZXBvLm5hbWUgfX0ve3sgYnVpbGQubnVtYmVyIH19fHt7IGJ1aWxkLmJyYW5jaCB9fSAoe3sgYnVpbGQubnVtYmVyIH19KT4qIG9mIHt7IHJlcG8ubmFtZSB9fSAgd2l0aCBhIHt7IGJ1aWxkLnN0YXR1cyB9fSBzdGF0dXMKCgpzZXJ2aWNlczoKICBkaW5kOgogICAgaW1hZ2U6IGRvY2tlcjoxLjEyLWRpbmQKICAgIHByaXZpbGVnZWQ6IHRydWUKICAgIGNvbW1hbmQ6CiAgICAgIC0gIi1zIgogICAgICAtICJvdmVybGF5IgoKcGx1Z2luOgogIG5hbWU6IGRyb25lLWhlbG0KICBkZXNjOiBFeGVjdXRlIGhlbG0gdG8KICB0eXBlOiBkZXBsb3kKICBpbWFnZTogcXVheS5pby9pcGVkcmF6YXMvZHJvbmUtaGVsbQogIGxhYmVsczoKICAgIC0gZGVwbG95CiAgICAtIGt1YmVybmV0ZXMKICAgIC0gaGVsbQo.0Iy83mRnXUfgUp0truytDq8Vvvc0qo2GpGEoWzdS2XI \ No newline at end of file From 0464321d5eb14f08bdfcd36565bdbe6f4b49c0b5 Mon Sep 17 00:00:00 2001 From: Ivan Pedrazas Date: Sat, 7 Jan 2017 10:12:22 +0000 Subject: [PATCH 06/20] add debug --- main.go | 2 +- plugin.go | 14 +++++--------- plugin_test.go | 23 ++++++++++++++++++++--- 3 files changed, 26 insertions(+), 13 deletions(-) diff --git a/main.go b/main.go index 849b5a4..a3a0bed 100644 --- a/main.go +++ b/main.go @@ -90,6 +90,6 @@ func run(c *cli.Context) error { }, } resolveSecrets(&plugin) - + plugin.debug() return plugin.Exec() } diff --git a/plugin.go b/plugin.go index 93d4673..491dc35 100644 --- a/plugin.go +++ b/plugin.go @@ -147,6 +147,11 @@ func getEnvVars(envvars string) [][]string { return extracted } +func resolveEnvVar(key string, prefix string) string { + envvars := getEnvVars(key) + return replaceEnvvars(envvars, prefix, key) +} + func replaceEnvvars(envvars [][]string, prefix string, s string) string { for _, envvar := range envvars { envvarName := envvar[0] @@ -160,18 +165,9 @@ func replaceEnvvars(envvars [][]string, prefix string, s string) string { s = strings.Replace(s, envvarName, envval, -1) } } - // fmt.Println(s) return s } -// this functions checks if $VAR or ${VAR} exists and -// returns the text with resolved vars -func resolveEnvVar(key string, prefix string) string { - envvars := getEnvVars(key) - // fmt.Println(envvars) - return replaceEnvvars(envvars, prefix, key) -} - func (p *Plugin) debug() { fmt.Println(p) // debug env vars diff --git a/plugin_test.go b/plugin_test.go index afae42e..7799b63 100644 --- a/plugin_test.go +++ b/plugin_test.go @@ -1,7 +1,6 @@ package main import ( - "fmt" "io/ioutil" "os" "strings" @@ -60,8 +59,6 @@ func TestGetHelmCommand(t *testing.T) { setHelmCommand(plugin) res := strings.Join(plugin.Config.HelmCommand[:], " ") expected := "upgrade --install test-release ./chart/test --set image.tag=v.0.1.0,nameOverride=my-over-app --dry-run --debug" - fmt.Println(res) - fmt.Println(expected) if res != expected { t.Errorf("Result is %s and we expected %s", res, expected) } @@ -126,3 +123,23 @@ func TestReplaceEnvvars(t *testing.T) { t.Errorf("EnvVar MY_TAG no replaced by %s ", tag) } } + +func TestSetHelmHelp(t *testing.T) { + plugin := &Plugin{ + Config: Config{ + HelmCommand: nil, + Namespace: "default", + SkipTLSVerify: true, + Debug: true, + DryRun: true, + Chart: "./chart/test", + Release: "test-release", + Prefix: "MY", + Values: "image.tag=$TAG,api=${API_SERVER},nameOverride=my-over-app,second.tag=${TAG}", + }, + } + setHelmHelp(plugin) + if plugin.Config.HelmCommand == nil { + t.Error("Helm help is not displayed") + } +} From 8001d4f2c1c10cfc37bfad20a3d7a4e4e393370c Mon Sep 17 00:00:00 2001 From: Ivan Pedrazas Date: Sat, 7 Jan 2017 10:44:26 +0000 Subject: [PATCH 07/20] helm version updated --- Dockerfile | 4 ++-- main.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index a8d8eac..1e67759 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,7 @@ MAINTAINER Ivan Pedrazas RUN apk -Uuv add curl bash && rm /var/cache/apk/* -ENV HELM_VERSION v2.1.0 +ENV HELM_VERSION v2.1.3 ENV FILENAME helm-${HELM_VERSION}-linux-amd64.tar.gz ENV KUBECTL v1.5.1 @@ -28,4 +28,4 @@ LABEL kubectl=${KUBECTL} COPY drone-helm /bin/drone-helm COPY kubeconfig /root/.kube/kubeconfig -ENTRYPOINT [ "/bin/drone-helm" ] \ No newline at end of file +ENTRYPOINT [ "/bin/drone-helm" ] diff --git a/main.go b/main.go index a3a0bed..fa80539 100644 --- a/main.go +++ b/main.go @@ -75,8 +75,8 @@ func run(c *cli.Context) error { } plugin := Plugin{ Config: Config{ - APIServer: c.String("api_server"), - Token: c.String("token"), + // APIServer: c.String("api_server"), + // Token: c.String("token"), HelmCommand: c.StringSlice("helm_command"), Namespace: c.String("namespace"), SkipTLSVerify: c.Bool("skip_tls_verify"), From 93c0c9e52c4a7393612065203415a231f7b1a116 Mon Sep 17 00:00:00 2001 From: Ivan Pedrazas Date: Sat, 7 Jan 2017 10:51:36 +0000 Subject: [PATCH 08/20] debug envvars --- plugin.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin.go b/plugin.go index 491dc35..545449f 100644 --- a/plugin.go +++ b/plugin.go @@ -160,7 +160,7 @@ func replaceEnvvars(envvars [][]string, prefix string, s string) string { if prefix != "" { envval = os.Getenv(prefix + "_" + envvarKey) } - + fmt.Printf("Replacing %s by %s", envvarName, envval) if strings.Contains(s, envvarKey) { s = strings.Replace(s, envvarName, envval, -1) } From 78f718f26cf6dd7522e7c0aa73d7bba6743af028 Mon Sep 17 00:00:00 2001 From: Ivan Pedrazas Date: Sat, 7 Jan 2017 11:03:42 +0000 Subject: [PATCH 09/20] debug envvars --- plugin.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugin.go b/plugin.go index 545449f..bff75aa 100644 --- a/plugin.go +++ b/plugin.go @@ -156,11 +156,11 @@ func replaceEnvvars(envvars [][]string, prefix string, s string) string { for _, envvar := range envvars { envvarName := envvar[0] envvarKey := envvar[2] - envval := os.Getenv(envvarKey) if prefix != "" { - envval = os.Getenv(prefix + "_" + envvarKey) + envvarKey = os.Getenv(prefix + "_" + envvarKey) } - fmt.Printf("Replacing %s by %s", envvarName, envval) + envval := os.Getenv(envvarKey) + fmt.Printf("Replacing %s in %s by %s stored as %s", envvarName, s, envval, envvarKey) if strings.Contains(s, envvarKey) { s = strings.Replace(s, envvarName, envval, -1) } From 59f3c508130b13f359fd7a573a0772822a68585f Mon Sep 17 00:00:00 2001 From: Ivan Pedrazas Date: Sun, 8 Jan 2017 10:07:01 +0000 Subject: [PATCH 10/20] revert --- plugin.go | 9 +++++---- plugin_test.go | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/plugin.go b/plugin.go index bff75aa..f77e6e1 100644 --- a/plugin.go +++ b/plugin.go @@ -156,15 +156,16 @@ func replaceEnvvars(envvars [][]string, prefix string, s string) string { for _, envvar := range envvars { envvarName := envvar[0] envvarKey := envvar[2] - if prefix != "" { - envvarKey = os.Getenv(prefix + "_" + envvarKey) - } envval := os.Getenv(envvarKey) - fmt.Printf("Replacing %s in %s by %s stored as %s", envvarName, s, envval, envvarKey) + if prefix != "" { + envval = os.Getenv(prefix + "_" + envvarKey) + } + if strings.Contains(s, envvarKey) { s = strings.Replace(s, envvarName, envval, -1) } } + // fmt.Println(s) return s } diff --git a/plugin_test.go b/plugin_test.go index 7799b63..b23423c 100644 --- a/plugin_test.go +++ b/plugin_test.go @@ -120,7 +120,7 @@ func TestReplaceEnvvars(t *testing.T) { result := getEnvVars(testText) resolved := replaceEnvvars(result, prefix, testText) if !strings.Contains(resolved, tag) { - t.Errorf("EnvVar MY_TAG no replaced by %s ", tag) + t.Errorf("EnvVar MY_TAG no replaced by %s \n", tag) } } From 8045324763c2a297d0be605a1daedca8355dd383 Mon Sep 17 00:00:00 2001 From: Ivan Pedrazas Date: Sun, 8 Jan 2017 10:10:08 +0000 Subject: [PATCH 11/20] split dockerfiles --- Dockerfile | 26 +------------------------- 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1e67759..ba831cf 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,30 +1,6 @@ -FROM alpine:latest +FROM ipedrazas/k8s:latest MAINTAINER Ivan Pedrazas - -RUN apk -Uuv add curl bash && rm /var/cache/apk/* - -ENV HELM_VERSION v2.1.3 -ENV FILENAME helm-${HELM_VERSION}-linux-amd64.tar.gz -ENV KUBECTL v1.5.1 - -ADD http://storage.googleapis.com/kubernetes-helm/${FILENAME} /tmp - -ADD https://storage.googleapis.com/kubernetes-release/release/${KUBECTL}/bin/linux/amd64/kubectl /tmp - - -RUN tar -zxvf /tmp/${FILENAME} -C /tmp \ - && mv /tmp/linux-amd64/helm /bin/helm \ - && chmod +x /bin/helm \ - && chmod +x /tmp/kubectl \ - && mv /tmp/kubectl /bin/kubectl \ - && rm -rf /tmp - -LABEL description="Drone.io plugin for Helm (kubernetes)." -LABEL base="alpine" -LABEL helm=${FILENAME} -LABEL kubectl=${KUBECTL} - COPY drone-helm /bin/drone-helm COPY kubeconfig /root/.kube/kubeconfig From 53296a124416f81efc1c5eae76f4240fd5fc120d Mon Sep 17 00:00:00 2001 From: Ivan Pedrazas Date: Sun, 8 Jan 2017 10:56:33 +0000 Subject: [PATCH 12/20] debug --- main.go | 4 ++-- plugin.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/main.go b/main.go index fa80539..a3a0bed 100644 --- a/main.go +++ b/main.go @@ -75,8 +75,8 @@ func run(c *cli.Context) error { } plugin := Plugin{ Config: Config{ - // APIServer: c.String("api_server"), - // Token: c.String("token"), + APIServer: c.String("api_server"), + Token: c.String("token"), HelmCommand: c.StringSlice("helm_command"), Namespace: c.String("namespace"), SkipTLSVerify: c.Bool("skip_tls_verify"), diff --git a/plugin.go b/plugin.go index f77e6e1..72759e3 100644 --- a/plugin.go +++ b/plugin.go @@ -165,7 +165,7 @@ func replaceEnvvars(envvars [][]string, prefix string, s string) string { s = strings.Replace(s, envvarName, envval, -1) } } - // fmt.Println(s) + fmt.Println(s) return s } From 5c6f91f3da8db5ad9deee1e1dac0bc0d741cd828 Mon Sep 17 00:00:00 2001 From: Ivan Pedrazas Date: Sun, 8 Jan 2017 11:11:42 +0000 Subject: [PATCH 13/20] plugin secrets --- plugin.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugin.go b/plugin.go index 72759e3..bd1d2b1 100644 --- a/plugin.go +++ b/plugin.go @@ -85,7 +85,7 @@ func setHelmCommand(p *Plugin) { // Exec default method func (p *Plugin) Exec() error { - + resolveSecrets(p) if p.Config.APIServer == "" { return fmt.Errorf("Error: API Server is needed to deploy.") } @@ -153,6 +153,9 @@ func resolveEnvVar(key string, prefix string) string { } func replaceEnvvars(envvars [][]string, prefix string, s string) string { + fmt.Println(envvars) + fmt.Println(prefix) + fmt.Println(s) for _, envvar := range envvars { envvarName := envvar[0] envvarKey := envvar[2] From afa2d66e36473ddcebcac7cb06f22e6d201af60c Mon Sep 17 00:00:00 2001 From: Ivan Pedrazas Date: Sun, 8 Jan 2017 11:16:42 +0000 Subject: [PATCH 14/20] envval envvarkey --- plugin.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugin.go b/plugin.go index bd1d2b1..7a4e3cb 100644 --- a/plugin.go +++ b/plugin.go @@ -163,7 +163,8 @@ func replaceEnvvars(envvars [][]string, prefix string, s string) string { if prefix != "" { envval = os.Getenv(prefix + "_" + envvarKey) } - + fmt.Println(envval) + fmt.Println(envvarKey) if strings.Contains(s, envvarKey) { s = strings.Replace(s, envvarName, envval, -1) } From 8d00932408396b74eea27860b49e1723e7f46585 Mon Sep 17 00:00:00 2001 From: Ivan Pedrazas Date: Sun, 8 Jan 2017 11:26:37 +0000 Subject: [PATCH 15/20] extenive debug --- plugin.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugin.go b/plugin.go index 7a4e3cb..d898af3 100644 --- a/plugin.go +++ b/plugin.go @@ -153,18 +153,21 @@ func resolveEnvVar(key string, prefix string) string { } func replaceEnvvars(envvars [][]string, prefix string, s string) string { + fmt.Println("--- params passed to replaceEnvvars ----") fmt.Println(envvars) fmt.Println(prefix) fmt.Println(s) + fmt.Println("--------") for _, envvar := range envvars { envvarName := envvar[0] envvarKey := envvar[2] envval := os.Getenv(envvarKey) + fmt.Printf("Envval %s\n", envval) if prefix != "" { envval = os.Getenv(prefix + "_" + envvarKey) } - fmt.Println(envval) - fmt.Println(envvarKey) + fmt.Printf("Envval %s\n", envval) + fmt.Printf("Replacing %s by %s in --%s-- using var as %s\n", envvarName, envval, s, envvarName) if strings.Contains(s, envvarKey) { s = strings.Replace(s, envvarName, envval, -1) } From 8ab7029091484d6e0e0687282b51a4c823d04c78 Mon Sep 17 00:00:00 2001 From: Ivan Pedrazas Date: Sun, 8 Jan 2017 11:33:08 +0000 Subject: [PATCH 16/20] extenive debug --- plugin.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plugin.go b/plugin.go index d898af3..5357b77 100644 --- a/plugin.go +++ b/plugin.go @@ -161,12 +161,12 @@ func replaceEnvvars(envvars [][]string, prefix string, s string) string { for _, envvar := range envvars { envvarName := envvar[0] envvarKey := envvar[2] - envval := os.Getenv(envvarKey) - fmt.Printf("Envval %s\n", envval) + fmt.Printf("Envval %s\n using key: %s \n", envval, envvarKey) if prefix != "" { - envval = os.Getenv(prefix + "_" + envvarKey) + envvarKey = prefix + "_" + envvarKey } - fmt.Printf("Envval %s\n", envval) + envval := os.Getenv(envvarKey) + fmt.Printf("Envval %s\n using key: %s \n", envval, envvarKey) fmt.Printf("Replacing %s by %s in --%s-- using var as %s\n", envvarName, envval, s, envvarName) if strings.Contains(s, envvarKey) { s = strings.Replace(s, envvarName, envval, -1) @@ -180,7 +180,7 @@ func (p *Plugin) debug() { fmt.Println(p) // debug env vars for _, e := range os.Environ() { - fmt.Println(e) + fmt.Println("-Var:--", e) } // debug plugin obj fmt.Printf("Api server: %s \n", p.Config.APIServer) From c44473a76b3636ef1919d7cc6f92450447d30338 Mon Sep 17 00:00:00 2001 From: Ivan Pedrazas Date: Sun, 8 Jan 2017 11:33:47 +0000 Subject: [PATCH 17/20] extenive debug --- plugin.go | 1 - 1 file changed, 1 deletion(-) diff --git a/plugin.go b/plugin.go index 5357b77..715e226 100644 --- a/plugin.go +++ b/plugin.go @@ -161,7 +161,6 @@ func replaceEnvvars(envvars [][]string, prefix string, s string) string { for _, envvar := range envvars { envvarName := envvar[0] envvarKey := envvar[2] - fmt.Printf("Envval %s\n using key: %s \n", envval, envvarKey) if prefix != "" { envvarKey = prefix + "_" + envvarKey } From d3a36d35c6792a96ea216e4e4a248a20c7c2b62b Mon Sep 17 00:00:00 2001 From: Ivan Pedrazas Date: Sun, 8 Jan 2017 11:42:31 +0000 Subject: [PATCH 18/20] extenive debug 02 --- plugin.go | 9 ++++++--- plugin_test.go | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/plugin.go b/plugin.go index 715e226..0197ff0 100644 --- a/plugin.go +++ b/plugin.go @@ -141,6 +141,7 @@ func resolveSecrets(p *Plugin) { p.Config.Token = resolveEnvVar("${TOKEN}", p.Config.Prefix) } +// getEnvVars will return [${TAG} {TAG} TAG] func getEnvVars(envvars string) [][]string { re := regexp.MustCompile(`\$(\{?(\w+)\}?)\.?`) extracted := re.FindAllStringSubmatch(envvars, -1) @@ -159,15 +160,17 @@ func replaceEnvvars(envvars [][]string, prefix string, s string) string { fmt.Println(s) fmt.Println("--------") for _, envvar := range envvars { + // [${TAG} {TAG} TAG] + fmt.Println(envvar) envvarName := envvar[0] envvarKey := envvar[2] if prefix != "" { envvarKey = prefix + "_" + envvarKey } envval := os.Getenv(envvarKey) - fmt.Printf("Envval %s\n using key: %s \n", envval, envvarKey) - fmt.Printf("Replacing %s by %s in --%s-- using var as %s\n", envvarName, envval, s, envvarName) - if strings.Contains(s, envvarKey) { + fmt.Printf("Envval %s using key: %s \n", envval, envvarKey) + fmt.Printf("Replacing %s by %s in --%s-- using envvar as %s\n with value: %s", envvarName, envval, s, envvarKey, envval) + if strings.Contains(s, envvarName) { s = strings.Replace(s, envvarName, envval, -1) } } diff --git a/plugin_test.go b/plugin_test.go index b23423c..9b5b082 100644 --- a/plugin_test.go +++ b/plugin_test.go @@ -120,7 +120,7 @@ func TestReplaceEnvvars(t *testing.T) { result := getEnvVars(testText) resolved := replaceEnvvars(result, prefix, testText) if !strings.Contains(resolved, tag) { - t.Errorf("EnvVar MY_TAG no replaced by %s \n", tag) + t.Errorf("EnvVar MY_TAG no replaced by %s -- %s \n", tag, resolved) } } From 85041c6ee9b480612096e3039469889a821782cf Mon Sep 17 00:00:00 2001 From: Ivan Pedrazas Date: Sun, 8 Jan 2017 11:47:26 +0000 Subject: [PATCH 19/20] fixed prefix bug --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.go b/main.go index a3a0bed..53dff9f 100644 --- a/main.go +++ b/main.go @@ -58,7 +58,7 @@ func main() { Usage: "Helm dry-run", EnvVar: "PLUGIN_DRY_RUN,DRY_RUN", }, - cli.StringSliceFlag{ + cli.StringFlag{ Name: "prefix", Usage: "Prefix for all the secrets", EnvVar: "PLUGIN_PREFIX,PREFIX", From 69e5676faca4df133724ed515b0ac3900bc0869e Mon Sep 17 00:00:00 2001 From: Ivan Pedrazas Date: Sun, 8 Jan 2017 17:11:21 +0000 Subject: [PATCH 20/20] remove debug statments --- plugin.go | 9 --------- 1 file changed, 9 deletions(-) diff --git a/plugin.go b/plugin.go index 0197ff0..0836583 100644 --- a/plugin.go +++ b/plugin.go @@ -154,27 +154,18 @@ func resolveEnvVar(key string, prefix string) string { } func replaceEnvvars(envvars [][]string, prefix string, s string) string { - fmt.Println("--- params passed to replaceEnvvars ----") - fmt.Println(envvars) - fmt.Println(prefix) - fmt.Println(s) - fmt.Println("--------") for _, envvar := range envvars { // [${TAG} {TAG} TAG] - fmt.Println(envvar) envvarName := envvar[0] envvarKey := envvar[2] if prefix != "" { envvarKey = prefix + "_" + envvarKey } envval := os.Getenv(envvarKey) - fmt.Printf("Envval %s using key: %s \n", envval, envvarKey) - fmt.Printf("Replacing %s by %s in --%s-- using envvar as %s\n with value: %s", envvarName, envval, s, envvarKey, envval) if strings.Contains(s, envvarName) { s = strings.Replace(s, envvarName, envval, -1) } } - fmt.Println(s) return s }