From c329df25bf3df99de8425b4837f5289fb982ef99 Mon Sep 17 00:00:00 2001 From: Jason Hall Date: Fri, 22 Dec 2023 09:56:15 -0500 Subject: [PATCH] add random image prober and prober dashboard Signed-off-by: Jason Hall --- .terraform.lock.hcl | 59 ++++++++++++++++++++++++++++++++++----------- apps.tf | 2 ++ cmd/prober/main.go | 35 +++++++++++++++++++++++++++ go.mod | 5 +++- go.sum | 6 +++++ main.tf | 2 ++ prober.tf | 24 ++++++++++++++++++ 7 files changed, 118 insertions(+), 15 deletions(-) create mode 100644 cmd/prober/main.go create mode 100644 prober.tf diff --git a/.terraform.lock.hcl b/.terraform.lock.hcl index 29a874c..89e209e 100644 --- a/.terraform.lock.hcl +++ b/.terraform.lock.hcl @@ -1,22 +1,34 @@ # This file is maintained automatically by "terraform init". # Manual edits may be lost in future updates. -provider "registry.terraform.io/hashicorp/google" { - version = "5.8.0" +provider "registry.terraform.io/chainguard-dev/cosign" { + version = "0.0.17" hashes = [ - "h1:R1ZSQbkSy9bnZj5flhx/u+CMSxXFr43uhkn46R5zeQY=", - "zh:1e9114e4b6c9886ee37dfb7a2fa5776f2977df44f076fb2ca8d8015a19f2cd2b", - "zh:26e319b67f5accd643e9af8b3b9ab96f9f79c625d889d39cb3bca21749ce643f", - "zh:3e062a4a31d8a5a2c2cb9b3c6f606a7e45a726b5f160ebca01c9f4aca8eff91e", - "zh:5f287a4b46731eae42d56a4ab1b134a6107d1c5faa658d3024c93bdf6cfbd6f0", - "zh:646c5ed8f6bda9ad130c1b2441e0b51ea3a59d20d1cc7539efcb562c92cf29c7", - "zh:7ecba80bce8c4322def7e72003058de99af653ede72ececb8254a3d5631ad876", - "zh:b50a9fcee3f2b37e36052903a4e951f5836c31ef9f76af79a6de7f59c303ae77", - "zh:b793d50456b7d2a8902b1c608437c92453ed260d8404c37aebc6b836b31e6a64", - "zh:c6cffdc8edac730066c7022d4e94f44a20ae89af4b50a226e1e3ebcb98fe0399", - "zh:cdf74d540408d0ef178e18dbc68c9a40751571ef116dabdac097d2b80bbebe8c", + "h1:TZiXAVFxOcup4F6QtVUd4t/yPUbRkF/wBqqwOfABCVQ=", + "zh:3dbdbc57fec9c070549fe7e7fd338d83029e9423afe0dcfc98bb6fa09a441867", + "zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f", + "zh:a9112193dae9a674420472f473a3dd036e83302bacae9a3121d6dfa090658556", + "zh:b67876f1fde78971320e377409dfb91fe9fe2e4ede4c37b6a7fb11475d7b355a", + "zh:d71628767b2d38a161e86252ab1cb908325e0ee0db65dddaaaae481dc31b552e", + ] +} + +provider "registry.terraform.io/hashicorp/google" { + version = "5.10.0" + hashes = [ + "h1:upxt/hLnX1r+yyYTF1zA0Lx3xoTHTtkYF3VjWBr1W4s=", + "zh:0f6a1feb5b3a128be6ef5fe0400ed800310a67e799c18aec7442161bb6d3ba36", + "zh:13d591ba78e424c94ce5caaf176ab6b087b0e3af08a7b6bcd963673698cdefda", + "zh:3bef54a2b24b06eef99f3df02e0fe4ac97f018c89f83e0faeb4ade921962565b", + "zh:3f3755b8f5b9db1611d42a02c21f03c54577e4aad3cf93323792f131c671c050", + "zh:61516eec734714ac48b565bee93cc2532160d1b4bd0320753799b829083b7060", + "zh:9160848ad0b9becb522a0744dcb89474849906aa2436ed945c658fe201a724b0", + "zh:aa5e79b01949cfedd874bf52958f90cf8f7d202600126c872127a9a156a3c17b", + "zh:cef73a67031008b7d7ef3edfbcd5e1a9b04c0f2580d815401248025b741bc8e4", + "zh:d2ad21ff9e9d2ad04146591c1b5784075e6df73e2bd243efd8d227d764b80b6e", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:fa141144675905e3c74f80f211e6ebd89d7658b2692305e653fc432ebcaf0a7c", + "zh:f58b145081d20bce52e14bee0de73f5c018bc39b8c4736e23e1329df32f8bd45", + "zh:fb82f6b5d1f992243ab8fe417659cdf9831202cf1e16fe7593d3967888b035cc", ] } @@ -39,6 +51,25 @@ provider "registry.terraform.io/hashicorp/null" { ] } +provider "registry.terraform.io/hashicorp/random" { + version = "3.6.0" + hashes = [ + "h1:I8MBeauYA8J8yheLJ8oSMWqB0kovn16dF/wKZ1QTdkk=", + "zh:03360ed3ecd31e8c5dac9c95fe0858be50f3e9a0d0c654b5e504109c2159287d", + "zh:1c67ac51254ba2a2bb53a25e8ae7e4d076103483f55f39b426ec55e47d1fe211", + "zh:24a17bba7f6d679538ff51b3a2f378cedadede97af8a1db7dad4fd8d6d50f829", + "zh:30ffb297ffd1633175d6545d37c2217e2cef9545a6e03946e514c59c0859b77d", + "zh:454ce4b3dbc73e6775f2f6605d45cee6e16c3872a2e66a2c97993d6e5cbd7055", + "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", + "zh:91df0a9fab329aff2ff4cf26797592eb7a3a90b4a0c04d64ce186654e0cc6e17", + "zh:aa57384b85622a9f7bfb5d4512ca88e61f22a9cea9f30febaa4c98c68ff0dc21", + "zh:c4a3e329ba786ffb6f2b694e1fd41d413a7010f3a53c20b432325a94fa71e839", + "zh:e2699bc9116447f96c53d55f2a00570f982e6f9935038c3810603572693712d0", + "zh:e747c0fd5d7684e5bfad8aa0ca441903f15ae7a98a737ff6aca24ba223207e2c", + "zh:f1ca75f417ce490368f047b63ec09fd003711ae48487fba90b4aba2ccf71920e", + ] +} + provider "registry.terraform.io/ko-build/ko" { version = "0.0.10" hashes = [ diff --git a/apps.tf b/apps.tf index f471074..df1a380 100644 --- a/apps.tf +++ b/apps.tf @@ -34,6 +34,7 @@ locals { container_concurrency = 1000 timeout_seconds = 60 # 1m base_image = "cgr.dev/chainguard/static:latest-glibc" + alert_id = module.prober.alert_id } wait : { cpu = 1 @@ -137,3 +138,4 @@ resource "null_resource" "test" { output "cloudrun_url" { value = { for k, _ in local.apps : k => google_cloud_run_service.service[k].status[0].url } } output "vanity_url" { value = { for k, _ in local.apps : k => google_cloud_run_domain_mapping.mapping[k].name } } + diff --git a/cmd/prober/main.go b/cmd/prober/main.go new file mode 100644 index 0000000..d91a292 --- /dev/null +++ b/cmd/prober/main.go @@ -0,0 +1,35 @@ +package main + +import ( + "context" + "fmt" + "log" + + "github.com/chainguard-dev/terraform-google-prober/pkg/prober" + "github.com/google/go-containerregistry/pkg/name" + "github.com/google/go-containerregistry/pkg/v1/remote" + "github.com/google/go-containerregistry/pkg/v1/validate" + "github.com/kelseyhightower/envconfig" +) + +func main() { + var env struct { + Ref string `env:"REF"` + } + if err := envconfig.Process("", &env); err != nil { + log.Fatal(err) + } + ref, err := name.ParseReference(env.Ref) + if err != nil { + log.Fatal(err) + } + + prober.Go(context.Background(), prober.Func(func(ctx context.Context) error { + log.Printf("probing %s", ref) + img, err := remote.Image(ref) + if err != nil { + return fmt.Errorf("remote.Image: %w", err) + } + return validate.Image(img) + })) +} diff --git a/go.mod b/go.mod index ba4affd..b4dc235 100644 --- a/go.mod +++ b/go.mod @@ -6,11 +6,13 @@ require ( chainguard.dev/apko v0.11.3-0.20231115001842-788d369d8038 cloud.google.com/go/storage v1.35.1 github.com/chainguard-dev/go-apk v0.0.0-20231113174935-f86aaf233502 + github.com/chainguard-dev/terraform-google-prober v0.5.0 github.com/dustin/go-humanize v1.0.1 github.com/google/go-containerregistry v0.16.1 github.com/google/ko v0.15.0 github.com/imjasonh/delay v0.0.0-20210102151318-8339250e8458 - github.com/imjasonh/gcpslog v0.0.0-20231112043542-653be1bb0599 + github.com/imjasonh/gcpslog v0.0.0-20231221170233-ff48b3e39a87 + github.com/kelseyhightower/envconfig v1.4.0 github.com/tmc/dot v0.0.0-20210901225022-f9bc17da75c0 golang.org/x/mod v0.14.0 golang.org/x/sync v0.5.0 @@ -56,6 +58,7 @@ require ( github.com/go-openapi/validate v0.22.1 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect + github.com/google/go-cmp v0.6.0 // indirect github.com/google/s2a-go v0.1.7 // indirect github.com/google/uuid v1.4.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect diff --git a/go.sum b/go.sum index 9152012..c4ff553 100644 --- a/go.sum +++ b/go.sum @@ -74,6 +74,8 @@ github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chainguard-dev/go-apk v0.0.0-20231113174935-f86aaf233502 h1:xYYl90jArqY6gFWTNA+6hRlrtKqHJ0lsWPluieS/xO8= github.com/chainguard-dev/go-apk v0.0.0-20231113174935-f86aaf233502/go.mod h1:y0BbOQALsoi1T2Lt5KmFNn92G+fRFSUuogQI2171HS8= +github.com/chainguard-dev/terraform-google-prober v0.5.0 h1:sNIyDWgrg7J907TprZsuE8RaJZH5YwMI53IP1Bvt7+g= +github.com/chainguard-dev/terraform-google-prober v0.5.0/go.mod h1:iNB5dtB3lRC0Yh7aCcae2BIZ1JRygg6EYhTxhNKgD/U= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= @@ -293,6 +295,8 @@ github.com/imjasonh/delay v0.0.0-20210102151318-8339250e8458 h1:KSkVhq4WEv9rlP6G github.com/imjasonh/delay v0.0.0-20210102151318-8339250e8458/go.mod h1:Fa7ozpRszH4I+tsBQpsszFbSKnzIXPCvv2RorJijAMg= github.com/imjasonh/gcpslog v0.0.0-20231112043542-653be1bb0599 h1:c6Rv/SECa61p+kUmHDdRndQkfYkDjXec/9xu9BiIt9g= github.com/imjasonh/gcpslog v0.0.0-20231112043542-653be1bb0599/go.mod h1:hfhJTxc/iAHDaUCOYnKEn6l4m9AjNSyQi8CFgJB/BHk= +github.com/imjasonh/gcpslog v0.0.0-20231221170233-ff48b3e39a87 h1:V8ZZfmRjMlcAn9F7LJnlcuWc8Z1OId0SPnBRPSdJtCc= +github.com/imjasonh/gcpslog v0.0.0-20231221170233-ff48b3e39a87/go.mod h1:crwolI91kTDe1DETZVPJL3X+Yp/TTk0z85M/QYeEKEs= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= @@ -309,6 +313,8 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1 github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= +github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8= +github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= diff --git a/main.tf b/main.tf index da93868..f316880 100644 --- a/main.tf +++ b/main.tf @@ -34,6 +34,8 @@ module "dashboard" { for_each = tomap(local.apps) source = "git::https://github.com/chainguard-dev/terraform-cloudrun-glue//dashboard/service?ref=main" service_name = each.key + + alert = lookup(each.value, "alert_id", "") } resource "google_storage_bucket" "bucket" { diff --git a/prober.tf b/prober.tf new file mode 100644 index 0000000..18de205 --- /dev/null +++ b/prober.tf @@ -0,0 +1,24 @@ +resource "google_service_account" "no-auth" { + account_id = "no-auth" + display_name = "Prober SA with no permissions" +} + +module "prober" { + //source = "chainguard-dev/prober/google" + //version = "v0.5.0" + + source = "git::https://github.com/chainguard-dev/terraform-google-prober?ref=main" + + name = "random-prober" + project_id = var.project_id + service_account = google_service_account.no-auth.email + + importpath = "github.com/imjasonh/kontain.me/cmd/prober" + working_dir = path.module + + period = "600s" // 10 minutes + + env = { "REF" : "random.${var.domain}/random:1x1" } + + enable_alert = true +}