From 95aaf56bb026854d3c4f11732222e598dfb3b9df Mon Sep 17 00:00:00 2001 From: Erik Kristensen Date: Thu, 15 Aug 2024 17:17:16 -0600 Subject: [PATCH 1/5] feat: add load balancer support via all its components --- go.sum | 172 +------------------ pkg/nuke/resource.go | 2 +- resources/compute-backend-service.go | 204 +++++++++++++++++++++++ resources/compute-forwarding-rule.go | 208 +++++++++++++++++++++++ resources/compute-http-target-proxy.go | 206 +++++++++++++++++++++++ resources/compute-https-target-proxy.go | 206 +++++++++++++++++++++++ resources/compute-security-policy.go | 210 ++++++++++++++++++++++++ resources/compute-ssl-certificate.go | 185 +++++++++++++++++++++ resources/compute-url-map.go | 206 +++++++++++++++++++++++ 9 files changed, 1428 insertions(+), 171 deletions(-) create mode 100644 resources/compute-backend-service.go create mode 100644 resources/compute-forwarding-rule.go create mode 100644 resources/compute-http-target-proxy.go create mode 100644 resources/compute-https-target-proxy.go create mode 100644 resources/compute-security-policy.go create mode 100644 resources/compute-ssl-certificate.go create mode 100644 resources/compute-url-map.go diff --git a/go.sum b/go.sum index 8056416..4457a33 100644 --- a/go.sum +++ b/go.sum @@ -1,110 +1,30 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.112.2 h1:ZaGT6LiG7dBzi6zNOvVZwacaXlmf3lRqnC4DQzqyRQw= -cloud.google.com/go v0.112.2/go.mod h1:iEqjp//KquGIJV/m+Pk3xecgKNhV+ry+vVTsy4TbDms= cloud.google.com/go v0.115.0 h1:CnFSK6Xo3lDYRoBKEcAtia6VSC837/ZkJuRduSFnr14= cloud.google.com/go v0.115.0/go.mod h1:8jIM5vVgoAEoiVxQ/O4BFTfHqulPZgs/ufEzMcFMdWU= -cloud.google.com/go/auth v0.4.1 h1:Z7YNIhlWRtrnKlZke7z3GMqzvuYzdc2z98F9D1NV5Hg= -cloud.google.com/go/auth v0.4.1/go.mod h1:QVBuVEKpCn4Zp58hzRGvL0tjRGU0YqdRTdCHM1IHnro= -cloud.google.com/go/auth v0.7.0 h1:kf/x9B3WTbBUHkC+1VS8wwwli9TzhSt0vSTVBmMR8Ts= -cloud.google.com/go/auth v0.7.0/go.mod h1:D+WqdrpcjmiCgWrXmLLxOVq1GACoE36chW6KXoEvuIw= -cloud.google.com/go/auth v0.7.2 h1:uiha352VrCDMXg+yoBtaD0tUF4Kv9vrtrWPYXwutnDE= -cloud.google.com/go/auth v0.7.2/go.mod h1:VEc4p5NNxycWQTMQEDQF0bd6aTMb6VgYDXEwiJJQAbs= -cloud.google.com/go/auth v0.7.3 h1:98Vr+5jMaCZ5NZk6e/uBgf60phTk/XN84r8QEWB9yjY= -cloud.google.com/go/auth v0.7.3/go.mod h1:HJtWUx1P5eqjy/f6Iq5KeytNpbAcGolPhOgyop2LlzA= cloud.google.com/go/auth v0.8.0 h1:y8jUJLl/Fg+qNBWxP/Hox2ezJvjkrPb952PC1p0G6A4= cloud.google.com/go/auth v0.8.0/go.mod h1:qGVp/Y3kDRSDZ5gFD/XPUfYQ9xW1iI7q8RIRoCyBbJc= -cloud.google.com/go/auth/oauth2adapt v0.2.2 h1:+TTV8aXpjeChS9M+aTtN/TjdQnzJvmzKFt//oWu7HX4= -cloud.google.com/go/auth/oauth2adapt v0.2.2/go.mod h1:wcYjgpZI9+Yu7LyYBg4pqSiaRkfEK3GQcpb7C/uyF1Q= cloud.google.com/go/auth/oauth2adapt v0.2.3 h1:MlxF+Pd3OmSudg/b1yZ5lJwoXCEaeedAguodky1PcKI= cloud.google.com/go/auth/oauth2adapt v0.2.3/go.mod h1:tMQXOfZzFuNuUxOypHlQEXgdfX5cuhwU+ffUuXRJE8I= -cloud.google.com/go/compute v1.26.0 h1:uHf0NN2nvxl1Gh4QO83yRCOdMK4zivtMS5gv0dEX0hg= -cloud.google.com/go/compute v1.26.0/go.mod h1:T9RIRap4pVHCGUkVFRJ9hygT3KCXjip41X1GgWtBBII= -cloud.google.com/go/compute v1.27.2 h1:5cE5hdrwJV/92ravlwIFRGnyH9CpLGhh4N0ZDVTU+BA= -cloud.google.com/go/compute v1.27.2/go.mod h1:YQuHkNEwP3bIz4LBYQqf4DIMfFtTDtnEgnwG0mJQQ9I= -cloud.google.com/go/compute v1.27.3 h1:GFfoejA5qGeFYpKAfgoVzvgJ3D8upFKI/UR7MdiPdS0= -cloud.google.com/go/compute v1.27.3/go.mod h1:5GuDo3l1k9CFhfIHK1sXqlqOW/iWX4/eBlO5FtxDhvQ= -cloud.google.com/go/compute v1.27.4 h1:XM8ulx6crjdl09XBfji7viFgZOEQuIxBwKmjRH9Rtmc= -cloud.google.com/go/compute v1.27.4/go.mod h1:7JZS+h21ERAGHOy5qb7+EPyXlQwzshzrx1x6L9JhTqU= cloud.google.com/go/compute v1.27.5 h1:iii9Z+FhEeZ5cUkGOEqU+GM7MJSyxMgbE7H7j+JndYY= cloud.google.com/go/compute v1.27.5/go.mod h1:DfwDGujFTdSeiE8b8ZqadF/uxHFBz+ekGsk8Zfi9dTA= -cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc= -cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= -cloud.google.com/go/compute/metadata v0.4.0 h1:vHzJCWaM4g8XIcm8kopr3XmDA4Gy/lblD3EhhSux05c= -cloud.google.com/go/compute/metadata v0.4.0/go.mod h1:SIQh1Kkb4ZJ8zJ874fqVkslA29PRXuleyj6vOzlbK7M= cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY= cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY= -cloud.google.com/go/container v1.35.1 h1:Vbu/3PZNrgV1Z5DGcRubQdUccX/uMUDNc+NgHNIfbEk= -cloud.google.com/go/container v1.35.1/go.mod h1:udm8fgLm3TtpnjFN4QLLjZezAIIp/VnMo316yIRVRQU= -cloud.google.com/go/container v1.37.2 h1:g5zm1SUBZ+q7IvtI5hM/6xcpf2C/bFfN2EXzS07Iz9k= -cloud.google.com/go/container v1.37.2/go.mod h1:2ly7zpBmWtYjjuoB3fHyq8Gqrxaj2NIwzwVRpUcKYXk= -cloud.google.com/go/container v1.37.3 h1:FCKTPz9OtId4LzB7dXzp+bDP4G0vlQOdUSYn2MddF38= -cloud.google.com/go/container v1.37.3/go.mod h1:XKwtVfsTBsnZ9Ve1Pw2wkjk5kSjJqsHl3oBrbbi4w/M= -cloud.google.com/go/container v1.38.0 h1:GP5zLamfvPZeOTifnGBSER/br76D5eJ97xhcXXrh5tM= -cloud.google.com/go/container v1.38.0/go.mod h1:U0uPBvkVWOJGY/0qTVuPS7NeafFEUsHSPqT5pB8+fCY= cloud.google.com/go/container v1.38.1 h1:Pb0GbZIg/KS4A9gbF3J4JHmrgPpBA2y+4v9N04aJkOs= cloud.google.com/go/container v1.38.1/go.mod h1:2r4Qiz6IG2LhRFfWhPNmrYD7yzdE2B2kghigVWoSw/g= -cloud.google.com/go/firestore v1.15.0 h1:/k8ppuWOtNuDHt2tsRV42yI21uaGnKDEQnRFeBpbFF8= -cloud.google.com/go/firestore v1.15.0/go.mod h1:GWOxFXcv8GZUtYpWHw/w6IuYNux/BtmeVTMmjrm4yhk= cloud.google.com/go/firestore v1.16.0 h1:YwmDHcyrxVRErWcgxunzEaZxtNbc8QoFYA/JOEwDPgc= cloud.google.com/go/firestore v1.16.0/go.mod h1:+22v/7p+WNBSQwdSwP57vz47aZiY+HrDkrOsJNhk7rg= -cloud.google.com/go/functions v1.16.2 h1:83bd2lCgtu2nLbX2jrqsrQhIs7VuVA1N6Op5syeRVIg= -cloud.google.com/go/functions v1.16.2/go.mod h1:+gMvV5E3nMb9EPqX6XwRb646jTyVz8q4yk3DD6xxHpg= -cloud.google.com/go/functions v1.16.5 h1:BXxmOz/z5yr+Nf+yKerctpDcv22LOjmyhwcIp/f6qLI= -cloud.google.com/go/functions v1.16.5/go.mod h1:ds5f+dyMN4kCkTWTLpQl8wMi0sLRuJWrQaWr5eFlUnQ= -cloud.google.com/go/functions v1.16.6 h1:tPe3/48RpjcFk96VeB6jOKQpK8nliGJLsgjh6pUOyFQ= -cloud.google.com/go/functions v1.16.6/go.mod h1:wOzZakhMueNQaBUJdf0yjsJIe0GBRu+ZTvdSTzqHLs0= cloud.google.com/go/functions v1.17.0 h1:vrYGAUIvB+YW1D8nR79FHRalKOTGoQ5GUCjgOfH0VhQ= cloud.google.com/go/functions v1.17.0/go.mod h1:r8uxxI35hdP2slfTjGJvx04NRy8sP/EXUMZ0NYfBd+w= -cloud.google.com/go/iam v1.1.8 h1:r7umDwhj+BQyz0ScZMp4QrGXjSTI3ZINnpgU2nlB/K0= -cloud.google.com/go/iam v1.1.8/go.mod h1:GvE6lyMmfxXauzNq8NbgJbeVQNspG+tcdL/W8QO1+zE= -cloud.google.com/go/iam v1.1.10 h1:ZSAr64oEhQSClwBL670MsJAW5/RLiC6kfw3Bqmd5ZDI= -cloud.google.com/go/iam v1.1.10/go.mod h1:iEgMq62sg8zx446GCaijmA2Miwg5o3UbO+nI47WHJps= -cloud.google.com/go/iam v1.1.11 h1:0mQ8UKSfdHLut6pH9FM3bI55KWR46ketn0PuXleDyxw= -cloud.google.com/go/iam v1.1.11/go.mod h1:biXoiLWYIKntto2joP+62sd9uW5EpkZmKIvfNcTWlnQ= -cloud.google.com/go/iam v1.1.12 h1:JixGLimRrNGcxvJEQ8+clfLxPlbeZA6MuRJ+qJNQ5Xw= -cloud.google.com/go/iam v1.1.12/go.mod h1:9LDX8J7dN5YRyzVHxwQzrQs9opFFqn0Mxs9nAeB+Hhg= cloud.google.com/go/iam v1.1.13 h1:7zWBXG9ERbMLrzQBRhFliAV+kjcRToDTgQT3CTwYyv4= cloud.google.com/go/iam v1.1.13/go.mod h1:K8mY0uSXwEXS30KrnVb+j54LB/ntfZu1dr+4zFMNbus= -cloud.google.com/go/kms v1.16.0 h1:1yZsRPhmargZOmY+fVAh8IKiR9HzCb0U1zsxb5g2nRY= -cloud.google.com/go/kms v1.16.0/go.mod h1:olQUXy2Xud+1GzYfiBO9N0RhjsJk5IJLU6n/ethLXVc= -cloud.google.com/go/kms v1.18.2 h1:EGgD0B9k9tOOkbPhYW1PHo2W0teamAUYMOUIcDRMfPk= -cloud.google.com/go/kms v1.18.2/go.mod h1:YFz1LYrnGsXARuRePL729oINmN5J/5e7nYijgvfiIeY= -cloud.google.com/go/kms v1.18.3 h1:8+Z2S4bQDSCdghB5ZA5dVDDJTLmnkRlowtFiXqMFd74= -cloud.google.com/go/kms v1.18.3/go.mod h1:y/Lcf6fyhbdn7MrG1VaDqXxM8rhOBc5rWcWAhcvZjQU= -cloud.google.com/go/kms v1.18.4 h1:dYN3OCsQ6wJLLtOnI8DGUwQ5shMusXsWCCC+s09ATsk= -cloud.google.com/go/kms v1.18.4/go.mod h1:SG1bgQ3UWW6/KdPo9uuJnzELXY5YTTMJtDYvajiQ22g= cloud.google.com/go/kms v1.18.5 h1:75LSlVs60hyHK3ubs2OHd4sE63OAMcM2BdSJc2bkuM4= cloud.google.com/go/kms v1.18.5/go.mod h1:yXunGUGzabH8rjUPImp2ndHiGolHeWJJ0LODLedicIY= -cloud.google.com/go/longrunning v0.5.6 h1:xAe8+0YaWoCKr9t1+aWe+OeQgN/iJK1fEgZSXmjuEaE= -cloud.google.com/go/longrunning v0.5.6/go.mod h1:vUaDrWYOMKRuhiv6JBnn49YxCPz2Ayn9GqyjaBT8/mA= -cloud.google.com/go/longrunning v0.5.7 h1:WLbHekDbjK1fVFD3ibpFFVoyizlLRl73I7YKuAKilhU= -cloud.google.com/go/longrunning v0.5.7/go.mod h1:8GClkudohy1Fxm3owmBGid8W0pSgodEMwEAztp38Xng= -cloud.google.com/go/longrunning v0.5.9 h1:haH9pAuXdPAMqHvzX0zlWQigXT7B0+CL4/2nXXdBo5k= -cloud.google.com/go/longrunning v0.5.9/go.mod h1:HD+0l9/OOW0za6UWdKJtXoFAX/BGg/3Wj8p10NeWF7c= cloud.google.com/go/longrunning v0.5.11 h1:Havn1kGjz3whCfoD8dxMLP73Ph5w+ODyZB9RUsDxtGk= cloud.google.com/go/longrunning v0.5.11/go.mod h1:rDn7//lmlfWV1Dx6IB4RatCPenTwwmqXuiP0/RgoEO4= -cloud.google.com/go/run v1.3.7 h1:E4Z5e681Qh7UJrJRMCgYhp+3tkcoXiaKGh3UZmUPaAQ= -cloud.google.com/go/run v1.3.7/go.mod h1:iEUflDx4Js+wK0NzF5o7hE9Dj7QqJKnRj0/b6rhVq20= -cloud.google.com/go/run v1.3.9 h1:De6XlIBjzEFXPzDQ/hJgvieh4H/105mhkkwxL5DmH0o= -cloud.google.com/go/run v1.3.9/go.mod h1:Ep/xsiUt5ZOwNptGl1FBlHb+asAgqB+9RDJKBa/c1mI= -cloud.google.com/go/run v1.3.10 h1:6Ri8S6Zp33qFzX88b7/7QXGQEzKeuuSAfW0DopVgjww= -cloud.google.com/go/run v1.3.10/go.mod h1:zQGa7V57WWZhyiUYMlYitrBZzR+d2drzJQvrpaQ8YIA= -cloud.google.com/go/run v1.4.0 h1:ai1rnbX92iPqWg9MrbDbebsxlUSAiOK6N9dEDDQeVA0= -cloud.google.com/go/run v1.4.0/go.mod h1:4G9iHLjdOC+CQ0CzA0+6nLeR6NezVPmlj+GULmb0zE4= cloud.google.com/go/run v1.4.1 h1:grsUhL/Dlp7z5z2A4Nxi1oxEyktBkyB8VuobO6fuILs= cloud.google.com/go/run v1.4.1/go.mod h1:gaXIpytRDfrJjb3pz9PRG2q2KUaDDDV+Uvmq6QRZH20= -cloud.google.com/go/secretmanager v1.13.0 h1:nQ/Ca2Gzm/OEP8tr1hiFdHRi5wAnAmsm9qTjwkivyrQ= -cloud.google.com/go/secretmanager v1.13.0/go.mod h1:yWdfNmM2sLIiyv6RM6VqWKeBV7CdS0SO3ybxJJRhBEs= -cloud.google.com/go/secretmanager v1.13.3 h1:VqUVYY3U6uFXOhPdZgAoZH9m8E6p7eK02TsDRj2SBf4= -cloud.google.com/go/secretmanager v1.13.3/go.mod h1:e45+CxK0w6GaL4hS+KabgQskl4RdSS30b+HRf0TH0kk= -cloud.google.com/go/secretmanager v1.13.4 h1:pizLSVUkZ8RdeQL5Vswj/3ujVC4kSY5eTxAWyMwQ1uc= -cloud.google.com/go/secretmanager v1.13.4/go.mod h1:SjKHs6rx0ELUqfbRWrWq4e7SiNKV7QMWZtvZsQm3k5w= -cloud.google.com/go/secretmanager v1.13.5 h1:tXlHvpm97mFD0Lv50N4U4zlXfkoTNay3BmpNA/W7/oI= -cloud.google.com/go/secretmanager v1.13.5/go.mod h1:/OeZ88l5Z6nBVilV0SXgv6XJ243KP2aIhSWRMrbvDCQ= cloud.google.com/go/secretmanager v1.13.6 h1:0ZEl/LuoB4xQsjVfQt3Gi/dZfOv36n4JmdPrMargzYs= cloud.google.com/go/secretmanager v1.13.6/go.mod h1:x2ySyOrqv3WGFRFn2Xk10iHmNmvmcEVSSqc30eb1bhw= -cloud.google.com/go/storage v1.41.0 h1:RusiwatSu6lHeEXe3kglxakAmAbfV+rhtPqA6i8RBx0= -cloud.google.com/go/storage v1.41.0/go.mod h1:J1WCa/Z2FcgdEDuPUY8DxT5I+d9mFKsCepp5vR6Sq80= cloud.google.com/go/storage v1.43.0 h1:CcxnSohZwizt4LCzQHWvBf1/kvtHUn7gk9QERXPyXFs= cloud.google.com/go/storage v1.43.0/go.mod h1:ajvxEa7WmZS1PxvKRq4bq0tFT3vMd502JwstCcYv0Q0= firebase.google.com/go v3.13.0+incompatible h1:3TdYC3DDi6aHn20qoRkxwGqNgdjtblwVAyRLQwGn/+4= @@ -113,31 +33,11 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4= github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/ekristen/libnuke v0.14.3-0.20240513171000-37bb6e85611c h1:VfZ8FW3eJroG6YOKIESEeBHmz19PJgLvYVxe/msu9Nc= -github.com/ekristen/libnuke v0.14.3-0.20240513171000-37bb6e85611c/go.mod h1:riI1tjCf6r+et/9oUBd1vQeFmn2Sn6UeFUR0nWkMeYw= -github.com/ekristen/libnuke v0.14.3-0.20240514010903-6345e83a32bc h1:F8yor6Z247JZxONh+Fjtnob7pf1OPcNlB3TcWIrBSyw= -github.com/ekristen/libnuke v0.14.3-0.20240514010903-6345e83a32bc/go.mod h1:riI1tjCf6r+et/9oUBd1vQeFmn2Sn6UeFUR0nWkMeYw= -github.com/ekristen/libnuke v0.14.3-0.20240514013525-d2db7f29e31c h1:Vy6l+vhijFgOdZNKgkTfCNKRFLr2pOyKGkYUAnfRaTg= -github.com/ekristen/libnuke v0.14.3-0.20240514013525-d2db7f29e31c/go.mod h1:riI1tjCf6r+et/9oUBd1vQeFmn2Sn6UeFUR0nWkMeYw= -github.com/ekristen/libnuke v0.14.3-0.20240514022239-6fae2a990fdf h1:iPlsTjfmQmhSFXJH3gIXhUiwx2onzMqwUaoHbEQYXmM= -github.com/ekristen/libnuke v0.14.3-0.20240514022239-6fae2a990fdf/go.mod h1:riI1tjCf6r+et/9oUBd1vQeFmn2Sn6UeFUR0nWkMeYw= -github.com/ekristen/libnuke v0.14.3-0.20240516175134-d8cbc29baf7e h1:KM3VOQ/ZsMdlug3I2dvLvqkguC0KZwejm2cJKzWDhHE= -github.com/ekristen/libnuke v0.14.3-0.20240516175134-d8cbc29baf7e/go.mod h1:riI1tjCf6r+et/9oUBd1vQeFmn2Sn6UeFUR0nWkMeYw= -github.com/ekristen/libnuke v0.14.3-0.20240604221149-91349c827795 h1:LBUgoQ7Ua1M+d8qTDpP+4+AZwjtfEaTfrARq2mo5q94= -github.com/ekristen/libnuke v0.14.3-0.20240604221149-91349c827795/go.mod h1:riI1tjCf6r+et/9oUBd1vQeFmn2Sn6UeFUR0nWkMeYw= -github.com/ekristen/libnuke v0.14.3-0.20240604222203-e5306c7eb43c h1:yuxVGeAzX5O4IlESpT585doZmIKzwiHDsgse2E3jx0s= -github.com/ekristen/libnuke v0.14.3-0.20240604222203-e5306c7eb43c/go.mod h1:riI1tjCf6r+et/9oUBd1vQeFmn2Sn6UeFUR0nWkMeYw= -github.com/ekristen/libnuke v0.14.3-0.20240608194128-6f7f0eab4e1d h1:sKohT+/uJFDpf83alemWBDdw+N40CDLX74Q4Dvn8nUM= -github.com/ekristen/libnuke v0.14.3-0.20240608194128-6f7f0eab4e1d/go.mod h1:riI1tjCf6r+et/9oUBd1vQeFmn2Sn6UeFUR0nWkMeYw= -github.com/ekristen/libnuke v0.17.1 h1:bEroAfJ18eEKq+1B6n1QSJi9NvwIu9RFUxwOrjwn1xI= -github.com/ekristen/libnuke v0.17.1/go.mod h1:riI1tjCf6r+et/9oUBd1vQeFmn2Sn6UeFUR0nWkMeYw= github.com/ekristen/libnuke v0.18.0 h1:sF533oSET50FjgIkYV72rvgNzCzUR/AH2tQeKVim31g= github.com/ekristen/libnuke v0.18.0/go.mod h1:riI1tjCf6r+et/9oUBd1vQeFmn2Sn6UeFUR0nWkMeYw= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -151,8 +51,6 @@ github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw github.com/gertd/go-pluralize v0.2.1 h1:M3uASbVjMnTsPb0PNqg+E/24Vwigyo/tvyMTtAlLgiA= github.com/gertd/go-pluralize v0.2.1/go.mod h1:rbYaKDbsXxmRfr8uygAEKhOWsjyrrqrkHVpZvoOp8zk= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= -github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= @@ -184,8 +82,8 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= -github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= +github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= +github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0= github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM= github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -193,10 +91,6 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= -github.com/googleapis/gax-go/v2 v2.12.4 h1:9gWcmF85Wvq4ryPFvGFaOgPIs1AQX0d0bcbGw4Z96qg= -github.com/googleapis/gax-go/v2 v2.12.4/go.mod h1:KYEYLorsnIGDi/rPC8b5TdlB9kbKoFubselGIoBMCwI= -github.com/googleapis/gax-go/v2 v2.12.5 h1:8gw9KZK8TiVKB6q3zHY3SBzLnrGp6HQjyfYBYGmXdxA= -github.com/googleapis/gax-go/v2 v2.12.5/go.mod h1:BUDKcWo+RaKq5SC9vVYL0wLADa3VcfswbOMMRmB9H3E= github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s= github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A= github.com/gotidy/ptr v1.4.0 h1:7++suUs+HNHMnyz6/AW3SE+4EnBhupPSQTSI7QNijVc= @@ -230,18 +124,8 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/urfave/cli/v2 v2.27.1 h1:8xSQ6szndafKVRmfyeUMxkNUJQMjL1F2zmsZ+qHpfho= -github.com/urfave/cli/v2 v2.27.1/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= -github.com/urfave/cli/v2 v2.27.2 h1:6e0H+AkS+zDckwPCUrZkKX38mRaau4nL2uipkJpbkcI= -github.com/urfave/cli/v2 v2.27.2/go.mod h1:g0+79LmHHATl7DAcHO99smiR/T7uGLw84w8Y42x+4eM= -github.com/urfave/cli/v2 v2.27.3 h1:/POWahRmdh7uztQ3CYnaDddk0Rm90PyOgIxgW2rr41M= -github.com/urfave/cli/v2 v2.27.3/go.mod h1:m4QzxcD2qpra4z7WhzEGn74WZLViBnMpb1ToCAKdGRQ= github.com/urfave/cli/v2 v2.27.4 h1:o1owoI+02Eb+K107p27wEX9Bb8eqIoZCfLXloLUSWJ8= github.com/urfave/cli/v2 v2.27.4/go.mod h1:m4QzxcD2qpra4z7WhzEGn74WZLViBnMpb1ToCAKdGRQ= -github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= -github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= -github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913 h1:+qGGcbkzsfDQNPPe9UDgpxAWQrhbbBXOYJFQDq/dtJw= -github.com/xrash/smetrics v0.0.0-20240312152122-5f08fbb34913/go.mod h1:4aEEwZQutDLsQv2Deui4iYQ6DWTxR14g6m8Wv88+Xqk= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4= github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= @@ -262,8 +146,6 @@ go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= -golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -280,23 +162,15 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= -golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.20.0 h1:4mQdhULixXKP1rwYBW0vAijoXnkTG0BLCDRzfe1idMo= -golang.org/x/oauth2 v0.20.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= -golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs= -golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA= golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/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.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -310,8 +184,6 @@ 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.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= -golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -320,14 +192,8 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= -golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= -golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= -golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -339,16 +205,6 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= 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/api v0.179.0 h1:QyHDLm/HqM7ysaHgGO0wu7P4NbwbimnOoKxu5Cfdx8s= -google.golang.org/api v0.179.0/go.mod h1:51AiyoEg1MJPSZ9zvklA8VnRILPXxn1iVen9v25XHAE= -google.golang.org/api v0.180.0 h1:M2D87Yo0rGBPWpo1orwfCLehUUL6E7/TYe5gvMQWDh4= -google.golang.org/api v0.180.0/go.mod h1:51AiyoEg1MJPSZ9zvklA8VnRILPXxn1iVen9v25XHAE= -google.golang.org/api v0.188.0 h1:51y8fJ/b1AaaBRJr4yWm96fPcuxSo0JcegXE3DaHQHw= -google.golang.org/api v0.188.0/go.mod h1:VR0d+2SIiWOYG3r/jdm7adPW9hI2aRv9ETOSCQ9Beag= -google.golang.org/api v0.189.0 h1:equMo30LypAkdkLMBqfeIqtyAnlyig1JSZArl4XPwdI= -google.golang.org/api v0.189.0/go.mod h1:FLWGJKb0hb+pU2j+rJqwbnsF+ym+fQs73rbJ+KAUgy8= -google.golang.org/api v0.190.0 h1:ASM+IhLY1zljNdLu19W1jTmU6A+gMk6M46Wlur61s+Q= -google.golang.org/api v0.190.0/go.mod h1:QIr6I9iedBLnfqoD6L6Vze1UvS5Hzj5r2aUBOaZnLHo= google.golang.org/api v0.191.0 h1:cJcF09Z+4HAB2t5qTQM1ZtfL/PemsLFkcFG67qq2afk= google.golang.org/api v0.191.0/go.mod h1:tD5dsFGxFza0hnQveGfVk9QQYKcfp+VzgRqyXFxE0+E= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= @@ -358,30 +214,10 @@ google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJ google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20240401170217-c3f982113cda h1:wu/KJm9KJwpfHWhkkZGohVC6KRrc1oJNr4jwtQMOQXw= -google.golang.org/genproto v0.0.0-20240401170217-c3f982113cda/go.mod h1:g2LLCvCeCSir/JJSWosk19BR4NVxGqHUC6rxIRsd7Aw= -google.golang.org/genproto v0.0.0-20240708141625-4ad9e859172b h1:dSTjko30weBaMj3eERKc0ZVXW4GudCswM3m+P++ukU0= -google.golang.org/genproto v0.0.0-20240708141625-4ad9e859172b/go.mod h1:FfBgJBJg9GcpPvKIuHSZ/aE1g2ecGL74upMzGZjiGEY= -google.golang.org/genproto v0.0.0-20240722135656-d784300faade h1:lKFsS7wpngDgSCeFn7MoLy+wBDQZ1UQIJD4UNM1Qvkg= -google.golang.org/genproto v0.0.0-20240722135656-d784300faade/go.mod h1:FfBgJBJg9GcpPvKIuHSZ/aE1g2ecGL74upMzGZjiGEY= google.golang.org/genproto v0.0.0-20240730163845-b1a4ccb954bf h1:OqdXDEakZCVtDiZTjcxfwbHPCT11ycCEsTKesBVKvyY= google.golang.org/genproto v0.0.0-20240730163845-b1a4ccb954bf/go.mod h1:mCr1K1c8kX+1iSBREvU3Juo11CB+QOEWxbRS01wWl5M= -google.golang.org/genproto/googleapis/api v0.0.0-20240429193739-8cf5692501f6 h1:DTJM0R8LECCgFeUwApvcEJHz85HLagW8uRENYxHh1ww= -google.golang.org/genproto/googleapis/api v0.0.0-20240429193739-8cf5692501f6/go.mod h1:10yRODfgim2/T8csjQsMPgZOMvtytXKTDRzH6HRGzRw= -google.golang.org/genproto/googleapis/api v0.0.0-20240506185236-b8a5c65736ae h1:AH34z6WAGVNkllnKs5raNq3yRq93VnjBG6rpfub/jYk= -google.golang.org/genproto/googleapis/api v0.0.0-20240506185236-b8a5c65736ae/go.mod h1:FfiGhwUm6CJviekPrc0oJ+7h29e+DmWU6UtjX0ZvI7Y= -google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 h1:0+ozOGcrp+Y8Aq8TLNN2Aliibms5LEzsq99ZZmAGYm0= -google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094/go.mod h1:fJ/e3If/Q67Mj99hin0hMhiNyCRmt6BQ2aWIJshUSJw= -google.golang.org/genproto/googleapis/api v0.0.0-20240722135656-d784300faade h1:WxZOF2yayUHpHSbUE6NMzumUzBxYc3YGwo0YHnbzsJY= -google.golang.org/genproto/googleapis/api v0.0.0-20240722135656-d784300faade/go.mod h1:mw8MG/Qz5wfgYr6VqVCiZcHe/GJEfI+oGGDCohaVgB0= google.golang.org/genproto/googleapis/api v0.0.0-20240725223205-93522f1f2a9f h1:b1Ln/PG8orm0SsBbHZWke8dDp2lrCD4jSmfglFpTZbk= google.golang.org/genproto/googleapis/api v0.0.0-20240725223205-93522f1f2a9f/go.mod h1:AHT0dDg3SoMOgZGnZk29b5xTbPHMoEC8qthmBLJCpys= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6 h1:DujSIu+2tC9Ht0aPNA7jgj23Iq8Ewi5sgkQ++wdvonE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240708141625-4ad9e859172b h1:04+jVzTs2XBnOZcPsLnmrTGqltqJbZQ1Ey26hjYdQQ0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240708141625-4ad9e859172b/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240722135656-d784300faade h1:oCRSWfwGXQsqlVdErcyTt4A93Y8fo0/9D4b1gnI++qo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240722135656-d784300faade/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= google.golang.org/genproto/googleapis/rpc v0.0.0-20240730163845-b1a4ccb954bf h1:liao9UHurZLtiEwBgT9LMOnKYsHze6eA6w1KQCMVN2Q= google.golang.org/genproto/googleapis/rpc v0.0.0-20240730163845-b1a4ccb954bf/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -389,8 +225,6 @@ google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= -google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= google.golang.org/grpc v1.64.1 h1:LKtvyfbX3UGVPFcGqJ9ItpVWW6oN/2XqTxfAnwRRXiA= google.golang.org/grpc v1.64.1/go.mod h1:hiQF4LFZelK2WKaP6W0L92zGHtiQdZxk8CrSdvyjeP0= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -404,8 +238,6 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= -google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/pkg/nuke/resource.go b/pkg/nuke/resource.go index 5bf79b7..6808c92 100644 --- a/pkg/nuke/resource.go +++ b/pkg/nuke/resource.go @@ -33,7 +33,7 @@ type ListerOpts struct { func (o *ListerOpts) BeforeList(geo Geography, service string) error { log := logrus.WithField("geo", geo). WithField("service", service). - WithField("hooke", "true") + WithField("hook", "true") if geo == Global && *o.Region != "global" { log.Trace("before-list: skipping resource, global") diff --git a/resources/compute-backend-service.go b/resources/compute-backend-service.go new file mode 100644 index 0000000..b0c3b91 --- /dev/null +++ b/resources/compute-backend-service.go @@ -0,0 +1,204 @@ +package resources + +import ( + "context" + "errors" + "fmt" + liberror "github.com/ekristen/libnuke/pkg/errors" + + "github.com/sirupsen/logrus" + + "google.golang.org/api/iterator" + + compute "cloud.google.com/go/compute/apiv1" + "cloud.google.com/go/compute/apiv1/computepb" + + "github.com/ekristen/libnuke/pkg/registry" + "github.com/ekristen/libnuke/pkg/resource" + "github.com/ekristen/libnuke/pkg/types" + + "github.com/ekristen/gcp-nuke/pkg/nuke" +) + +const ComputeBackendServiceResource = "ComputeBackendService" + +func init() { + registry.Register(®istry.Registration{ + Name: ComputeBackendServiceResource, + Scope: nuke.Project, + Lister: &ComputeBackendServiceLister{}, + }) +} + +type ComputeBackendServiceLister struct { + svc *compute.RegionBackendServicesClient + globalSvc *compute.BackendServicesClient +} + +func (l *ComputeBackendServiceLister) List(ctx context.Context, o interface{}) ([]resource.Resource, error) { + var resources []resource.Resource + opts := o.(*nuke.ListerOpts) + + if err := opts.BeforeList(nuke.Global, "compute.googleapis.com"); err == nil { + globalResources, err := l.listGlobal(ctx, opts) + if err != nil { + logrus.WithError(err).Error("unable to list global ssl certificates") + } else { + resources = append(resources, globalResources...) + } + } + + if err := opts.BeforeList(nuke.Regional, "compute.googleapis.com"); err == nil { + regionalResources, err := l.listRegional(ctx, opts) + if err != nil { + logrus.WithError(err).Error("unable to list regional ssl certificates") + } else { + resources = append(resources, regionalResources...) + } + } + + return resources, nil +} + +func (l *ComputeBackendServiceLister) listGlobal(ctx context.Context, opts *nuke.ListerOpts) ([]resource.Resource, error) { + var resources []resource.Resource + + if l.globalSvc == nil { + var err error + l.globalSvc, err = compute.NewBackendServicesRESTClient(ctx) + if err != nil { + return nil, err + } + } + + // NOTE: you might have to modify the code below to actually work, this currently does not + // inspect the google go sdk instead is a jumping off point + req := &computepb.ListBackendServicesRequest{ + Project: *opts.Project, + } + it := l.globalSvc.List(ctx, req) + for { + resp, err := it.Next() + if errors.Is(err, iterator.Done) { + break + } + if err != nil { + logrus.WithError(err).Error("unable to iterate networks") + break + } + + resources = append(resources, &ComputeBackendService{ + globalSvc: l.globalSvc, + project: opts.Project, + Name: resp.Name, + }) + } + + return resources, nil +} + +func (l *ComputeBackendServiceLister) listRegional(ctx context.Context, opts *nuke.ListerOpts) ([]resource.Resource, error) { + var resources []resource.Resource + + if l.svc == nil { + var err error + l.svc, err = compute.NewRegionBackendServicesRESTClient(ctx) + if err != nil { + return nil, err + } + } + + req := &computepb.ListRegionBackendServicesRequest{ + Project: *opts.Project, + Region: *opts.Region, + } + it := l.svc.List(ctx, req) + for { + resp, err := it.Next() + if errors.Is(err, iterator.Done) { + break + } + if err != nil { + logrus.WithError(err).Error("unable to iterate networks") + break + } + + resources = append(resources, &ComputeBackendService{ + svc: l.svc, + project: opts.Project, + region: opts.Region, + Name: resp.Name, + }) + } + + return resources, nil +} + +type ComputeBackendService struct { + svc *compute.RegionBackendServicesClient + globalSvc *compute.BackendServicesClient + removeOp *compute.Operation + project *string + region *string + Name *string +} + +func (r *ComputeBackendService) Remove(ctx context.Context) error { + if r.svc != nil { + return r.removeRegion(ctx) + } else if r.globalSvc != nil { + return r.removeGlobal(ctx) + } + + return errors.New("unable to determine service") +} + +func (r *ComputeBackendService) removeGlobal(ctx context.Context) (err error) { + r.removeOp, err = r.globalSvc.Delete(ctx, &computepb.DeleteBackendServiceRequest{ + Project: *r.project, + BackendService: *r.Name, + }) + return err +} + +func (r *ComputeBackendService) removeRegion(ctx context.Context) (err error) { + r.removeOp, err = r.svc.Delete(ctx, &computepb.DeleteRegionBackendServiceRequest{ + Project: *r.project, + Region: *r.region, + BackendService: *r.Name, + }) + return err +} + +func (r *ComputeBackendService) Properties() types.Properties { + return types.NewPropertiesFromStruct(r) +} + +func (r *ComputeBackendService) String() string { + return *r.Name +} + +func (r *ComputeBackendService) HandleWait(ctx context.Context) error { + if r.removeOp == nil { + return nil + } + + if err := r.removeOp.Poll(ctx); err != nil { + logrus.WithError(err).Trace("remove op polling encountered error") + return err + } + + if !r.removeOp.Done() { + return liberror.ErrWaitResource("waiting for operation to complete") + } + + if r.removeOp.Done() { + if r.removeOp.Proto().GetError() != nil { + removeErr := fmt.Errorf("delete error on '%s': %s", r.removeOp.Proto().GetTargetLink(), r.removeOp.Proto().GetHttpErrorMessage()) + logrus.WithError(removeErr).WithField("status_code", r.removeOp.Proto().GetError()).Errorf("unable to delete %s", ComputeBackendServiceResource) + return removeErr + } + } + + return nil +} diff --git a/resources/compute-forwarding-rule.go b/resources/compute-forwarding-rule.go new file mode 100644 index 0000000..ed80fc6 --- /dev/null +++ b/resources/compute-forwarding-rule.go @@ -0,0 +1,208 @@ +package resources + +import ( + "context" + "errors" + "fmt" + liberror "github.com/ekristen/libnuke/pkg/errors" + + "github.com/sirupsen/logrus" + + "google.golang.org/api/iterator" + + compute "cloud.google.com/go/compute/apiv1" + "cloud.google.com/go/compute/apiv1/computepb" + + "github.com/ekristen/libnuke/pkg/registry" + "github.com/ekristen/libnuke/pkg/resource" + "github.com/ekristen/libnuke/pkg/types" + + "github.com/ekristen/gcp-nuke/pkg/nuke" +) + +const ComputeForwardingRuleResource = "ComputeForwardingRule" + +func init() { + registry.Register(®istry.Registration{ + Name: ComputeForwardingRuleResource, + Scope: nuke.Project, + Lister: &ComputeForwardingRuleLister{}, + }) +} + +type ComputeForwardingRuleLister struct { + svc *compute.ForwardingRulesClient + globalSvc *compute.GlobalForwardingRulesClient +} + +func (l *ComputeForwardingRuleLister) List(ctx context.Context, o interface{}) ([]resource.Resource, error) { + var resources []resource.Resource + opts := o.(*nuke.ListerOpts) + + if err := opts.BeforeList(nuke.Global, "compute.googleapis.com"); err == nil { + globalResources, err := l.listGlobal(ctx, opts) + if err != nil { + logrus.WithError(err).Error("unable to list global security policies") + } else { + resources = append(resources, globalResources...) + } + } + + if err := opts.BeforeList(nuke.Regional, "compute.googleapis.com"); err == nil { + regionalResources, err := l.listRegional(ctx, opts) + if err != nil { + logrus.WithError(err).Error("unable to list regional security policies") + } else { + resources = append(resources, regionalResources...) + } + } + + return resources, nil +} + +func (l *ComputeForwardingRuleLister) listGlobal(ctx context.Context, opts *nuke.ListerOpts) ([]resource.Resource, error) { + var resources []resource.Resource + + if l.globalSvc == nil { + var err error + l.globalSvc, err = compute.NewGlobalForwardingRulesRESTClient(ctx) + if err != nil { + return nil, err + } + } + + req := &computepb.ListGlobalForwardingRulesRequest{ + Project: *opts.Project, + } + it := l.globalSvc.List(ctx, req) + for { + resp, err := it.Next() + if errors.Is(err, iterator.Done) { + break + } + if err != nil { + logrus.WithError(err).Error("unable to iterate networks") + break + } + + resources = append(resources, &ComputeForwardingRule{ + globalSvc: l.globalSvc, + project: opts.Project, + Name: resp.Name, + CreatedAt: resp.CreationTimestamp, + Labels: resp.Labels, + }) + } + + return resources, nil +} + +func (l *ComputeForwardingRuleLister) listRegional(ctx context.Context, opts *nuke.ListerOpts) ([]resource.Resource, error) { + var resources []resource.Resource + + if l.svc == nil { + var err error + l.svc, err = compute.NewForwardingRulesRESTClient(ctx) + if err != nil { + return nil, err + } + } + + req := &computepb.ListForwardingRulesRequest{ + Project: *opts.Project, + Region: *opts.Region, + } + it := l.svc.List(ctx, req) + for { + resp, err := it.Next() + if errors.Is(err, iterator.Done) { + break + } + if err != nil { + logrus.WithError(err).Error("unable to iterate networks") + break + } + + resources = append(resources, &ComputeForwardingRule{ + svc: l.svc, + project: opts.Project, + region: opts.Region, + Name: resp.Name, + CreatedAt: resp.CreationTimestamp, + Labels: resp.Labels, + }) + } + + return resources, nil +} + +type ComputeForwardingRule struct { + svc *compute.ForwardingRulesClient + globalSvc *compute.GlobalForwardingRulesClient + removeOp *compute.Operation + project *string + region *string + Name *string + CreatedAt *string + Labels map[string]string `property:"tagPrefix=label"` +} + +func (r *ComputeForwardingRule) Remove(ctx context.Context) error { + if r.svc != nil { + return r.removeRegional(ctx) + } else if r.globalSvc != nil { + return r.removeGlobal(ctx) + } + + return errors.New("unable to determine service") +} + +func (r *ComputeForwardingRule) removeGlobal(ctx context.Context) (err error) { + r.removeOp, err = r.globalSvc.Delete(ctx, &computepb.DeleteGlobalForwardingRuleRequest{ + Project: *r.project, + ForwardingRule: *r.Name, + }) + return err +} + +func (r *ComputeForwardingRule) removeRegional(ctx context.Context) (err error) { + r.removeOp, err = r.svc.Delete(ctx, &computepb.DeleteForwardingRuleRequest{ + Project: *r.project, + Region: *r.region, + ForwardingRule: *r.Name, + }) + return err +} + +func (r *ComputeForwardingRule) Properties() types.Properties { + return types.NewPropertiesFromStruct(r) +} + +func (r *ComputeForwardingRule) String() string { + return *r.Name +} + +func (r *ComputeForwardingRule) HandleWait(ctx context.Context) error { + if r.removeOp == nil { + return nil + } + + if err := r.removeOp.Poll(ctx); err != nil { + logrus.WithError(err).Trace("remove op polling encountered error") + return err + } + + if !r.removeOp.Done() { + return liberror.ErrWaitResource("waiting for operation to complete") + } + + if r.removeOp.Done() { + if r.removeOp.Proto().GetError() != nil { + removeErr := fmt.Errorf("delete error on '%s': %s", r.removeOp.Proto().GetTargetLink(), r.removeOp.Proto().GetHttpErrorMessage()) + logrus.WithError(removeErr).WithField("status_code", r.removeOp.Proto().GetError()).Errorf("unable to delete %s", ComputeForwardingRuleResource) + return removeErr + } + } + + return nil +} diff --git a/resources/compute-http-target-proxy.go b/resources/compute-http-target-proxy.go new file mode 100644 index 0000000..99b8f91 --- /dev/null +++ b/resources/compute-http-target-proxy.go @@ -0,0 +1,206 @@ +package resources + +import ( + "context" + "errors" + "fmt" + liberror "github.com/ekristen/libnuke/pkg/errors" + "github.com/sirupsen/logrus" + + "google.golang.org/api/iterator" + + compute "cloud.google.com/go/compute/apiv1" + "cloud.google.com/go/compute/apiv1/computepb" + + "github.com/ekristen/libnuke/pkg/registry" + "github.com/ekristen/libnuke/pkg/resource" + "github.com/ekristen/libnuke/pkg/types" + + "github.com/ekristen/gcp-nuke/pkg/nuke" +) + +const ComputeTargetHTTPProxyResource = "ComputeTargetHTTPProxy" + +func init() { + registry.Register(®istry.Registration{ + Name: ComputeTargetHTTPProxyResource, + Scope: nuke.Project, + Lister: &ComputeTargetHTTPProxyLister{}, + }) +} + +type ComputeTargetHTTPProxyLister struct { + svc *compute.RegionTargetHttpProxiesClient + globalSvc *compute.TargetHttpProxiesClient +} + +func (l *ComputeTargetHTTPProxyLister) List(ctx context.Context, o interface{}) ([]resource.Resource, error) { + var resources []resource.Resource + opts := o.(*nuke.ListerOpts) + + if err := opts.BeforeList(nuke.Global, "compute.googleapis.com"); err == nil { + globalResources, err := l.listGlobal(ctx, opts) + if err != nil { + logrus.WithError(err).Error("unable to list global target proxies") + } else { + resources = append(resources, globalResources...) + } + } + + if err := opts.BeforeList(nuke.Regional, "compute.googleapis.com"); err == nil { + regionalResources, err := l.listRegional(ctx, opts) + if err != nil { + logrus.WithError(err).Error("unable to list regional target proxies") + } else { + resources = append(resources, regionalResources...) + } + } + + return resources, nil +} + +func (l *ComputeTargetHTTPProxyLister) listGlobal(ctx context.Context, opts *nuke.ListerOpts) ([]resource.Resource, error) { + var resources []resource.Resource + + if l.globalSvc == nil { + var err error + l.globalSvc, err = compute.NewTargetHttpProxiesRESTClient(ctx) + if err != nil { + return nil, err + } + } + + req := &computepb.ListTargetHttpProxiesRequest{ + Project: *opts.Project, + } + it := l.globalSvc.List(ctx, req) + for { + resp, err := it.Next() + if errors.Is(err, iterator.Done) { + break + } + if err != nil { + logrus.WithError(err).Error("unable to iterate") + break + } + + resources = append(resources, &ComputeTargetHTTPProxy{ + globalSvc: l.globalSvc, + project: opts.Project, + Name: resp.Name, + CreatedAt: resp.CreationTimestamp, + }) + } + + return resources, nil +} + +func (l *ComputeTargetHTTPProxyLister) listRegional(ctx context.Context, opts *nuke.ListerOpts) ([]resource.Resource, error) { + var resources []resource.Resource + + if l.svc == nil { + var err error + l.svc, err = compute.NewRegionTargetHttpProxiesRESTClient(ctx) + if err != nil { + return nil, err + } + } + + req := &computepb.ListRegionTargetHttpProxiesRequest{ + Project: *opts.Project, + Region: *opts.Region, + } + it := l.svc.List(ctx, req) + for { + resp, err := it.Next() + if errors.Is(err, iterator.Done) { + break + } + if err != nil { + logrus.WithError(err).Error("unable to iterate") + break + } + + certResource := &ComputeTargetHTTPProxy{ + svc: l.svc, + project: opts.Project, + region: opts.Region, + Name: resp.Name, + CreatedAt: resp.CreationTimestamp, + } + + resources = append(resources, certResource) + } + + return resources, nil +} + +type ComputeTargetHTTPProxy struct { + svc *compute.RegionTargetHttpProxiesClient + globalSvc *compute.TargetHttpProxiesClient + removeOp *compute.Operation + project *string + region *string + Name *string + CreatedAt *string +} + +func (r *ComputeTargetHTTPProxy) Remove(ctx context.Context) error { + if r.svc != nil { + return r.removeRegional(ctx) + } else if r.globalSvc != nil { + return r.removeGlobal(ctx) + } + + return errors.New("unable to determine service") +} + +func (r *ComputeTargetHTTPProxy) removeGlobal(ctx context.Context) (err error) { + r.removeOp, err = r.globalSvc.Delete(ctx, &computepb.DeleteTargetHttpProxyRequest{ + Project: *r.project, + TargetHttpProxy: *r.Name, + }) + return err +} + +func (r *ComputeTargetHTTPProxy) removeRegional(ctx context.Context) (err error) { + r.removeOp, err = r.svc.Delete(ctx, &computepb.DeleteRegionTargetHttpProxyRequest{ + Project: *r.project, + Region: *r.region, + TargetHttpProxy: *r.Name, + }) + return err +} + +func (r *ComputeTargetHTTPProxy) Properties() types.Properties { + return types.NewPropertiesFromStruct(r) +} + +func (r *ComputeTargetHTTPProxy) String() string { + return *r.Name +} + +func (r *ComputeTargetHTTPProxy) HandleWait(ctx context.Context) error { + if r.removeOp == nil { + return nil + } + + if err := r.removeOp.Poll(ctx); err != nil { + logrus.WithError(err).Trace("remove op polling encountered error") + return err + } + + if !r.removeOp.Done() { + return liberror.ErrWaitResource("waiting for operation to complete") + } + + if r.removeOp.Done() { + if r.removeOp.Proto().GetError() != nil { + removeErr := fmt.Errorf("delete error on '%s': %s", r.removeOp.Proto().GetTargetLink(), r.removeOp.Proto().GetHttpErrorMessage()) + logrus.WithError(removeErr).WithField("status_code", r.removeOp.Proto().GetError()).Errorf("unable to delete %s", ComputeTargetHTTPProxyResource) + return removeErr + } + } + + return nil +} diff --git a/resources/compute-https-target-proxy.go b/resources/compute-https-target-proxy.go new file mode 100644 index 0000000..918f4f5 --- /dev/null +++ b/resources/compute-https-target-proxy.go @@ -0,0 +1,206 @@ +package resources + +import ( + "context" + "errors" + "fmt" + liberror "github.com/ekristen/libnuke/pkg/errors" + "github.com/sirupsen/logrus" + + "google.golang.org/api/iterator" + + compute "cloud.google.com/go/compute/apiv1" + "cloud.google.com/go/compute/apiv1/computepb" + + "github.com/ekristen/libnuke/pkg/registry" + "github.com/ekristen/libnuke/pkg/resource" + "github.com/ekristen/libnuke/pkg/types" + + "github.com/ekristen/gcp-nuke/pkg/nuke" +) + +const ComputeTargetHTTPSProxyResource = "ComputeTargetHTTPSProxy" + +func init() { + registry.Register(®istry.Registration{ + Name: ComputeTargetHTTPSProxyResource, + Scope: nuke.Project, + Lister: &ComputeTargetHTTPSProxyLister{}, + }) +} + +type ComputeTargetHTTPSProxyLister struct { + svc *compute.RegionTargetHttpsProxiesClient + globalSvc *compute.TargetHttpsProxiesClient +} + +func (l *ComputeTargetHTTPSProxyLister) List(ctx context.Context, o interface{}) ([]resource.Resource, error) { + var resources []resource.Resource + opts := o.(*nuke.ListerOpts) + + if err := opts.BeforeList(nuke.Global, "compute.googleapis.com"); err == nil { + globalResources, err := l.listGlobal(ctx, opts) + if err != nil { + logrus.WithError(err).Error("unable to list global target proxies") + } else { + resources = append(resources, globalResources...) + } + } + + if err := opts.BeforeList(nuke.Regional, "compute.googleapis.com"); err == nil { + regionalResources, err := l.listRegional(ctx, opts) + if err != nil { + logrus.WithError(err).Error("unable to list regional target proxies") + } else { + resources = append(resources, regionalResources...) + } + } + + return resources, nil +} + +func (l *ComputeTargetHTTPSProxyLister) listGlobal(ctx context.Context, opts *nuke.ListerOpts) ([]resource.Resource, error) { + var resources []resource.Resource + + if l.globalSvc == nil { + var err error + l.globalSvc, err = compute.NewTargetHttpsProxiesRESTClient(ctx) + if err != nil { + return nil, err + } + } + + req := &computepb.ListTargetHttpsProxiesRequest{ + Project: *opts.Project, + } + it := l.globalSvc.List(ctx, req) + for { + resp, err := it.Next() + if errors.Is(err, iterator.Done) { + break + } + if err != nil { + logrus.WithError(err).Error("unable to iterate") + break + } + + resources = append(resources, &ComputeTargetHTTPSProxy{ + globalSvc: l.globalSvc, + project: opts.Project, + Name: resp.Name, + }) + } + + return resources, nil +} + +func (l *ComputeTargetHTTPSProxyLister) listRegional(ctx context.Context, opts *nuke.ListerOpts) ([]resource.Resource, error) { + var resources []resource.Resource + + if l.svc == nil { + var err error + l.svc, err = compute.NewRegionTargetHttpsProxiesRESTClient(ctx) + if err != nil { + return nil, err + } + } + + req := &computepb.ListRegionTargetHttpsProxiesRequest{ + Project: *opts.Project, + Region: *opts.Region, + } + it := l.svc.List(ctx, req) + for { + resp, err := it.Next() + if errors.Is(err, iterator.Done) { + break + } + if err != nil { + logrus.WithError(err).Error("unable to iterate") + break + } + + certResource := &ComputeTargetHTTPSProxy{ + svc: l.svc, + project: opts.Project, + region: opts.Region, + Name: resp.Name, + } + + resources = append(resources, certResource) + } + + return resources, nil +} + +type ComputeTargetHTTPSProxy struct { + svc *compute.RegionTargetHttpsProxiesClient + globalSvc *compute.TargetHttpsProxiesClient + removeOp *compute.Operation + project *string + region *string + Name *string + Type *string + Domain *string + ExpiresAt *string +} + +func (r *ComputeTargetHTTPSProxy) Remove(ctx context.Context) error { + if r.svc != nil { + return r.removeRegional(ctx) + } else if r.globalSvc != nil { + return r.removeGlobal(ctx) + } + + return errors.New("unable to determine service") +} + +func (r *ComputeTargetHTTPSProxy) removeGlobal(ctx context.Context) (err error) { + r.removeOp, err = r.globalSvc.Delete(ctx, &computepb.DeleteTargetHttpsProxyRequest{ + Project: *r.project, + TargetHttpsProxy: *r.Name, + }) + return err +} + +func (r *ComputeTargetHTTPSProxy) removeRegional(ctx context.Context) (err error) { + r.removeOp, err = r.svc.Delete(ctx, &computepb.DeleteRegionTargetHttpsProxyRequest{ + Project: *r.project, + Region: *r.region, + TargetHttpsProxy: *r.Name, + }) + return err +} + +func (r *ComputeTargetHTTPSProxy) Properties() types.Properties { + return types.NewPropertiesFromStruct(r) +} + +func (r *ComputeTargetHTTPSProxy) String() string { + return *r.Name +} + +func (r *ComputeTargetHTTPSProxy) HandleWait(ctx context.Context) error { + if r.removeOp == nil { + return nil + } + + if err := r.removeOp.Poll(ctx); err != nil { + logrus.WithError(err).Trace("remove op polling encountered error") + return err + } + + if !r.removeOp.Done() { + return liberror.ErrWaitResource("waiting for operation to complete") + } + + if r.removeOp.Done() { + if r.removeOp.Proto().GetError() != nil { + removeErr := fmt.Errorf("delete error on '%s': %s", r.removeOp.Proto().GetTargetLink(), r.removeOp.Proto().GetHttpErrorMessage()) + logrus.WithError(removeErr).WithField("status_code", r.removeOp.Proto().GetError()).Errorf("unable to delete %s", ComputeTargetHTTPSProxyResource) + return removeErr + } + } + + return nil +} diff --git a/resources/compute-security-policy.go b/resources/compute-security-policy.go new file mode 100644 index 0000000..ca3ef83 --- /dev/null +++ b/resources/compute-security-policy.go @@ -0,0 +1,210 @@ +package resources + +import ( + compute "cloud.google.com/go/compute/apiv1" + "cloud.google.com/go/compute/apiv1/computepb" + "context" + "errors" + "fmt" + liberror "github.com/ekristen/libnuke/pkg/errors" + "github.com/sirupsen/logrus" + "google.golang.org/api/iterator" + + "github.com/ekristen/libnuke/pkg/registry" + "github.com/ekristen/libnuke/pkg/resource" + "github.com/ekristen/libnuke/pkg/types" + + "github.com/ekristen/gcp-nuke/pkg/nuke" +) + +const ComputeSecurityPolicyResource = "ComputeSecurityPolicy" + +func init() { + registry.Register(®istry.Registration{ + Name: ComputeSecurityPolicyResource, + Scope: nuke.Project, + Lister: &ComputeSecurityPolicyLister{}, + }) +} + +type ComputeSecurityPolicyLister struct { + svc *compute.RegionSecurityPoliciesClient + globalSvc *compute.SecurityPoliciesClient +} + +func (l *ComputeSecurityPolicyLister) List(ctx context.Context, o interface{}) ([]resource.Resource, error) { + var resources []resource.Resource + opts := o.(*nuke.ListerOpts) + + if err := opts.BeforeList(nuke.Global, "compute.googleapis.com"); err == nil { + globalResources, err := l.listGlobal(ctx, opts) + if err != nil { + logrus.WithError(err).Error("unable to list global security policies") + } else { + resources = append(resources, globalResources...) + } + } + + if err := opts.BeforeList(nuke.Regional, "compute.googleapis.com"); err == nil { + regionalResources, err := l.listRegional(ctx, opts) + if err != nil { + logrus.WithError(err).Error("unable to list regional security policies") + } else { + resources = append(resources, regionalResources...) + } + } + + return resources, nil +} + +func (l *ComputeSecurityPolicyLister) listGlobal(ctx context.Context, opts *nuke.ListerOpts) ([]resource.Resource, error) { + var resources []resource.Resource + if err := opts.BeforeList(nuke.Global, "compute.googleapis.com"); err != nil { + return resources, err + } + + logrus.Debug("listing security policies") + + if l.globalSvc == nil { + var err error + l.globalSvc, err = compute.NewSecurityPoliciesRESTClient(ctx, opts.ClientOptions...) + if err != nil { + return nil, err + } + } + + req := &computepb.ListSecurityPoliciesRequest{ + Project: *opts.Project, + } + it := l.globalSvc.List(ctx, req) + for { + resp, err := it.Next() + if errors.Is(err, iterator.Done) { + break + } + if err != nil { + logrus.WithError(err).Error("unable to iterate networks") + break + } + + resources = append(resources, &ComputeSecurityPolicy{ + globalSvc: l.globalSvc, + Name: resp.Name, + project: opts.Project, + }) + } + + return resources, nil +} + +func (l *ComputeSecurityPolicyLister) listRegional(ctx context.Context, opts *nuke.ListerOpts) ([]resource.Resource, error) { + var resources []resource.Resource + + logrus.Debug("listing security policies") + + if l.svc == nil { + var err error + l.svc, err = compute.NewRegionSecurityPoliciesRESTClient(ctx, opts.ClientOptions...) + if err != nil { + return nil, err + } + } + + req := &computepb.ListRegionSecurityPoliciesRequest{ + Project: *opts.Project, + Region: *opts.Region, + } + it := l.svc.List(ctx, req) + for { + resp, err := it.Next() + if errors.Is(err, iterator.Done) { + break + } + if err != nil { + logrus.WithError(err).Error("unable to iterate networks") + break + } + + resources = append(resources, &ComputeSecurityPolicy{ + svc: l.svc, + Name: resp.Name, + project: opts.Project, + region: opts.Region, + CreatedAt: resp.CreationTimestamp, + Labels: resp.Labels, + }) + } + + return resources, nil +} + +type ComputeSecurityPolicy struct { + svc *compute.RegionSecurityPoliciesClient + globalSvc *compute.SecurityPoliciesClient + removeOp *compute.Operation + project *string + region *string + Name *string + CreatedAt *string + Labels map[string]string `property:"tagPrefix=label"` +} + +func (r *ComputeSecurityPolicy) Remove(ctx context.Context) error { + if r.svc != nil { + return r.removeRegional(ctx) + } else if r.globalSvc != nil { + return r.removeGlobal(ctx) + } + + return errors.New("unable to determine service") +} + +func (r *ComputeSecurityPolicy) removeGlobal(ctx context.Context) (err error) { + r.removeOp, err = r.globalSvc.Delete(ctx, &computepb.DeleteSecurityPolicyRequest{ + Project: *r.project, + SecurityPolicy: *r.Name, + }) + return err +} + +func (r *ComputeSecurityPolicy) removeRegional(ctx context.Context) (err error) { + r.removeOp, err = r.svc.Delete(ctx, &computepb.DeleteRegionSecurityPolicyRequest{ + Project: *r.project, + Region: *r.region, + SecurityPolicy: *r.Name, + }) + return err +} + +func (r *ComputeSecurityPolicy) Properties() types.Properties { + return types.NewPropertiesFromStruct(r) +} + +func (r *ComputeSecurityPolicy) String() string { + return *r.Name +} + +func (r *ComputeSecurityPolicy) HandleWait(ctx context.Context) error { + if r.removeOp == nil { + return nil + } + + if err := r.removeOp.Poll(ctx); err != nil { + logrus.WithError(err).Trace("remove op polling encountered error") + return err + } + + if !r.removeOp.Done() { + return liberror.ErrWaitResource("waiting for operation to complete") + } + + if r.removeOp.Done() { + if r.removeOp.Proto().GetError() != nil { + removeErr := fmt.Errorf("delete error on '%s': %s", r.removeOp.Proto().GetTargetLink(), r.removeOp.Proto().GetHttpErrorMessage()) + logrus.WithError(removeErr).WithField("status_code", r.removeOp.Proto().GetError()).Error("unable to delete network") + return removeErr + } + } + + return nil +} diff --git a/resources/compute-ssl-certificate.go b/resources/compute-ssl-certificate.go new file mode 100644 index 0000000..0e5ab1a --- /dev/null +++ b/resources/compute-ssl-certificate.go @@ -0,0 +1,185 @@ +package resources + +import ( + "context" + "errors" + "github.com/gotidy/ptr" + "strings" + + "github.com/sirupsen/logrus" + + "google.golang.org/api/iterator" + + compute "cloud.google.com/go/compute/apiv1" + "cloud.google.com/go/compute/apiv1/computepb" + + "github.com/ekristen/libnuke/pkg/registry" + "github.com/ekristen/libnuke/pkg/resource" + "github.com/ekristen/libnuke/pkg/types" + + "github.com/ekristen/gcp-nuke/pkg/nuke" +) + +const ComputeSSLCertificateResource = "ComputeSSLCertificate" + +func init() { + registry.Register(®istry.Registration{ + Name: ComputeSSLCertificateResource, + Scope: nuke.Project, + Lister: &ComputeSSLCertificateLister{}, + }) +} + +type ComputeSSLCertificateLister struct { + svc *compute.RegionSslCertificatesClient + globalSvc *compute.SslCertificatesClient +} + +func (l *ComputeSSLCertificateLister) List(ctx context.Context, o interface{}) ([]resource.Resource, error) { + var resources []resource.Resource + opts := o.(*nuke.ListerOpts) + + if err := opts.BeforeList(nuke.Global, "compute.googleapis.com"); err == nil { + globalResources, err := l.listGlobal(ctx, opts) + if err != nil { + logrus.WithError(err).Error("unable to list global ssl certificates") + } else { + resources = append(resources, globalResources...) + } + } + + if err := opts.BeforeList(nuke.Regional, "compute.googleapis.com"); err == nil { + regionalResources, err := l.listRegional(ctx, opts) + if err != nil { + logrus.WithError(err).Error("unable to list regional ssl certificates") + } else { + resources = append(resources, regionalResources...) + } + } + + return resources, nil +} + +func (l *ComputeSSLCertificateLister) listGlobal(ctx context.Context, opts *nuke.ListerOpts) ([]resource.Resource, error) { + var resources []resource.Resource + + if l.globalSvc == nil { + var err error + l.globalSvc, err = compute.NewSslCertificatesRESTClient(ctx) + if err != nil { + return nil, err + } + } + + req := &computepb.ListSslCertificatesRequest{ + Project: *opts.Project, + } + it := l.globalSvc.List(ctx, req) + for { + resp, err := it.Next() + if errors.Is(err, iterator.Done) { + break + } + if err != nil { + logrus.WithError(err).Error("unable to iterate networks") + break + } + + resources = append(resources, &ComputeSSLCertificate{ + globalSvc: l.globalSvc, + Name: resp.Name, + project: opts.Project, + }) + } + + return resources, nil +} + +func (l *ComputeSSLCertificateLister) listRegional(ctx context.Context, opts *nuke.ListerOpts) ([]resource.Resource, error) { + var resources []resource.Resource + + if l.svc == nil { + var err error + l.svc, err = compute.NewRegionSslCertificatesRESTClient(ctx) + if err != nil { + return nil, err + } + } + + req := &computepb.ListRegionSslCertificatesRequest{ + Project: *opts.Project, + Region: *opts.Region, + } + it := l.svc.List(ctx, req) + for { + resp, err := it.Next() + if errors.Is(err, iterator.Done) { + break + } + if err != nil { + logrus.WithError(err).Error("unable to iterate networks") + break + } + + certResource := &ComputeSSLCertificate{ + svc: l.svc, + project: opts.Project, + region: opts.Region, + Name: resp.Name, + Type: resp.Type, + Domain: ptr.String(strings.Join(resp.GetSubjectAlternativeNames(), ",")), + ExpiresAt: resp.ExpireTime, + } + + resources = append(resources, certResource) + } + + return resources, nil +} + +type ComputeSSLCertificate struct { + svc *compute.RegionSslCertificatesClient + globalSvc *compute.SslCertificatesClient + removeOp *compute.Operation + project *string + region *string + Name *string + Type *string + Domain *string + ExpiresAt *string +} + +func (r *ComputeSSLCertificate) Remove(ctx context.Context) error { + if r.svc != nil { + return r.removeRegional(ctx) + } else if r.globalSvc != nil { + return r.removeGlobal(ctx) + } + + return errors.New("unable to determine service") +} + +func (r *ComputeSSLCertificate) removeGlobal(ctx context.Context) (err error) { + r.removeOp, err = r.globalSvc.Delete(ctx, &computepb.DeleteSslCertificateRequest{ + Project: *r.project, + SslCertificate: *r.Name, + }) + return err +} + +func (r *ComputeSSLCertificate) removeRegional(ctx context.Context) (err error) { + r.removeOp, err = r.svc.Delete(ctx, &computepb.DeleteRegionSslCertificateRequest{ + Project: *r.project, + Region: *r.region, + SslCertificate: *r.Name, + }) + return err +} + +func (r *ComputeSSLCertificate) Properties() types.Properties { + return types.NewPropertiesFromStruct(r) +} + +func (r *ComputeSSLCertificate) String() string { + return *r.Name +} diff --git a/resources/compute-url-map.go b/resources/compute-url-map.go new file mode 100644 index 0000000..bc20c9c --- /dev/null +++ b/resources/compute-url-map.go @@ -0,0 +1,206 @@ +package resources + +import ( + "context" + "errors" + "fmt" + liberror "github.com/ekristen/libnuke/pkg/errors" + "github.com/sirupsen/logrus" + + "google.golang.org/api/iterator" + + compute "cloud.google.com/go/compute/apiv1" + "cloud.google.com/go/compute/apiv1/computepb" + + "github.com/ekristen/libnuke/pkg/registry" + "github.com/ekristen/libnuke/pkg/resource" + "github.com/ekristen/libnuke/pkg/types" + + "github.com/ekristen/gcp-nuke/pkg/nuke" +) + +const ComputeURLMapResource = "ComputeURLMap" + +func init() { + registry.Register(®istry.Registration{ + Name: ComputeURLMapResource, + Scope: nuke.Project, + Lister: &ComputeURLMapLister{}, + }) +} + +type ComputeURLMapLister struct { + svc *compute.RegionUrlMapsClient + globalSvc *compute.UrlMapsClient +} + +func (l *ComputeURLMapLister) List(ctx context.Context, o interface{}) ([]resource.Resource, error) { + var resources []resource.Resource + opts := o.(*nuke.ListerOpts) + + if err := opts.BeforeList(nuke.Global, "compute.googleapis.com"); err == nil { + globalResources, err := l.listGlobal(ctx, opts) + if err != nil { + logrus.WithError(err).Error("unable to list global") + } else { + resources = append(resources, globalResources...) + } + } + + if err := opts.BeforeList(nuke.Regional, "compute.googleapis.com"); err == nil { + regionalResources, err := l.listRegional(ctx, opts) + if err != nil { + logrus.WithError(err).Error("unable to list regional") + } else { + resources = append(resources, regionalResources...) + } + } + + return resources, nil +} + +func (l *ComputeURLMapLister) listGlobal(ctx context.Context, opts *nuke.ListerOpts) ([]resource.Resource, error) { + var resources []resource.Resource + + if l.globalSvc == nil { + var err error + l.globalSvc, err = compute.NewUrlMapsRESTClient(ctx) + if err != nil { + return nil, err + } + } + + req := &computepb.ListUrlMapsRequest{ + Project: *opts.Project, + } + it := l.globalSvc.List(ctx, req) + for { + resp, err := it.Next() + if errors.Is(err, iterator.Done) { + break + } + if err != nil { + logrus.WithError(err).Error("unable to iterate") + break + } + + resources = append(resources, &ComputeURLMap{ + globalSvc: l.globalSvc, + project: opts.Project, + Name: resp.Name, + CreatedAt: resp.CreationTimestamp, + }) + } + + return resources, nil +} + +func (l *ComputeURLMapLister) listRegional(ctx context.Context, opts *nuke.ListerOpts) ([]resource.Resource, error) { + var resources []resource.Resource + + if l.svc == nil { + var err error + l.svc, err = compute.NewRegionUrlMapsRESTClient(ctx) + if err != nil { + return nil, err + } + } + + req := &computepb.ListRegionUrlMapsRequest{ + Project: *opts.Project, + Region: *opts.Region, + } + it := l.svc.List(ctx, req) + for { + resp, err := it.Next() + if errors.Is(err, iterator.Done) { + break + } + if err != nil { + logrus.WithError(err).Error("unable to iterate") + break + } + + certResource := &ComputeURLMap{ + svc: l.svc, + project: opts.Project, + region: opts.Region, + Name: resp.Name, + CreatedAt: resp.CreationTimestamp, + } + + resources = append(resources, certResource) + } + + return resources, nil +} + +type ComputeURLMap struct { + svc *compute.RegionUrlMapsClient + globalSvc *compute.UrlMapsClient + removeOp *compute.Operation + project *string + region *string + Name *string + CreatedAt *string +} + +func (r *ComputeURLMap) Remove(ctx context.Context) error { + if r.svc != nil { + return r.removeRegional(ctx) + } else if r.globalSvc != nil { + return r.removeGlobal(ctx) + } + + return errors.New("unable to determine service") +} + +func (r *ComputeURLMap) removeGlobal(ctx context.Context) (err error) { + r.removeOp, err = r.globalSvc.Delete(ctx, &computepb.DeleteUrlMapRequest{ + Project: *r.project, + UrlMap: *r.Name, + }) + return err +} + +func (r *ComputeURLMap) removeRegional(ctx context.Context) (err error) { + r.removeOp, err = r.svc.Delete(ctx, &computepb.DeleteRegionUrlMapRequest{ + Project: *r.project, + Region: *r.region, + UrlMap: *r.Name, + }) + return err +} + +func (r *ComputeURLMap) Properties() types.Properties { + return types.NewPropertiesFromStruct(r) +} + +func (r *ComputeURLMap) String() string { + return *r.Name +} + +func (r *ComputeURLMap) HandleWait(ctx context.Context) error { + if r.removeOp == nil { + return nil + } + + if err := r.removeOp.Poll(ctx); err != nil { + logrus.WithError(err).Trace("remove op polling encountered error") + return err + } + + if !r.removeOp.Done() { + return liberror.ErrWaitResource("waiting for operation to complete") + } + + if r.removeOp.Done() { + if r.removeOp.Proto().GetError() != nil { + removeErr := fmt.Errorf("delete error on '%s': %s", r.removeOp.Proto().GetTargetLink(), r.removeOp.Proto().GetHttpErrorMessage()) + logrus.WithError(removeErr).WithField("status_code", r.removeOp.Proto().GetError()).Errorf("unable to delete %s", ComputeURLMapResource) + return removeErr + } + } + + return nil +} From 3acb553e4932883e0c24e014f780ea5b14915a31 Mon Sep 17 00:00:00 2001 From: Erik Kristensen Date: Thu, 15 Aug 2024 17:24:56 -0600 Subject: [PATCH 2/5] refactor: rename files to align with resource names --- ...{compute-http-target-proxy.go => compute-target-http-proxy.go} | 0 ...ompute-https-target-proxy.go => compute-target-https-proxy.go} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename resources/{compute-http-target-proxy.go => compute-target-http-proxy.go} (100%) rename resources/{compute-https-target-proxy.go => compute-target-https-proxy.go} (100%) diff --git a/resources/compute-http-target-proxy.go b/resources/compute-target-http-proxy.go similarity index 100% rename from resources/compute-http-target-proxy.go rename to resources/compute-target-http-proxy.go diff --git a/resources/compute-https-target-proxy.go b/resources/compute-target-https-proxy.go similarity index 100% rename from resources/compute-https-target-proxy.go rename to resources/compute-target-https-proxy.go From 097d83fc5f753b90f70a76912744ad221a2c0a25 Mon Sep 17 00:00:00 2001 From: Erik Kristensen Date: Thu, 15 Aug 2024 17:28:35 -0600 Subject: [PATCH 3/5] chore: cleanup imports --- resources/compute-backend-service.go | 2 +- resources/compute-forwarding-rule.go | 2 +- resources/compute-security-policy.go | 9 ++++++--- resources/compute-ssl-certificate.go | 2 +- resources/compute-target-http-proxy.go | 3 ++- resources/compute-target-https-proxy.go | 3 ++- resources/compute-url-map.go | 3 ++- 7 files changed, 15 insertions(+), 9 deletions(-) diff --git a/resources/compute-backend-service.go b/resources/compute-backend-service.go index b0c3b91..58e02c9 100644 --- a/resources/compute-backend-service.go +++ b/resources/compute-backend-service.go @@ -4,7 +4,6 @@ import ( "context" "errors" "fmt" - liberror "github.com/ekristen/libnuke/pkg/errors" "github.com/sirupsen/logrus" @@ -13,6 +12,7 @@ import ( compute "cloud.google.com/go/compute/apiv1" "cloud.google.com/go/compute/apiv1/computepb" + liberror "github.com/ekristen/libnuke/pkg/errors" "github.com/ekristen/libnuke/pkg/registry" "github.com/ekristen/libnuke/pkg/resource" "github.com/ekristen/libnuke/pkg/types" diff --git a/resources/compute-forwarding-rule.go b/resources/compute-forwarding-rule.go index ed80fc6..fa2de62 100644 --- a/resources/compute-forwarding-rule.go +++ b/resources/compute-forwarding-rule.go @@ -4,7 +4,6 @@ import ( "context" "errors" "fmt" - liberror "github.com/ekristen/libnuke/pkg/errors" "github.com/sirupsen/logrus" @@ -13,6 +12,7 @@ import ( compute "cloud.google.com/go/compute/apiv1" "cloud.google.com/go/compute/apiv1/computepb" + liberror "github.com/ekristen/libnuke/pkg/errors" "github.com/ekristen/libnuke/pkg/registry" "github.com/ekristen/libnuke/pkg/resource" "github.com/ekristen/libnuke/pkg/types" diff --git a/resources/compute-security-policy.go b/resources/compute-security-policy.go index ca3ef83..fa9390b 100644 --- a/resources/compute-security-policy.go +++ b/resources/compute-security-policy.go @@ -1,15 +1,18 @@ package resources import ( - compute "cloud.google.com/go/compute/apiv1" - "cloud.google.com/go/compute/apiv1/computepb" "context" "errors" "fmt" - liberror "github.com/ekristen/libnuke/pkg/errors" + "github.com/sirupsen/logrus" + "google.golang.org/api/iterator" + compute "cloud.google.com/go/compute/apiv1" + "cloud.google.com/go/compute/apiv1/computepb" + + liberror "github.com/ekristen/libnuke/pkg/errors" "github.com/ekristen/libnuke/pkg/registry" "github.com/ekristen/libnuke/pkg/resource" "github.com/ekristen/libnuke/pkg/types" diff --git a/resources/compute-ssl-certificate.go b/resources/compute-ssl-certificate.go index 0e5ab1a..e387115 100644 --- a/resources/compute-ssl-certificate.go +++ b/resources/compute-ssl-certificate.go @@ -3,9 +3,9 @@ package resources import ( "context" "errors" - "github.com/gotidy/ptr" "strings" + "github.com/gotidy/ptr" "github.com/sirupsen/logrus" "google.golang.org/api/iterator" diff --git a/resources/compute-target-http-proxy.go b/resources/compute-target-http-proxy.go index 99b8f91..6c66df7 100644 --- a/resources/compute-target-http-proxy.go +++ b/resources/compute-target-http-proxy.go @@ -4,7 +4,7 @@ import ( "context" "errors" "fmt" - liberror "github.com/ekristen/libnuke/pkg/errors" + "github.com/sirupsen/logrus" "google.golang.org/api/iterator" @@ -12,6 +12,7 @@ import ( compute "cloud.google.com/go/compute/apiv1" "cloud.google.com/go/compute/apiv1/computepb" + liberror "github.com/ekristen/libnuke/pkg/errors" "github.com/ekristen/libnuke/pkg/registry" "github.com/ekristen/libnuke/pkg/resource" "github.com/ekristen/libnuke/pkg/types" diff --git a/resources/compute-target-https-proxy.go b/resources/compute-target-https-proxy.go index 918f4f5..b8faf14 100644 --- a/resources/compute-target-https-proxy.go +++ b/resources/compute-target-https-proxy.go @@ -4,7 +4,7 @@ import ( "context" "errors" "fmt" - liberror "github.com/ekristen/libnuke/pkg/errors" + "github.com/sirupsen/logrus" "google.golang.org/api/iterator" @@ -12,6 +12,7 @@ import ( compute "cloud.google.com/go/compute/apiv1" "cloud.google.com/go/compute/apiv1/computepb" + liberror "github.com/ekristen/libnuke/pkg/errors" "github.com/ekristen/libnuke/pkg/registry" "github.com/ekristen/libnuke/pkg/resource" "github.com/ekristen/libnuke/pkg/types" diff --git a/resources/compute-url-map.go b/resources/compute-url-map.go index bc20c9c..32adce6 100644 --- a/resources/compute-url-map.go +++ b/resources/compute-url-map.go @@ -4,7 +4,7 @@ import ( "context" "errors" "fmt" - liberror "github.com/ekristen/libnuke/pkg/errors" + "github.com/sirupsen/logrus" "google.golang.org/api/iterator" @@ -12,6 +12,7 @@ import ( compute "cloud.google.com/go/compute/apiv1" "cloud.google.com/go/compute/apiv1/computepb" + liberror "github.com/ekristen/libnuke/pkg/errors" "github.com/ekristen/libnuke/pkg/registry" "github.com/ekristen/libnuke/pkg/resource" "github.com/ekristen/libnuke/pkg/types" From 2e60c2b017ad3741c6f412e94c9006e0aa1740c9 Mon Sep 17 00:00:00 2001 From: Erik Kristensen Date: Thu, 15 Aug 2024 17:29:53 -0600 Subject: [PATCH 4/5] fix(list): ignore errors and lint warning --- pkg/commands/list/list.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pkg/commands/list/list.go b/pkg/commands/list/list.go index c7f097c..acadb90 100644 --- a/pkg/commands/list/list.go +++ b/pkg/commands/list/list.go @@ -25,18 +25,18 @@ func execute(c *cli.Context) error { reg := registry.GetRegistration(name) if reg.AlternativeResource != "" { - color.New(color.Bold).Printf("%-55s\n", name) - color.New(color.Bold, color.FgYellow).Printf(" > %-55s", reg.AlternativeResource) - color.New(color.FgCyan).Printf("alternative resource\n") + _, _ = color.New(color.Bold).Printf("%-55s\n", name) + _, _ = color.New(color.Bold, color.FgYellow).Printf(" > %-55s", reg.AlternativeResource) + _, _ = color.New(color.FgCyan).Printf("alternative resource\n") } else { - color.New(color.Bold).Printf("%-55s", name) + _, _ = color.New(color.Bold).Printf("%-55s", name) c := color.FgGreen if reg.Scope == nuke.Organization { c = color.FgHiGreen } else if reg.Scope == nuke.Project { c = color.FgHiBlue } - color.New(c).Printf(fmt.Sprintf("%s\n", string(reg.Scope))) + _, _ = color.New(c).Printf(fmt.Sprintf("%s\n", string(reg.Scope))) // nolint: govet } } From 9bdce500da93bb593c0ed1c8e319af446f433e36 Mon Sep 17 00:00:00 2001 From: Erik Kristensen Date: Thu, 15 Aug 2024 17:31:19 -0600 Subject: [PATCH 5/5] chore: removing comments --- resources/compute-backend-service.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/resources/compute-backend-service.go b/resources/compute-backend-service.go index 58e02c9..0c8b9e8 100644 --- a/resources/compute-backend-service.go +++ b/resources/compute-backend-service.go @@ -71,8 +71,6 @@ func (l *ComputeBackendServiceLister) listGlobal(ctx context.Context, opts *nuke } } - // NOTE: you might have to modify the code below to actually work, this currently does not - // inspect the google go sdk instead is a jumping off point req := &computepb.ListBackendServicesRequest{ Project: *opts.Project, }