From ac1b5d8eca6a93e71cc043da5b3677350e07563b Mon Sep 17 00:00:00 2001 From: nikhilsbhat Date: Thu, 21 Sep 2023 20:28:07 +0530 Subject: [PATCH] Add support for datasource pipeline_group --- Makefile | 4 +- examples/agents_config.tf | 4 +- examples/outputs.tf | 4 + examples/pipeline_config.tf | 3 + go.mod | 18 +-- go.sum | 53 +++++---- internal/provider/data_pipeline_group.go | 105 ++++++++++++++++++ internal/provider/gocd_provider_schemas.go | 54 +++++++++ internal/provider/provider.go | 1 + internal/provider/resource_auth_config.go | 7 +- internal/provider/resource_cluster_profile.go | 5 +- .../resource_elastic_agent_profile.go | 5 +- internal/provider/resource_encrypt_value.go | 5 +- internal/provider/resource_pipeline.go | 3 +- internal/provider/resource_plugin_settings.go | 5 +- internal/provider/resource_secret_config.go | 1 - pkg/utils/constants.go | 2 + 17 files changed, 228 insertions(+), 51 deletions(-) create mode 100644 examples/pipeline_config.tf create mode 100644 internal/provider/data_pipeline_group.go diff --git a/Makefile b/Makefile index 4bf02eb..7af4333 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,3 @@ - GOFMT_FILES?=$$(find . -not -path "./vendor/*" -type f -name '*.go') APP_NAME?=terraform-provider-gocd APP_DIR?=$$(git rev-parse --show-toplevel) @@ -21,8 +20,9 @@ help: ## Prints help (only for targets with comments) local.fmt: ## Lints all the go code in the application. @gofmt -w $(GOFMT_FILES) - $(GOBIN)/gofumpt -l -w $(GOFMT_FILES) $(GOBIN)/goimports -w $(GOFMT_FILES) + $(GOBIN)/gofumpt -l -w $(GOFMT_FILES) + $(GOBIN)/gci write $(GOFMT_FILES) --skip-generated local.check: local.fmt ## Loads all the dependencies to vendor directory go mod tidy diff --git a/examples/agents_config.tf b/examples/agents_config.tf index 3067468..568ebba 100644 --- a/examples/agents_config.tf +++ b/examples/agents_config.tf @@ -1,8 +1,8 @@ resource "gocd_agent" "sample_agent" { - uuid = "fe61ac36-1c16-4260-93d3-23110d94b38a" + uuid = "7c253df5-a262-4573-bcc8-aedc7e87317d" environments = ["sample_environment_3"] } data "gocd_agent" "sample_agent" { - uuid = "aaf50aed-cfdb-4c20-8989-f17a2ba54739" + uuid = "3a3d8e62-6103-4d05-be92-11fbdf21e945" } \ No newline at end of file diff --git a/examples/outputs.tf b/examples/outputs.tf index be20e09..4513df4 100644 --- a/examples/outputs.tf +++ b/examples/outputs.tf @@ -57,4 +57,8 @@ output "sample_role" { output "sample_ldap_role" { value = data.gocd_role.sample_ldap.properties +} + +output "pipeline_group_movies" { + value = data.gocd_pipeline_group.movies.authorization } \ No newline at end of file diff --git a/examples/pipeline_config.tf b/examples/pipeline_config.tf new file mode 100644 index 0000000..df1bb65 --- /dev/null +++ b/examples/pipeline_config.tf @@ -0,0 +1,3 @@ +data "gocd_pipeline_group" "movies" { + group_id = "sample-group" +} \ No newline at end of file diff --git a/go.mod b/go.mod index 57440ae..c829ba1 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/nikhilsbhat/terraform-provider-gocd -go 1.19 +go 1.21 require ( github.com/google/go-cmp v0.5.9 @@ -8,8 +8,8 @@ require ( github.com/hashicorp/terraform-plugin-sdk/v2 v2.26.1 github.com/mitchellh/mapstructure v1.5.0 github.com/nikhilsbhat/gocd-cli v0.1.0 - github.com/nikhilsbhat/gocd-sdk-go v0.1.2 - github.com/sirupsen/logrus v1.9.0 + github.com/nikhilsbhat/gocd-sdk-go v0.1.9-0.20230921144150-684a876cba84 + github.com/sirupsen/logrus v1.9.3 github.com/spf13/cast v1.5.0 gopkg.in/yaml.v3 v3.0.1 ) @@ -24,7 +24,7 @@ require ( github.com/bgentry/speakeasy v0.1.0 // indirect github.com/fatih/color v1.15.0 // indirect github.com/ghodss/yaml v1.0.0 // indirect - github.com/go-resty/resty/v2 v2.7.0 // indirect + github.com/go-resty/resty/v2 v2.8.0 // indirect github.com/go-test/deep v1.0.8 // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/google/uuid v1.3.0 // indirect @@ -49,7 +49,7 @@ require ( github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d // indirect github.com/huandu/xstrings v1.3.2 // indirect github.com/imdario/mergo v0.3.13 // indirect - github.com/jinzhu/copier v0.3.5 // indirect + github.com/jinzhu/copier v0.4.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.18 // indirect github.com/mitchellh/cli v1.1.5 // indirect @@ -67,11 +67,11 @@ require ( github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect github.com/zclconf/go-cty v1.13.1 // indirect - golang.org/x/crypto v0.7.0 // indirect + golang.org/x/crypto v0.13.0 // indirect golang.org/x/mod v0.8.0 // indirect - golang.org/x/net v0.9.0 // indirect - golang.org/x/sys v0.7.0 // indirect - golang.org/x/text v0.9.0 // indirect + golang.org/x/net v0.15.0 // indirect + golang.org/x/sys v0.12.0 // indirect + golang.org/x/text v0.13.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect google.golang.org/grpc v1.54.0 // indirect diff --git a/go.sum b/go.sum index 1dc7734..418f818 100644 --- a/go.sum +++ b/go.sum @@ -36,6 +36,7 @@ github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= @@ -47,8 +48,8 @@ github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= github.com/go-git/go-git/v5 v5.4.2 h1:BXyZu9t0VkbiHtqrsvdq39UDhGJTl1h55VW6CSC4aY4= github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc= -github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY= -github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I= +github.com/go-resty/resty/v2 v2.8.0 h1:J29d0JFWwSWrDCysnOK/YjsPMLQTx0TvgJEHVGvf2L8= +github.com/go-resty/resty/v2 v2.8.0/go.mod h1:UCui0cMHekLrSntoMyofdSTaPpinlRHFtPpizuyDW2w= github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM= github.com/go-test/deep v1.0.8/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -122,19 +123,22 @@ github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOl github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/jhump/protoreflect v1.6.0 h1:h5jfMVslIg6l29nsMs0D8Wj17RDVdNYti0vDN/PZZoE= -github.com/jinzhu/copier v0.3.5 h1:GlvfUwHk62RokgqVNvYsku0TATCF7bAHVwEXoBh3iJg= -github.com/jinzhu/copier v0.3.5/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= +github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= +github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8= +github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 h1:DowS9hvgyYSX4TO5NpyC606/Z4SxnNYbT+WX27or6Ck= github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= @@ -166,14 +170,15 @@ github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nikhilsbhat/gocd-cli v0.1.0 h1:k7myHhSy6tuPZm0dO3RBVjAqBZFQh4XalQZvxpd2VfM= github.com/nikhilsbhat/gocd-cli v0.1.0/go.mod h1:gfczP6M7WOOXIEc9QdAJ7R846+3CfQsdSEXC44fg3Ng= -github.com/nikhilsbhat/gocd-sdk-go v0.1.2 h1:O84UWArpzc4CRDmjUYgQzkfWYRIrlm9rW9Z/Kv+8mNs= -github.com/nikhilsbhat/gocd-sdk-go v0.1.2/go.mod h1:qco6B1kpMYtTkWqNhxjDajjQBYKrab7G52SFAvuhmT0= +github.com/nikhilsbhat/gocd-sdk-go v0.1.9-0.20230921144150-684a876cba84 h1:kfm8XmQEUugc2rFZ4/TCKxLXHYE240L9dRqD7Vxb+1c= +github.com/nikhilsbhat/gocd-sdk-go v0.1.9-0.20230921144150-684a876cba84/go.mod h1:ubwvA7YgcWDUXiCghrJGRKTdeVuXpDmNzIp6ZvVzdfk= github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXqo= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= @@ -183,12 +188,13 @@ github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3V github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= +github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= -github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= @@ -200,7 +206,8 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= +github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/thedevsaddam/gojsonq/v2 v2.5.2 h1:CoMVaYyKFsVj6TjU6APqAhAvC07hTI6IQen8PHzHYY0= github.com/thedevsaddam/gojsonq/v2 v2.5.2/go.mod h1:bv6Xa7kWy82uT0LnXPE2SzGqTj33TAEeR560MdJkiXs= github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= @@ -223,8 +230,8 @@ golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= -golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= @@ -234,14 +241,16 @@ golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= -golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= -golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM= -golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -253,7 +262,6 @@ golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -264,23 +272,30 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= -golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= diff --git a/internal/provider/data_pipeline_group.go b/internal/provider/data_pipeline_group.go new file mode 100644 index 0000000..6d2a16d --- /dev/null +++ b/internal/provider/data_pipeline_group.go @@ -0,0 +1,105 @@ +package provider + +import ( + "context" + + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/nikhilsbhat/gocd-sdk-go" + "github.com/nikhilsbhat/terraform-provider-gocd/pkg/utils" +) + +func dataSourcePipelineGroup() *schema.Resource { + return &schema.Resource{ + ReadContext: datasourcePipelineGroupRead, + Schema: map[string]*schema.Schema{ + "group_id": { + Type: schema.TypeString, + Required: true, + Computed: false, + ForceNew: true, + Description: "Name of the pipeline group to be retrieved.", + }, + "pipelines": { + Type: schema.TypeList, + Optional: true, + Computed: true, + Description: "List of pipelines those are part of this pipeline group.", + Elem: &schema.Schema{Type: schema.TypeString}, + }, + "authorization": { + Type: schema.TypeSet, + Optional: true, + Computed: true, + Description: "The authorization configuration for the pipeline group.", + Elem: authConfigSchema(), + }, + "etag": { + Type: schema.TypeString, + Computed: true, + Optional: true, + Description: "Etag used to track the pipeline group.", + }, + }, + } +} + +func datasourcePipelineGroupRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + defaultConfig := meta.(gocd.GoCd) + + id := d.Id() + + if len(id) == 0 { + resourceID := utils.String(d.Get(utils.TerraformResourcePipelineGroupID)) + id = resourceID + } + + groupID := utils.String(d.Get(utils.TerraformResourcePipelineGroupID)) + + response, err := defaultConfig.GetPipelineGroup(groupID) + if err != nil { + return diag.Errorf("getting pipeline group %s errored with: %v", groupID, err) + } + + if err = d.Set(utils.TerraformResourcePipelines, flattenPipelines(response.Pipelines)); err != nil { + return diag.Errorf(settingAttrErrorTmp, err, utils.TerraformResourcePipelines) + } + + if err = d.Set(utils.TerraformResourceEtag, response.ETAG); err != nil { + return diag.Errorf(settingAttrErrorTmp, utils.TerraformResourceEtag, err) + } + + flattenedAuthorization, err := flattenAuthorization(response.Authorization) + if err != nil { + d.SetId("") + + return diag.Errorf("errored while flattening Authorization obtained: %v", err) + } + + if err = d.Set(utils.TerraformResourceAuthorization, flattenedAuthorization); err != nil { + return diag.Errorf(settingAttrErrorTmp, err, utils.TerraformResourceAuthorization) + } + + d.SetId(id) + + return nil +} + +func flattenAuthorization(authorization gocd.PipelineGroupAuthorizationConfig) ([]map[string]interface{}, error) { + return []map[string]interface{}{ + { + "admins": getUsersNRoles(authorization.Admins), + "operate": getUsersNRoles(authorization.Operate), + "view": getUsersNRoles(authorization.View), + }, + }, nil +} + +func getUsersNRoles(authorization gocd.AuthorizationConfig) []map[string]interface{} { + return []map[string]interface{}{ + { + "users": authorization.Users, + "roles": authorization.Roles, + }, + } +} diff --git a/internal/provider/gocd_provider_schemas.go b/internal/provider/gocd_provider_schemas.go index 78f0833..eba0e3a 100644 --- a/internal/provider/gocd_provider_schemas.go +++ b/internal/provider/gocd_provider_schemas.go @@ -508,3 +508,57 @@ func rulesSchema() *schema.Resource { }, } } + +func authConfigSchema() *schema.Resource { + return &schema.Resource{ + Schema: map[string]*schema.Schema{ + "view": { + Type: schema.TypeSet, + Computed: true, + Optional: true, + Required: false, + Description: "The list of users and roles with view permission for this pipeline group", + Elem: usersANdRolesSchema(), + }, + "operate": { + Type: schema.TypeSet, + Computed: true, + Optional: true, + Required: false, + Description: "The list of users and roles with view permission for this pipeline group", + Elem: usersANdRolesSchema(), + }, + "admins": { + Type: schema.TypeSet, + Computed: true, + Optional: true, + Required: false, + Description: "The list of users and roles with view permission for this pipeline group", + Elem: usersANdRolesSchema(), + }, + }, + } +} + +func usersANdRolesSchema() *schema.Resource { + return &schema.Resource{ + Schema: map[string]*schema.Schema{ + "users": { + Type: schema.TypeList, + Computed: true, + Optional: true, + Required: false, + Description: "List of users present in GoCD.", + Elem: &schema.Schema{Type: schema.TypeString}, + }, + "roles": { + Type: schema.TypeList, + Computed: true, + Optional: true, + Required: false, + Description: "List of roles present in GoCD.", + Elem: &schema.Schema{Type: schema.TypeString}, + }, + }, + } +} diff --git a/internal/provider/provider.go b/internal/provider/provider.go index 3c54f67..48838ac 100755 --- a/internal/provider/provider.go +++ b/internal/provider/provider.go @@ -116,6 +116,7 @@ func Provider() *schema.Provider { "gocd_pipeline": dataSourcePipeline(), "gocd_artifact_store": dataSourceArtifactStore(), "gocd_role": dataSourceRole(), + "gocd_pipeline_group": dataSourcePipelineGroup(), }, ConfigureContextFunc: client.GetGoCDClient, diff --git a/internal/provider/resource_auth_config.go b/internal/provider/resource_auth_config.go index 3442959..cce6365 100644 --- a/internal/provider/resource_auth_config.go +++ b/internal/provider/resource_auth_config.go @@ -12,7 +12,7 @@ // // ---------------------------------------------------------------------------- // -//nolint:gocritic + package provider import ( @@ -20,11 +20,10 @@ import ( "fmt" "log" - "github.com/nikhilsbhat/gocd-sdk-go" - "github.com/nikhilsbhat/terraform-provider-gocd/pkg/utils" - "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/nikhilsbhat/gocd-sdk-go" + "github.com/nikhilsbhat/terraform-provider-gocd/pkg/utils" ) func resourceAuthConfig() *schema.Resource { diff --git a/internal/provider/resource_cluster_profile.go b/internal/provider/resource_cluster_profile.go index ccd7da2..54f1a75 100644 --- a/internal/provider/resource_cluster_profile.go +++ b/internal/provider/resource_cluster_profile.go @@ -20,11 +20,10 @@ import ( "fmt" "log" - "github.com/nikhilsbhat/gocd-sdk-go" - "github.com/nikhilsbhat/terraform-provider-gocd/pkg/utils" - "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/nikhilsbhat/gocd-sdk-go" + "github.com/nikhilsbhat/terraform-provider-gocd/pkg/utils" ) func resourceClusterProfile() *schema.Resource { diff --git a/internal/provider/resource_elastic_agent_profile.go b/internal/provider/resource_elastic_agent_profile.go index 299c370..7eb3896 100644 --- a/internal/provider/resource_elastic_agent_profile.go +++ b/internal/provider/resource_elastic_agent_profile.go @@ -5,11 +5,10 @@ import ( "fmt" "log" - "github.com/nikhilsbhat/gocd-sdk-go" - "github.com/nikhilsbhat/terraform-provider-gocd/pkg/utils" - "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/nikhilsbhat/gocd-sdk-go" + "github.com/nikhilsbhat/terraform-provider-gocd/pkg/utils" ) func resourceElasticAgentProfile() *schema.Resource { diff --git a/internal/provider/resource_encrypt_value.go b/internal/provider/resource_encrypt_value.go index 33b7812..ef76093 100644 --- a/internal/provider/resource_encrypt_value.go +++ b/internal/provider/resource_encrypt_value.go @@ -3,11 +3,10 @@ package provider import ( "context" - "github.com/nikhilsbhat/gocd-sdk-go" - "github.com/nikhilsbhat/terraform-provider-gocd/pkg/utils" - "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/nikhilsbhat/gocd-sdk-go" + "github.com/nikhilsbhat/terraform-provider-gocd/pkg/utils" ) func resourceEncryptValue() *schema.Resource { diff --git a/internal/provider/resource_pipeline.go b/internal/provider/resource_pipeline.go index 11c96e9..bd4da0f 100644 --- a/internal/provider/resource_pipeline.go +++ b/internal/provider/resource_pipeline.go @@ -5,11 +5,10 @@ import ( "encoding/json" "log" - "github.com/nikhilsbhat/gocd-sdk-go" - "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/nikhilsbhat/gocd-cli/pkg/render" + "github.com/nikhilsbhat/gocd-sdk-go" "github.com/nikhilsbhat/terraform-provider-gocd/pkg/utils" "github.com/sirupsen/logrus" "gopkg.in/yaml.v3" diff --git a/internal/provider/resource_plugin_settings.go b/internal/provider/resource_plugin_settings.go index d7888df..5a7142e 100644 --- a/internal/provider/resource_plugin_settings.go +++ b/internal/provider/resource_plugin_settings.go @@ -19,11 +19,10 @@ import ( "context" "log" - "github.com/nikhilsbhat/gocd-sdk-go" - "github.com/nikhilsbhat/terraform-provider-gocd/pkg/utils" - "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/nikhilsbhat/gocd-sdk-go" + "github.com/nikhilsbhat/terraform-provider-gocd/pkg/utils" ) func resourcePluginsSetting() *schema.Resource { diff --git a/internal/provider/resource_secret_config.go b/internal/provider/resource_secret_config.go index 605ae2b..3274898 100644 --- a/internal/provider/resource_secret_config.go +++ b/internal/provider/resource_secret_config.go @@ -5,7 +5,6 @@ import ( "log" "github.com/google/go-cmp/cmp" - "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/nikhilsbhat/gocd-sdk-go" diff --git a/pkg/utils/constants.go b/pkg/utils/constants.go index 7fcdb96..e803737 100644 --- a/pkg/utils/constants.go +++ b/pkg/utils/constants.go @@ -75,6 +75,8 @@ const ( TerraformResourcePauseOnCreation = "pause_on_creation" TerraformResourcePauseReason = "pause_reason" TerraformResourceGroup = "group" + TerraformResourcePipelineGroupID = "group_id" + TerraformResourceAuthorization = "authorization" TerraformResourcePolicy = "policy" TerraformResourceUsers = "users" TerraformResourceAuthConfigID = "auth_config_id"