{"id":20801860,"url":"https://github.com/philips-software/gautocloud-connectors","last_synced_at":"2025-05-11T16:32:20.858Z","repository":{"id":36965130,"uuid":"154810748","full_name":"philips-software/gautocloud-connectors","owner":"philips-software","description":"goautocloud connectors for Cloud foundry services","archived":false,"fork":false,"pushed_at":"2024-06-10T07:37:02.000Z","size":1435,"stargazers_count":3,"open_issues_count":5,"forks_count":0,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-06-19T11:34:59.046Z","etag":null,"topics":["cloud-foundry","dynamodb","elasticsearch","hsdp","kafka","postgresql","redis","redshift","s3","twilio","vault"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/philips-software.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-10-26T09:31:31.000Z","updated_at":"2024-03-18T09:53:07.000Z","dependencies_parsed_at":"2024-01-18T19:27:41.479Z","dependency_job_id":"443e829d-ffa6-46a3-97ce-0bb5941b885d","html_url":"https://github.com/philips-software/gautocloud-connectors","commit_stats":null,"previous_names":["hsdp/gautocloud-connectors"],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philips-software%2Fgautocloud-connectors","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philips-software%2Fgautocloud-connectors/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philips-software%2Fgautocloud-connectors/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philips-software%2Fgautocloud-connectors/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/philips-software","download_url":"https://codeload.github.com/philips-software/gautocloud-connectors/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224917283,"owners_count":17391823,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloud-foundry","dynamodb","elasticsearch","hsdp","kafka","postgresql","redis","redshift","s3","twilio","vault"],"created_at":"2024-11-17T18:24:49.673Z","updated_at":"2025-05-11T16:32:20.849Z","avatar_url":"https://github.com/philips-software.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DEPRECATED: please use https://github.com/dip-software/gautocloud-connectors\n\n# gautocloud\n\nGautocloud provides a simple abstraction that golang based applications can use to discover information about the cloud environment on which they are running, to connect to services automatically with ease of use in mind. It provides out-of-the-box support for discovering common services on Heroku, Cloud Foundry and kubernetes cloud platforms, and it supports custom automatic connectors. For more details see the [gautocloud project](https://github.com/cloudfoundry-community/gautocloud)\n\n# disclaimer\n\nI\u0026S Cloud Operations is not responsible and does not support usage of this repository. This is a Philips Open Source project and any support is provided through this Github project only. Please do not raise SNOW tickets related to any usage of the software hosted here.\n\n## gautocloud connectors for HSDP services\nThis repository contains [gautocloud connectors](https://github.com/cloudfoundry-community/gautocloud) for select [HSDP](https://www.hsdp.io) Cloud foundry services. At this time the following connectors are supported:\n\n  - [Twilio Raw](#twilio-raw)\n  - [Twilio Client](#twilio-go-client)\n  - [DynamoDB Client](#dynamodb-client)\n  - [Redshift](#redshift)\n  - [Redis Sentinel](#redis-sentinel)\n  - [Vault Client](#vault-client)\n  - [S3 Client](#S3-client)\n  - [S3 Minio Client](#S3-minio-client)\n  - [PostgreSQL Client](#PostgreSQL-client)\n  - Iron Raw\n  - [Iron Client](#Iron-client)\n  - Cartel Raw\n  - [Cartel Client](#Cartel-client)\n  - [Kafka Raw](#Kafka-raw)\n  - [Kafka Dialer](#Kafka-dialer)  \n\n## usage\nImport the packages in your app, this will register all the supported connectors and you can proceed to detect the services you need:\n\n```go\nimport (\n    \"github.com/cloudfoundry-community/gautocloud\"\n    \"github.com/philips-software/gautocloud-connectors/hsdp\"\n)\n```\n## Twilio Raw\nThis returns the credentials so you can use them as you see fit\n\n```go\nsvc, err := gautocloud.GetFirst(\"hsdp:twilio-raw\")\nif err == nil {\n    account, ok := svc.(hsdp.TwilioSubAccount)\n    if ok {\n        fmt.Printf(\"Loaded Twilio subaccount with SID: %s\\n\", account.SID)\n    }\n}\n```\n\n## Twilio Go client\nThis returns a configured Twilio Go client based on [github.com/kevinburke/twilio-go](https://github.com/kevinburke/twilio-go)\n\n```go\nimport (\n    \"github.com/kevinburke/twilio-go\"\n    \"github.com/cloudfoundry-community/gautocloud\"\n    _ \"github.com/philips-software/gautocloud-connectors/hsdp\"\n)\n```\n\n```go\nsvc, err := gautocloud.GetFirst(\"hsdp:twilio-client\")\nif err == nil {\n    client, ok := svc.(*twilio.Client)\n    if ok {\n        // Iterate over calls\n        iterator := client.Calls.GetPageIterator(url.Values{})\n        for {\n            page, err := iterator.Next(context.TODO())\n            if err == twilio.NoMoreResults {\n                break\n            }\n            fmt.Println(\"start\", page.Start)\n        }\n    }\n}\n```\n\n## DynamoDB client\nA configured DynamDBClient based on the [AWS SDK](https://docs.aws.amazon.com/sdk-for-go/api/service/dynamodb/)\n\n```go\nimport (\n    \"github.com/aws/aws-sdk-go/aws\"\n    \"github.com/aws/aws-sdk-go/service/dynamodb\"\n    \"github.com/cloudfoundry-community/gautocloud\"\n    _ \"github.com/philips-software/gautocloud-connectors/hsdp\"\n)\n```\n\n```go\ndb, err := gautocloud.GetFirst(\"hsdp:dynamodb-client\")\nclient, ok := db.(*hsdp.DynamoDBClient)\nif ok {\n        fmt.Printf(\"Loaded DynamoDB client, table: %s\\n\", client.TableName)\n        req := \u0026dynamodb.DescribeTableInput{\n                TableName: aws.String(client.TableName),\n        }\n        // Fetches and display details of the DynamoDB table\n        result, err := client.DescribeTable(req)\n        if err != nil {\n                fmt.Printf(\"%s\", err)\n        }\n        table := result.Table\n        fmt.Printf(\"done: %v\\n\", table)\n}\n```\n\n## Redshift\nThis returns a configured (wrapped) PostgreSQLDB connection ready for use.\n\n```go\n\nimport (\n    \"github.com/cloudfoundry-community/gautocloud\"\n    \"github.com/cloudfoundry-community/gautocloud/connectors/databases/dbtype\"\n    _ \"github.com/philips-software/gautocloud-connectors/hsdp\"\n)\n```\n\n```go\n\tvar rs *dbtype.PostgresqlDB\n\n\terr := gautocloud.InjectFromId(\"hsdp:redshift\", \u0026rs)\n\n\tif err != nil {\n\t\tfmt.Printf(\"failed to find attached database: %v\\n\", err)\n\t\treturn\n\t}\n\n\trows, err := rs.Query(\"SELECT now()\")\n\n\tif err != nil {\n\t\tfmt.Printf(\"query error: %v\\n\", err)\n\t\treturn\n    }\n    \n\tfor rows.Next() {\n\t\tvar col string\n\t\trows.Scan(\u0026col)\n\t\tfmt.Printf(\"%v\\n\", col)\n\t}\n```\n\n## Redis Sentinel\n\nReturns a [redis.ClusterClient](https://redis.uptrace.dev/guide/go-redis-cluster.html) ready for use\n\n```go\npackage main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/cloudfoundry-community/gautocloud\"\n\t\"github.com/go-redis/redis/v8\"\n\t_ \"github.com/philips-software/gautocloud-connectors/hsdp\"\n)\n\nfunc main() {\n\tvar client *redis.ClusterClient\n\n\terr := gautocloud.InjectFromId(\"hsdp:redis-db\", \u0026client)\n\n\tif err != nil {\n\t\tfmt.Printf(\"Cannot find bound hsdp-redis-db instance\\n\")\n\t\tos.Exit(1)\n\t}\n\t\n\t// Write a key\n\tclient.Set(context.Background(), \"hello\", \"world\", 24*time.Hour)\n\n\t// List it\n\tres := client.Keys(context.Background(), \"*\")\n\tfmt.Printf(\"Keys: %+v\\n\", res)\n}\n```\n\n\n## Vault client\n\nReturns a VaultClient instance which is composed of the official Hashicorp Go Vault client and a VaultCredentials struct containing all the fields found in the service broker\n\n```go\nimport (\n\t\"github.com/cloudfoundry-community/gautocloud\"\n\t\"github.com/philips-software/gautocloud-connectors/hsdp\"\n)\n\n```\n\n```go\n\tvar vaultClient *hsdp.VaultClient\n\n\terr := gautocloud.Inject(\u0026vaultClient)\n\n\tif err != nil {\n\t\tfmt.Printf(\"%v\\n\", err)\n\t\treturn\n\t}\n\n\tsecret, err := vaultClient.WriteSpaceSecret(\"mysecret\",\n\t \tmap[string]interface{}{\n\t\t\t\"foo\": \"bar\",\n\t\t\t\"alice\": \"bob\",\n\t\t\t\"bob\": \"trudy\",\n\t\t})\n\t\t\n```\n\n## S3 client\nReturns an S3Client instance which is composed of an AWS S3 Credentials Session and S3Credentials struct containing all the fields found in the service broker credentials\n\n```go\npackage main\n\nimport (\n\t\"github.com/cloudfoundry-community/gautocloud\"\n\t\"github.com/philips-software/gautocloud-connectors/hsdp\"\n)\n\nfunc main() {\n\tvar svc *hsdp.S3Client\n\n\terr := gautocloud.Inject(\u0026svc)\n\n\tif err != nil {\n\t\tfmt.Printf(\"%v\\n\", err)\n\t\treturn\n\t}\n\n\treq, _ := svc.GetObjectRequest(\u0026s3.GetObjectInput{\n\t\tBucket: aws.String(svc.Bucket),\n\t\tKey:    aws.String(\"/public/somefile.zip\"),\n\t})\n\tstr, err := req.Presign(15 * time.Minute)\n\n\tfmt.Println(\"The URL is:\", str, \" err:\", err)\n}\n```\n## S3 Minio client\nReturns an S3MinioClient instance which uses the Minio S3 Go client. This\nclient is generally more friendly in use and also works on Minio servers (e.g. HSoP). Preferred over the S3 Client.\n\n```go\npackage main\n\nimport (\n\t\"github.com/cloudfoundry-community/gautocloud\"\n\t\"github.com/philips-software/gautocloud-connectors/hsdp\"\n)\n\nfunc main() {\n\tvar svc *hsdp.S3MinioClient\n\n\terr := gautocloud.Inject(\u0026svc)\n\n\tif err != nil {\n\t\tfmt.Printf(\"%v\\n\", err)\n\t\treturn\n\t}\n\n        // Upload a zip file\n\tobjectName := \"golden-oldies.zip\"\n\tfilePath := \"/tmp/golden-oldies.zip\"\n\tcontentType := \"application/zip\"\n\n\t// Upload the zip file with FPutObject\n\tn, err := minioClient.FPutObject(ctx, bucketName, objectName, filePath, minio.PutObjectOptions{ContentType: contentType})\n\tif err != nil {\n\t\tfmt.Printf(\"%v\\n\", err)\n                return\n\t}\n        fmt.Printf(\"Success: %v\\n\", n)  \n}\n```\n\n## PostgreSQL client\nReturns an initialized wrapped *sql.DB connection to our PostgreSQL database\n\n```go\npackage main\n\nimport (\n    \"fmt\"\n    \"github.com/cloudfoundry-community/gautocloud\"\n    \"github.com/philips-software/gautocloud-connectors/hsdp\"\n)\n\nfunc main() {\n\tvar svc *hsdp.PostgreSQLClient\n\n\terr := gautocloud.Inject(\u0026svc)\n\n\trows, err := svc.DB.Query(\"SELECT now()\")\n\tif err != nil {\n\t\tfmt.Printf(\"%v\\n\", err)\n\t\treturn\n\t}\n\tfor rows.Next() {\n\t\tvar col string\n\t\trows.Scan(\u0026col)\n\t\tfmt.Printf(\"%v\\n\", col)\n   }\n}\n```\n\n## Iron client\nReturns an initalized wrapped *iron.Client from [go-dip-api/iron](https://github.com/dip-software/go-dip-api/tree/master/iron). \n\n```golang\npackage main\n\nimport (\n        \"fmt\"\n\n        \"github.com/cloudfoundry-community/gautocloud\"\n        \"github.com/philips-software/gautocloud-connectors/hsdp\"\n)\n\nfunc main() {\n        var client *hsdp.IronClient\n        err := gautocloud.Inject(\u0026client)\n        if err != nil {\n                fmt.Printf(\"error finding IRON client: %v\\n\", err)\n                return\n        }\n        fmt.Printf(\"Plan: %v\\n\", client.ClusterInfo[0].ClusterName)\n        tasks, _, err := client.Tasks.GetTasks()\n        if err != nil {\n            fmt.Printf(\"error getting tasks: %v\\n\", err)\n            return\n        }\n        for _, task := range *tasks {\n            fmt.Printf(\"%v\\n\", task)\n        }\n}\n```\n\n## Cartel client\nReturns an initalized wrapped *cartel.Client [go-dip-api/iron](https://github.com/dip-software/go-dip-api/tree/master/cartel).\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/cloudfoundry-community/gautocloud\"\n\t\"github.com/philips-software/gautocloud-connectors/hsdp\"\n)\n\nfunc main() {\n\tvar client *hsdp.CartelClient\n\terr := gautocloud.Inject(\u0026client)\n\tif err != nil {\n\t\tfmt.Printf(\"error finding Cartel client: %v\\n\", err)\n\t\treturn\n\t}\n\tinstances, _, err := client.GetAllInstances()\n\tif err != nil {\n\t\tfmt.Printf(\"error finding intances: %v\\n\", err)\n\t\treturn\n\t}\n\tfor _, instance := range *instances {\n\t\tfmt.Printf(\"%s\\n\", instance.InstanceID)\n\t}\n}\n```\n\n# Kafka raw\nReturns Kafka credentials for use with a Kafka Go client. Example using \nthe [Segment IO Kafka Go](https://github.com/segmentio/kafka-go) client:\n\n```golang\npackage main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/cloudfoundry-community/gautocloud\"\n\t\"github.com/philips-software/gautocloud-connectors/hsdp\"\n\t\"github.com/segmentio/kafka-go\"\n)\n\nfunc main() {\n\tvar creds hsdp.KafkaCredentials\n\terr := gautocloud.Inject(\u0026creds)\n\tif err != nil {\n\t\tfmt.Printf(\"error finding Kafka service: %v\\n\", err)\n\t\treturn\n\t}\n\n\t// make a new reader that consumes from topic-A, partition 0, at offset 42\n\tr := kafka.NewReader(kafka.ReaderConfig{\n\t\tBrokers:   creds.Hostnames,\n\t\tTopic:     \"topic-A\",\n\t\tPartition: 0,\n\t\tMinBytes:  10e3, // 10KB\n\t\tMaxBytes:  10e6, // 10MB\n\t})\n\tr.SetOffset(0)\n\n\tfor {\n\t\tm, err := r.ReadMessage(context.Background())\n\t\tif err != nil {\n\t\t\tbreak\n\t\t}\n\t\tfmt.Printf(\"message at offset %d: %s = %s\\n\", m.Offset, string(m.Key), string(m.Value))\n\t}\n\tr.Close()\n}\n```\n\n## Kafka Dialer\nReturns Kafka dialer for use with a Kafka Go client. Example using\nthe [Segment IO Kafka Go](https://github.com/segmentio/kafka-go) client:\n\n```golang\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/cloudfoundry-community/gautocloud\"\n\t\"github.com/philips-software/gautocloud-connectors/hsdp\"\n)\n\nfunc main() {\n\tvar dialer hsdp.KafkaDialer\n\terr := gautocloud.Inject(\u0026dialer)\n\tif err != nil {\n\t\tfmt.Printf(\"error finding Kafka service: %v\\n\", err)\n\t\treturn\n\t}\n\tconn, err := dialer.Dial(\"tcp\", dialer.URI)\n\tif err != nil {\n\t\tfmt.Printf(\"failed to dial leader: %v\\n\", err)\n\t\treturn\n\t}\n\tdefer conn.Close()\n\n\t// Use conn...\n}\n\n```\n\n# Contact / Getting help\n\n- andy.lo-a-foe@philips.com\n\n# Application using gautocloud\n- [s3dl](https://github.com/philips-labs/s3dl)\n- [rsdl](https://github.com/philips-labs/rsdl)\n\n# License\nLicense is [MIT](LICENSE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphilips-software%2Fgautocloud-connectors","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphilips-software%2Fgautocloud-connectors","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphilips-software%2Fgautocloud-connectors/lists"}