diff --git a/dashboard/tailwind.config.js b/dashboard/tailwind.config.js
index a90bf1875..236ac5349 100644
--- a/dashboard/tailwind.config.js
+++ b/dashboard/tailwind.config.js
@@ -6,51 +6,132 @@ module.exports = {
'./components/**/*.{js,ts,jsx,tsx}'
],
theme: {
- extend: {
- colors: {
- primary: '#008484',
- secondary: '#065555',
- komiser: {
- 100: '#F5FDFD',
- 120: '#e5f8f8',
- 130: '#E2F6F6',
- 150: '#DFF5F5',
- 200: '#CCF2F2',
- 300: '#99E5E5',
- 400: '#66D9D9',
- 500: '#33CCCC',
- 600: '#008484',
- 700: '#065555'
- },
- info: {
- 600: '#387BEB'
- },
- warning: {
- 100: '#FFF5DA',
- 600: '#EDC16B'
- },
- error: {
- 100: '#FFE8E8',
- 600: '#DE5E5E',
- 700: '#ae4242',
- 900: '#362033'
- },
- success: {
- 100: '#E1FFE3',
- 600: '#56BA5B'
- },
- black: {
- 100: '#F4F9F9',
- 130: '#F4F2F7',
- 150: '#F5F5F5',
- 170: '#EDEBEE',
- 200: '#CFD7D7',
- 300: '#95A3A3',
- 400: '#697372',
- 800: '#0C1717',
- 900: '#070011'
- }
+ colors: {
+ inherit: 'inherit',
+ transparent: 'transparent',
+ current: 'currentColor',
+ black: '#000000',
+ white: '#FFFFFF',
+ cyan: {
+ 50: '#ECFAFA',
+ 100: '#DFF5F5',
+ 200: '#CCF2F2',
+ 300: '#99E5E5',
+ 400: '#66D9D9',
+ 500: '#33CCCC',
+ 600: '#2AA7A7',
+ 700: '#208282',
+ 800: '#175D5D',
+ 900: '#0E3838',
+ 950: '#051313'
+ },
+ darkcyan: {
+ 50: '#EDFAFA',
+ 100: '#E2F6F6',
+ 200: '#B6EAEA',
+ 300: '#63CBCB',
+ 400: '#2EA8A8',
+ 500: '#008484',
+ 600: '#006D6E',
+ 700: '#065555',
+ 800: '#004344',
+ 900: '#002E2F',
+ 950: '#00191A'
+ },
+ gray: {
+ 50: '#F4F9F9',
+ 100: '#F4F2F7',
+ 200: '#EDEBEE',
+ 300: '#CFD7D7',
+ 400: '#B3BDBD',
+ 500: '#95A3A3',
+ 600: '#7F8B8B',
+ 700: '#697372',
+ 800: '#515959',
+ 900: '#3A4040',
+ 950: '#0C1717'
},
+ red: {
+ 50: '#FFE8E8',
+ 100: '#F7D1D1',
+ 200: '#F2BABA',
+ 300: '#EDA3A3',
+ 400: '#E37575',
+ 500: '#DE5E5E',
+ 600: '#BF4F4F',
+ 700: '#9D4040',
+ 800: '#7B3131',
+ 900: '#592222',
+ 950: '#371313'
+ },
+ green: {
+ 50: '#EEFDEE',
+ 100: '#E1FFE3',
+ 200: '#CAF5CA',
+ 300: '#A3E7A6',
+ 400: '#81CF84',
+ 500: '#56BA5B',
+ 600: '#489E4E',
+ 700: '#3B8240',
+ 800: '#2E6632',
+ 900: '#214A24',
+ 950: '#142E16'
+ },
+ orange: {
+ 50: '#FFF8EB',
+ 100: '#FFF5DA',
+ 200: '#FCE0AC',
+ 300: '#F6C879',
+ 400: '#ECAD4E',
+ 500: '#ED8F2B',
+ 600: '#D5721F',
+ 700: '#A85924',
+ 800: '#844B2A',
+ 900: '#664029',
+ 950: '#422D24'
+ },
+ blue: {
+ 50: '#E8EFFD',
+ 100: '#D4E4FF',
+ 200: '#ACC7F7',
+ 300: '#72A1F1',
+ 400: '#558EEE',
+ 500: '#387BEB',
+ 600: '#2F69C6',
+ 700: '#2656A3',
+ 800: '#1D4380',
+ 900: '#14305D',
+ 950: '#0B1D3A'
+ },
+ purple: {
+ 50: '#F7F6FE',
+ 100: '#EDE8FC',
+ 200: '#E0DBFB',
+ 300: '#C9BDF4',
+ 400: '#AF99EA',
+ 500: '#9470E0',
+ 600: '#8157C5',
+ 700: '#714DA6',
+ 800: '#5F4585',
+ 900: '#4B3966',
+ 950: '#372B4A'
+ },
+ background: {
+ DEFAULT: '#F2FFFF',
+ base: '#F2F7F8',
+ disabled: '#EFEDF1',
+ ds: '#F5F5F5' /* ds => design-system */
+ },
+ komiser: {
+ dark: '#009999'
+ }
+ },
+ boxShadow: {
+ right: '2px 4px 8px 0px rgba(105, 115, 114, 0.16)',
+ left: '-2px 4px 8px 0px rgba(105, 115, 114, 0.16)',
+ none: '0 0 #0000'
+ },
+ extend: {
fontFamily: {
sans: [
'Noto Sans',
diff --git a/docs/configuration/cloud-providers/civo.mdx b/docs/configuration/cloud-providers/civo.mdx
index 34047578a..886713146 100644
--- a/docs/configuration/cloud-providers/civo.mdx
+++ b/docs/configuration/cloud-providers/civo.mdx
@@ -83,7 +83,7 @@ token="yourProductionApiTokenHere"
file="komiser.db
```
-### Watch Civo integration tutorial
+### Watch the Civo integration tutorial
- - Compute Instances
- - Container Registries
- - Databases
- - Functions
- - Kubernetes Clusters
- - Load Balancers
- - Serverless Containers
+ - Alerts
+ - Images
+ - Compute Instances
+ - Kubernetes Clusters
+ - Kubernetes Nodes
+ - IPs
+ - Networks
+ - Vracks
+ - Projects
+ - SSHKeys
+ - SSLCertificates
+ - SSLGateways
+ - Storage Containers
+ - Storage Volumes
+ - Users
diff --git a/docs/mint.json b/docs/mint.json
index ba6c1ada4..fa36ecf5f 100644
--- a/docs/mint.json
+++ b/docs/mint.json
@@ -71,7 +71,7 @@
},
{
"group": "Configuration",
- "pages": [{"group": "Cloud Providers", "pages": ["configuration/cloud-providers/aws", "configuration/cloud-providers/azure", "configuration/cloud-providers/civo", "configuration/cloud-providers/digital-ocean", "configuration/cloud-providers/k8s", "configuration/cloud-providers/linode", "configuration/cloud-providers/tencent", "configuration/cloud-providers/scaleway", "configuration/cloud-providers/mongodb-atlas", "configuration/cloud-providers/gcp", "configuration/cloud-providers/oracle"]}]
+ "pages": [{"group": "Cloud Providers", "pages": ["configuration/cloud-providers/aws", "configuration/cloud-providers/azure", "configuration/cloud-providers/civo", "configuration/cloud-providers/digital-ocean", "configuration/cloud-providers/k8s", "configuration/cloud-providers/linode", "configuration/cloud-providers/tencent", "configuration/cloud-providers/scaleway", "configuration/cloud-providers/mongodb-atlas", "configuration/cloud-providers/gcp", "configuration/cloud-providers/oracle", "configuration/cloud-providers/ovh"]}]
},
{
"group": "Guides",
diff --git a/go.mod b/go.mod
index 7c46e0ce3..2c25dbf41 100644
--- a/go.mod
+++ b/go.mod
@@ -18,32 +18,33 @@ require (
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/sql/armsql v1.0.0
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.2.0
github.com/BurntSushi/toml v1.2.1
- github.com/aws/aws-sdk-go-v2 v1.21.0
- github.com/aws/aws-sdk-go-v2/config v1.18.27
- github.com/aws/aws-sdk-go-v2/service/apigateway v1.16.0
- github.com/aws/aws-sdk-go-v2/service/autoscaling v1.27.2
- github.com/aws/aws-sdk-go-v2/service/cloudfront v1.20.7
- github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.23.1
- github.com/aws/aws-sdk-go-v2/service/configservice v1.31.0
- github.com/aws/aws-sdk-go-v2/service/dynamodb v1.17.3
- github.com/aws/aws-sdk-go-v2/service/ec2 v1.50.0
- github.com/aws/aws-sdk-go-v2/service/ecr v1.17.20
- github.com/aws/aws-sdk-go-v2/service/ecs v1.18.26
- github.com/aws/aws-sdk-go-v2/service/efs v1.19.0
- github.com/aws/aws-sdk-go-v2/service/eks v1.21.4
- github.com/aws/aws-sdk-go-v2/service/elasticache v1.26.1
- github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.19.4
- github.com/aws/aws-sdk-go-v2/service/iam v1.18.9
- github.com/aws/aws-sdk-go-v2/service/kinesis v1.17.12
- github.com/aws/aws-sdk-go-v2/service/kms v1.18.18
- github.com/aws/aws-sdk-go-v2/service/lambda v1.23.4
- github.com/aws/aws-sdk-go-v2/service/pricing v1.20.0
- github.com/aws/aws-sdk-go-v2/service/rds v1.30.1
- github.com/aws/aws-sdk-go-v2/service/redshift v1.29.5
- github.com/aws/aws-sdk-go-v2/service/s3 v1.27.1
- github.com/aws/aws-sdk-go-v2/service/sns v1.18.3
- github.com/aws/aws-sdk-go-v2/service/sqs v1.19.12
- github.com/aws/aws-sdk-go-v2/service/sts v1.19.2
+ github.com/aws/aws-sdk-go-v2 v1.23.1
+ github.com/aws/aws-sdk-go-v2/config v1.25.3
+ github.com/aws/aws-sdk-go-v2/service/apigateway v1.20.2
+ github.com/aws/aws-sdk-go-v2/service/autoscaling v1.35.1
+ github.com/aws/aws-sdk-go-v2/service/cloudfront v1.30.2
+ github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.30.2
+ github.com/aws/aws-sdk-go-v2/service/codedeploy v1.20.3
+ github.com/aws/aws-sdk-go-v2/service/configservice v1.41.2
+ github.com/aws/aws-sdk-go-v2/service/dynamodb v1.25.2
+ github.com/aws/aws-sdk-go-v2/service/ec2 v1.136.0
+ github.com/aws/aws-sdk-go-v2/service/ecr v1.23.0
+ github.com/aws/aws-sdk-go-v2/service/ecs v1.33.1
+ github.com/aws/aws-sdk-go-v2/service/efs v1.23.2
+ github.com/aws/aws-sdk-go-v2/service/eks v1.33.1
+ github.com/aws/aws-sdk-go-v2/service/elasticache v1.32.2
+ github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.24.2
+ github.com/aws/aws-sdk-go-v2/service/iam v1.27.2
+ github.com/aws/aws-sdk-go-v2/service/kinesis v1.22.2
+ github.com/aws/aws-sdk-go-v2/service/kms v1.26.2
+ github.com/aws/aws-sdk-go-v2/service/lambda v1.48.0
+ github.com/aws/aws-sdk-go-v2/service/pricing v1.23.2
+ github.com/aws/aws-sdk-go-v2/service/rds v1.63.0
+ github.com/aws/aws-sdk-go-v2/service/redshift v1.37.0
+ github.com/aws/aws-sdk-go-v2/service/s3 v1.43.0
+ github.com/aws/aws-sdk-go-v2/service/sns v1.25.2
+ github.com/aws/aws-sdk-go-v2/service/sqs v1.28.1
+ github.com/aws/aws-sdk-go-v2/service/sts v1.25.3
github.com/civo/civogo v0.3.24
github.com/digitalocean/godo v1.97.0
github.com/elazarl/go-bindata-assetfs v1.0.1
@@ -83,7 +84,8 @@ require (
require (
cloud.google.com/go/longrunning v0.4.1 // indirect
github.com/apache/arrow/go/v11 v11.0.0 // indirect
- github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.12 // indirect
+ github.com/aws/aws-sdk-go-v2/service/codecommit v1.18.2 // indirect
+ github.com/aws/aws-sdk-go-v2/service/ssooidc v1.20.0 // indirect
github.com/gabriel-vasile/mimetype v1.4.2 // indirect
github.com/google/s2a-go v0.1.4 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc // indirect
@@ -99,24 +101,25 @@ require (
github.com/AzureAD/microsoft-authentication-library-for-go v0.8.1 // indirect
github.com/andybalholm/brotli v1.0.4 // indirect
github.com/apache/thrift v0.16.0 // indirect
- github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.10 // indirect
- github.com/aws/aws-sdk-go-v2/credentials v1.13.26 // indirect
- github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.4 // indirect
- github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41 // indirect
- github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35 // indirect
- github.com/aws/aws-sdk-go-v2/internal/ini v1.3.35 // indirect
- github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.5 // indirect
- github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.20.9
- github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.10 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.9 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.7.19 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.28 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.13.8 // indirect
- github.com/aws/aws-sdk-go-v2/service/opensearch v1.15.4
- github.com/aws/aws-sdk-go-v2/service/servicecatalog v1.18.2
- github.com/aws/aws-sdk-go-v2/service/ssm v1.36.2
- github.com/aws/aws-sdk-go-v2/service/sso v1.12.12 // indirect
- github.com/aws/smithy-go v1.14.2 // indirect
+ github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.1 // indirect
+ github.com/aws/aws-sdk-go-v2/credentials v1.16.2 // indirect
+ github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.4 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.4 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.4 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/ini v1.7.1 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.3 // indirect
+ github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.27.1
+ github.com/aws/aws-sdk-go-v2/service/codebuild v1.25.2
+ github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.1 // indirect
+ github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.3 // indirect
+ github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.8.3 // indirect
+ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.3 // indirect
+ github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.3 // indirect
+ github.com/aws/aws-sdk-go-v2/service/opensearch v1.25.2
+ github.com/aws/aws-sdk-go-v2/service/servicecatalog v1.24.2
+ github.com/aws/aws-sdk-go-v2/service/ssm v1.43.0
+ github.com/aws/aws-sdk-go-v2/service/sso v1.17.2 // indirect
+ github.com/aws/smithy-go v1.17.0 // indirect
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 // indirect
github.com/bytedance/sonic v1.9.1 // indirect
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
diff --git a/go.sum b/go.sum
index de970de02..96e5ba6b4 100644
--- a/go.sum
+++ b/go.sum
@@ -62,127 +62,104 @@ github.com/apache/arrow/go/v11 v11.0.0 h1:hqauxvFQxww+0mEU/2XHG6LT7eZternCZq+A5Y
github.com/apache/arrow/go/v11 v11.0.0/go.mod h1:Eg5OsL5H+e299f7u5ssuXsuHQVEGC4xei5aX110hRiI=
github.com/apache/thrift v0.16.0 h1:qEy6UW60iVOlUy+b9ZR0d5WzUWYGOo4HfopoyBaNmoY=
github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU=
-github.com/aws/aws-sdk-go-v2 v1.16.7/go.mod h1:6CpKuLXg2w7If3ABZCl/qZ6rEgwtjZTn4eAf4RcEyuw=
-github.com/aws/aws-sdk-go-v2 v1.17.1/go.mod h1:JLnGeGONAyi2lWXI1p0PCIOIy333JMVK1U7Hf0aRFLw=
-github.com/aws/aws-sdk-go-v2 v1.17.3/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw=
-github.com/aws/aws-sdk-go-v2 v1.17.5/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw=
-github.com/aws/aws-sdk-go-v2 v1.17.7/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw=
-github.com/aws/aws-sdk-go-v2 v1.17.8/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw=
-github.com/aws/aws-sdk-go-v2 v1.18.0/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw=
-github.com/aws/aws-sdk-go-v2 v1.18.1/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw=
-github.com/aws/aws-sdk-go-v2 v1.21.0 h1:gMT0IW+03wtYJhRqTVYn0wLzwdnK9sRMcxmtfGzRdJc=
-github.com/aws/aws-sdk-go-v2 v1.21.0/go.mod h1:/RfNgGmRxI+iFOB1OeJUyxiU+9s88k3pfHvDagGEp0M=
-github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.3/go.mod h1:gNsR5CaXKmQSSzrmGxmwmct/r+ZBfbxorAuXYsj/M5Y=
-github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.10 h1:dK82zF6kkPeCo8J1e+tGx4JdvDIQzj7ygIoLg8WMuGs=
-github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.10/go.mod h1:VeTZetY5KRJLuD/7fkQXMU6Mw7H5m/KP2J5Iy9osMno=
-github.com/aws/aws-sdk-go-v2/config v1.18.27 h1:Az9uLwmssTE6OGTpsFqOnaGpLnKDqNYOJzWuC6UAYzA=
-github.com/aws/aws-sdk-go-v2/config v1.18.27/go.mod h1:0My+YgmkGxeqjXZb5BYme5pc4drjTnM+x1GJ3zv42Nw=
-github.com/aws/aws-sdk-go-v2/credentials v1.13.26 h1:qmU+yhKmOCyujmuPY7tf5MxR/RKyZrOPO3V4DobiTUk=
-github.com/aws/aws-sdk-go-v2/credentials v1.13.26/go.mod h1:GoXt2YC8jHUBbA4jr+W3JiemnIbkXOfxSXcisUsZ3os=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.4 h1:LxK/bitrAr4lnh9LnIS6i7zWbCOdMsfzKFBI6LUCS0I=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.4/go.mod h1:E1hLXN/BL2e6YizK1zFlYd8vsfi2GTjbjBazinMmeaM=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.14/go.mod h1:kdjrMwHwrC3+FsKhNcCMJ7tUVj/8uSD5CZXeQ4wV6fM=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.25/go.mod h1:Zb29PYkf42vVYQY6pvSyJCJcFHlPIiY+YKdPtwnvMkY=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.27/go.mod h1:a1/UpzeyBBerajpnP5nGZa9mGzsBn5cOKxm6NWQsvoI=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.29/go.mod h1:Dip3sIGv485+xerzVv24emnjX5Sg88utCL8fwGmCeWg=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.31/go.mod h1:QT0BqUvX1Bh2ABdTGnjqEjvjzrCfIniM9Sc8zn9Yndo=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.32/go.mod h1:RudqOgadTWdcS3t/erPQo24pcVEoYyqj/kKW5Vya21I=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.33/go.mod h1:7i0PF1ME/2eUPFcjkVIwq+DOygHEoK92t5cDqNgYbIw=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.34/go.mod h1:wZpTEecJe0Btj3IYnDx/VlUzor9wm3fJHyvLpQF0VwY=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41 h1:22dGT7PneFMx4+b3pz7lMTRyN8ZKH7M2cW4GP9yUS2g=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41/go.mod h1:CrObHAuPneJBlfEJ5T3szXOUkLEThaGfvnhTf33buas=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.8/go.mod h1:ZIV8GYoC6WLBW5KGs+o4rsc65/ozd+eQ0L31XF5VDwk=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.19/go.mod h1:6Q0546uHDp421okhmmGfbxzq2hBqbXFNpi4k+Q1JnQA=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.21/go.mod h1:+Gxn8jYn5k9ebfHEqlhrMirFjSW0v0C9fI+KN5vk2kE=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.23/go.mod h1:mr6c4cHC+S/MMkrjtSlG4QA36kOznDep+0fga5L/fGQ=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.25/go.mod h1:zBHOPwhBc3FlQjQJE/D3IfPWiWaQmT06Vq9aNukDo0k=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.26/go.mod h1:vq86l7956VgFr0/FWQ2BWnK07QC3WYsepKzy33qqY5U=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.27/go.mod h1:UrHnn3QV/d0pBZ6QBAEQcqFLf8FAzLmoUfPVIueOvoM=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.28/go.mod h1:7VRpKQQedkfIEXb4k52I7swUnZP0wohVajJMRn3vsUw=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35 h1:SijA0mgjV8E+8G45ltVHs0fvKpTj8xmZJ3VwhGKtUSI=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35/go.mod h1:SJC1nEVVva1g3pHAIdCp7QsRIkMmLAgoDquQ9Rr8kYw=
-github.com/aws/aws-sdk-go-v2/internal/ini v1.3.35 h1:LWA+3kDM8ly001vJ1X1waCuLJdtTl48gwkPKWy9sosI=
-github.com/aws/aws-sdk-go-v2/internal/ini v1.3.35/go.mod h1:0Eg1YjxE0Bhn56lx+SHJwCzhW+2JGtizsrx+lCqrfm0=
-github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.5 h1:tEEHn+PGAxRVqMPEhtU8oCSW/1Ge3zP5nUgPrGQNUPs=
-github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.5/go.mod h1:aIwFF3dUk95ocCcA3zfk3nhz0oLkpzHFWuMp8l/4nNs=
-github.com/aws/aws-sdk-go-v2/service/apigateway v1.16.0 h1:INMBcLcEY29u2ZHMnva693HZNCwzO6v42d92HOCk5DA=
-github.com/aws/aws-sdk-go-v2/service/apigateway v1.16.0/go.mod h1:6UIKOkbI/NjVEszKrlgWDrlEPkpd2X+BBrzj0N/XTM4=
-github.com/aws/aws-sdk-go-v2/service/autoscaling v1.27.2 h1:Awy7wwCzPl3Iluer4ZiiV04wtMpr8LSpSIp6NGdRJDA=
-github.com/aws/aws-sdk-go-v2/service/autoscaling v1.27.2/go.mod h1:7LoDeLxZ3C6iVnr7YTMyHAjzV+XY01gYrTB2n6hfqAk=
-github.com/aws/aws-sdk-go-v2/service/cloudfront v1.20.7 h1:RoinUS4OHD/GFpXV2Jvu27xqDFLMx4ZFclo2WDw7D8Q=
-github.com/aws/aws-sdk-go-v2/service/cloudfront v1.20.7/go.mod h1:fV9PzXIIT2xUvf5KXEGToDYxEXcqDyO33SRfv2rAs/8=
-github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.23.1 h1:6VwY6q6RZwxZTTTXjDmS8qbeBKvWwp8ugMKCEBjdgWA=
-github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.23.1/go.mod h1:th8fks2kW4FFCUKUQenuEG9TEzMLVxeL0ckdJn/QVbI=
-github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.20.9 h1:sXs+JjIwgKA27t+5O8YgXl0cmZpEmctyDVO5y6cMdqA=
-github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.20.9/go.mod h1:CpWhQvomfSbbrfUhq9sq/w2x4wbkQOAqGJbcPS2AINA=
+github.com/aws/aws-sdk-go-v2 v1.23.1 h1:qXaFsOOMA+HsZtX8WoCa+gJnbyW7qyFFBlPqvTSzbaI=
+github.com/aws/aws-sdk-go-v2 v1.23.1/go.mod h1:i1XDttT4rnf6vxc9AuskLc6s7XBee8rlLilKlc03uAA=
+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.1 h1:ZY3108YtBNq96jNZTICHxN1gSBSbnvIdYwwqnvCV4Mc=
+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.1/go.mod h1:t8PYl/6LzdAqsU4/9tz28V/kU+asFePvpOMkdul0gEQ=
+github.com/aws/aws-sdk-go-v2/config v1.25.3 h1:E4m9LbwJOoncDNt3e9MPLbz/saxWcGUlZVBydydD6+8=
+github.com/aws/aws-sdk-go-v2/config v1.25.3/go.mod h1:tAByZy03nH5jcq0vZmkcVoo6tRzRHEwSFx3QW4NmDw8=
+github.com/aws/aws-sdk-go-v2/credentials v1.16.2 h1:0sdZ5cwfOAipTzZ7eOL0gw4LAhk/RZnTa16cDqIt8tg=
+github.com/aws/aws-sdk-go-v2/credentials v1.16.2/go.mod h1:sDdvGhXrSVT5yzBDR7qXz+rhbpiMpUYfF3vJ01QSdrc=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.4 h1:9wKDWEjwSnXZre0/O3+ZwbBl1SmlgWYBbrTV10X/H1s=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.4/go.mod h1:t4i+yGHMCcUNIX1x7YVYa6bH/Do7civ5I6cG/6PMfyA=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.4 h1:LAm3Ycm9HJfbSCd5I+wqC2S9Ej7FPrgr5CQoOljJZcE=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.4/go.mod h1:xEhvbJcyUf/31yfGSQBe01fukXwXJ0gxDp7rLfymWE0=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.4 h1:4GV0kKZzUxiWxSVpn/9gwR0g21NF1Jsyduzo9rHgC/Q=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.4/go.mod h1:dYvTNAggxDZy6y1AF7YDwXsPuHFy/VNEpEI/2dWK9IU=
+github.com/aws/aws-sdk-go-v2/internal/ini v1.7.1 h1:uR9lXYjdPX0xY+NhvaJ4dD8rpSRz5VY81ccIIoNG+lw=
+github.com/aws/aws-sdk-go-v2/internal/ini v1.7.1/go.mod h1:6fQQgfuGmw8Al/3M2IgIllycxV7ZW7WCdVSqfBeUiCY=
+github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.3 h1:lMwCXiWJlrtZot0NJTjbC8G9zl+V3i68gBTBBvDeEXA=
+github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.3/go.mod h1:5yzAuE9i2RkVAttBl8yxZgQr5OCq4D5yDnG7j9x2L0U=
+github.com/aws/aws-sdk-go-v2/service/apigateway v1.20.2 h1:OMs7hocjXtsg5GQms82w7sMX4XphhYtdtY10+HUOAUw=
+github.com/aws/aws-sdk-go-v2/service/apigateway v1.20.2/go.mod h1:4zAwZ67VQMYHhFLTasOY+G7DNEu+NEralz+ZLv05puA=
+github.com/aws/aws-sdk-go-v2/service/autoscaling v1.35.1 h1:2awLldJ8gWgB2lW/ywilHLgGzs06vYb69OjelFQVi2w=
+github.com/aws/aws-sdk-go-v2/service/autoscaling v1.35.1/go.mod h1:6NGYQhD5ky3wERvkhdhnFk7RKCg3nidKqE6DOEZgGgg=
+github.com/aws/aws-sdk-go-v2/service/cloudfront v1.30.2 h1:xlG5GdoesjSp4seJ1utZhhfF7spdP1o5WjViLY9VZzY=
+github.com/aws/aws-sdk-go-v2/service/cloudfront v1.30.2/go.mod h1:c66twOpDFT+AYQ8LloFNY+VbwcM9SqwrrdDboMKo6tg=
+github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.30.2 h1:T2YjSwrDkLg2laNjhIunyTbjy9Qzd/oZ+yQjrAhdIEA=
+github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.30.2/go.mod h1:GuVYdn7tWjbyp/YtZSM6VczmceUUQW6v8Yq98wJ9dWY=
+github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.27.1 h1:TNRPtVMfBVk24DL3on3aCSVaEbkLJkVewen+ag01Y5E=
+github.com/aws/aws-sdk-go-v2/service/cloudwatchlogs v1.27.1/go.mod h1:f+2AxSfO44KOyp+hsuDsjJyZmaOQxkcmGKRFExyHZdU=
+github.com/aws/aws-sdk-go-v2/service/codebuild v1.25.2 h1:7CP1OWPNk3sLQe5eockBr1l8N5prgO7oDuYO+bNNUrI=
+github.com/aws/aws-sdk-go-v2/service/codebuild v1.25.2/go.mod h1:lad97CcvLKXfU5uWV/9S3QrHUwk6CBDounq7rNs9K0E=
+github.com/aws/aws-sdk-go-v2/service/codecommit v1.18.2 h1:pf48DGYnBziCfCWzL6Cw4fapTNg4qn3NOkKAmds/Ig0=
+github.com/aws/aws-sdk-go-v2/service/codecommit v1.18.2/go.mod h1:JzDQFX7S1XLn5z4PnFBEUyTFgxzl7iEOQ1TPpl3OSAs=
github.com/aws/aws-sdk-go-v2/service/configservice v1.31.0 h1:3EaaGPAkwUHVbDKx/TCTAubBUqV8F6++5EaiSiXQgN0=
github.com/aws/aws-sdk-go-v2/service/configservice v1.31.0/go.mod h1:a+PVnn9VNPzPVUiXKXDHK21PSi/TzEKQNIsvSlVXgFY=
-github.com/aws/aws-sdk-go-v2/service/dynamodb v1.17.3 h1:2oB4ikNEMLaPtu6lbNFJyTSayBILvrOfa2VfOffcuvU=
-github.com/aws/aws-sdk-go-v2/service/dynamodb v1.17.3/go.mod h1:BiglbKCG56L8tmMnUEyEQo422BO9xnNR8vVHnOsByf8=
-github.com/aws/aws-sdk-go-v2/service/ec2 v1.50.0 h1:OMzx7qC+hOYJoQYq7RnYkjgCnKTsdIcEM08AUtsXH6A=
-github.com/aws/aws-sdk-go-v2/service/ec2 v1.50.0/go.mod h1:VoBcwURHnJVCWuXHdqVuG03i2lUlHJ5DTTqDSyCdEcc=
-github.com/aws/aws-sdk-go-v2/service/ecr v1.17.20 h1:nJnXfQggNZdrWz/0cm2ZGyddGK+FqTiN4QJGanzKZoY=
-github.com/aws/aws-sdk-go-v2/service/ecr v1.17.20/go.mod h1:kEVGiy2tACP0cegVqx4MrjsgQMSgrtgRq1fSa+Ix6F0=
-github.com/aws/aws-sdk-go-v2/service/ecs v1.18.26 h1:EHJAYkUnlFJ/KwuFMvUs/bPbb0DaqAI+gTfXxffTPZ0=
-github.com/aws/aws-sdk-go-v2/service/ecs v1.18.26/go.mod h1:NpR78BP2STxvF/R1GXLDM4gAEfjz68W/h0nC5b6Jk3s=
-github.com/aws/aws-sdk-go-v2/service/efs v1.19.0 h1:3kuyykZ/ttISUeCeCRa7QBLIknnerNNDYLrAzYAYVjM=
-github.com/aws/aws-sdk-go-v2/service/efs v1.19.0/go.mod h1:5MfwGfNzP7d86CrJKNCk7jawZLgBzO4N+X1q/4eYNN8=
-github.com/aws/aws-sdk-go-v2/service/eks v1.21.4 h1:qmKWieiIiYwD46GRD6nxFc1KsyR0ChGRid8emb7rDEY=
-github.com/aws/aws-sdk-go-v2/service/eks v1.21.4/go.mod h1:Th2+t6mwi0bZayXUOFOTuyWR2nwRUVcadDy4WGE8C2E=
-github.com/aws/aws-sdk-go-v2/service/elasticache v1.26.1 h1:QltBKgs6pvGwUDek4LQp51iKY3OVPr/3id24pmbAITM=
-github.com/aws/aws-sdk-go-v2/service/elasticache v1.26.1/go.mod h1:gnN6CtMag9be9XGXsMenh084NcSy5pO0hriEYz/TERk=
-github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.19.4 h1:INLSLWNqukSFWYJs8Ejw3jlTLHCUiqQ90tOVXBvhWTY=
-github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.19.4/go.mod h1:S4aoiQbEwpj9XAgW3Noe8jPArHjW+arHsO6L9t9xbLQ=
-github.com/aws/aws-sdk-go-v2/service/iam v1.18.9 h1:pVHvEz+KIsTwRKufwvGZr90X/YJ7swVshaBZNY4ESIY=
-github.com/aws/aws-sdk-go-v2/service/iam v1.18.9/go.mod h1:ARVuo+lYC2ibYxny/PKC3maaWKLAg25KSq0dkSkE2WE=
-github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.3/go.mod h1:gkb2qADY+OHaGLKNTYxMaQNacfeyQpZ4csDTQMeFmcw=
-github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.10 h1:dpiPHgmFstgkLG07KaYAewvuptq5kvo52xn7tVSrtrQ=
-github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.10/go.mod h1:9cBNUHI2aW4ho0A5T87O294iPDuuUOSIEDjnd1Lq/z0=
-github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.9 h1:gVv2vXOMqJeR4ZHHV32K7LElIJIIzyw/RU1b0lSfWTQ=
-github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.9/go.mod h1:EF5RLnD9l0xvEWwMRcktIS/dI6lF8lU5eV3B13k6sWo=
-github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.7.19 h1:V03dAtcAN4Qtly7H3/0B6m3t/cyl4FgyKFqK738fyJw=
-github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.7.19/go.mod h1:2WpVWFC5n4DYhjNXzObtge8xfgId9UP6GWca46KJFLo=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.8/go.mod h1:rDVhIMAX9N2r8nWxDUlbubvvaFMnfsm+3jAV7q+rpM4=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.19/go.mod h1:02CP6iuYP+IVnBX5HULVdSAku/85eHB2Y9EsFhrkEwU=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.28 h1:bkRyG4a929RCnpVSTvLM2j/T4ls015ZhhYApbmYs15s=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.28/go.mod h1:jj7znCIg05jXlaGBlFMGP8+7UN3VtCkRBG2spnmRQkU=
-github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.13.8 h1:TlN1UC39A0LUNoD51ubO5h32haznA+oVe15jO9O4Lj0=
-github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.13.8/go.mod h1:JlVwmWtT/1c5W+6oUsjXjAJ0iJZ+hlghdrDy/8JxGCU=
-github.com/aws/aws-sdk-go-v2/service/kinesis v1.17.12 h1:Xw1u2pxSAI9giCqYamjNZjFthuh2UjVct8mnv9X2XBo=
-github.com/aws/aws-sdk-go-v2/service/kinesis v1.17.12/go.mod h1:DDgzScy4XhYf4xgHP7xVNP3jjwMwMegzusy8awGN7YU=
-github.com/aws/aws-sdk-go-v2/service/kms v1.18.18 h1:VEj0VdYbmx12y3GKWSXm8hB/mPuSaYHnECRhokHy4Wo=
-github.com/aws/aws-sdk-go-v2/service/kms v1.18.18/go.mod h1:kZodDPTQjSH/qM6/OvyTfM5mms5JHB/EKYp5dhn/vI4=
-github.com/aws/aws-sdk-go-v2/service/lambda v1.23.4 h1:d1Olp+josNRAlrrtacghtos74rffKS6Mq5gEUBHfgHw=
-github.com/aws/aws-sdk-go-v2/service/lambda v1.23.4/go.mod h1:XiSHsT7z5ScD2AsTgfa1UEFQaAr53dHP1oWvaqSW6jQ=
-github.com/aws/aws-sdk-go-v2/service/opensearch v1.15.4 h1:56esBN+m4kQrGPHZfE60PqfXDryuv8oYbSAc0aU1F10=
-github.com/aws/aws-sdk-go-v2/service/opensearch v1.15.4/go.mod h1:2Azx9xDn2nuX+yv4wTR7MO5EYqJNXt2fUC/axUV67qI=
-github.com/aws/aws-sdk-go-v2/service/pricing v1.20.0 h1:x5gKeerbKIQ/tdhmaAGNpivSfmb+p2rdt0wyjCGz+4Q=
-github.com/aws/aws-sdk-go-v2/service/pricing v1.20.0/go.mod h1:JjpnqJdEW/5An429Ou+5Kb3UkwjXv16gRD2ZdGA2Gw8=
-github.com/aws/aws-sdk-go-v2/service/rds v1.30.1 h1:/B3GswjV+ScqZSZnhs3NMLwvVFXb1/aQL/elQwo0CMM=
-github.com/aws/aws-sdk-go-v2/service/rds v1.30.1/go.mod h1:wPFe1Cj3nZWmNWKKdkXw961l1dJheTZQ5JjPImqbMuI=
-github.com/aws/aws-sdk-go-v2/service/redshift v1.29.5 h1:ufl4QI+6Vuxg6E8UOFVy+CeCtXS+gBMb00oTh2qSPco=
-github.com/aws/aws-sdk-go-v2/service/redshift v1.29.5/go.mod h1:U8V+thdAH44/2weiprIA0JyDWa2XBov58TtdjCTTpc8=
-github.com/aws/aws-sdk-go-v2/service/s3 v1.27.1 h1:OKQIQ0QhEBmGr2LfT952meIZz3ujrPYnxH+dO/5ldnI=
-github.com/aws/aws-sdk-go-v2/service/s3 v1.27.1/go.mod h1:NffjpNsMUFXp6Ok/PahrktAncoekWrywvmIK83Q2raE=
-github.com/aws/aws-sdk-go-v2/service/servicecatalog v1.18.2 h1:YQ7/6UE9h6dIHMjHFr4xXLMZDfhwtQUea/D18XAjhcE=
-github.com/aws/aws-sdk-go-v2/service/servicecatalog v1.18.2/go.mod h1:2WSFojT6r+rKQ+3kn3Ss3MGlbR6BwdfsUsk4L/Lrn14=
-github.com/aws/aws-sdk-go-v2/service/sns v1.18.3 h1:cEFSVrEnbjco0dkcejv7wand04RFaexRdEwbNd1zxCo=
-github.com/aws/aws-sdk-go-v2/service/sns v1.18.3/go.mod h1:2cPUjR63iE9MPMPJtSyzYmsTFCNrN/Xi9j0v9BL5OU0=
-github.com/aws/aws-sdk-go-v2/service/sqs v1.19.12 h1:uiG0JUqcL9w3IUu+tLG/BWJSUUhTgzkMVGThM2wDES4=
-github.com/aws/aws-sdk-go-v2/service/sqs v1.19.12/go.mod h1:DKX/7/ZiAzHO6p6AhArnGdrV4r+d461weby8KeVtvC4=
-github.com/aws/aws-sdk-go-v2/service/ssm v1.36.2 h1:+5UPNk83hM6HZiHOhZa4hbFIzkVPVsSeaPGWE4lmodk=
-github.com/aws/aws-sdk-go-v2/service/ssm v1.36.2/go.mod h1:bE/ToM6K9X5ETp8zaLZf+4JxzXrnk2fNcDoYil4aetg=
-github.com/aws/aws-sdk-go-v2/service/sso v1.12.12 h1:nneMBM2p79PGWBQovYO/6Xnc2ryRMw3InnDJq1FHkSY=
-github.com/aws/aws-sdk-go-v2/service/sso v1.12.12/go.mod h1:HuCOxYsF21eKrerARYO6HapNeh9GBNq7fius2AcwodY=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.12 h1:2qTR7IFk7/0IN/adSFhYu9Xthr0zVFTgBrmPldILn80=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.12/go.mod h1:E4VrHCPzmVB/KFXtqBGKb3c8zpbNBgKe3fisDNLAW5w=
-github.com/aws/aws-sdk-go-v2/service/sts v1.19.2 h1:XFJ2Z6sNUUcAz9poj+245DMkrHE4h2j5I9/xD50RHfE=
-github.com/aws/aws-sdk-go-v2/service/sts v1.19.2/go.mod h1:dp0yLPsLBOi++WTxzCjA/oZqi6NPIhoR+uF7GeMU9eg=
-github.com/aws/smithy-go v1.12.0/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
-github.com/aws/smithy-go v1.13.4/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
-github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
-github.com/aws/smithy-go v1.14.2 h1:MJU9hqBGbvWZdApzpvoF2WAIJDbtjK2NDJSiJP7HblQ=
-github.com/aws/smithy-go v1.14.2/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
+github.com/aws/aws-sdk-go-v2/service/codedeploy v1.20.3 h1:rGqIKTmugpZ7lEzXTmbiPg45Id09UQpB2YoGaE0J6T4=
+github.com/aws/aws-sdk-go-v2/service/codedeploy v1.20.3/go.mod h1:A7i1lQClkFz09enKv5WYKb8a2lf9QeeI1s9dNiym3hg=
+github.com/aws/aws-sdk-go-v2/service/configservice v1.41.2 h1:WJt83aWld986AxwJpzE0eDqQi18a/PwZ36y7DqENYdk=
+github.com/aws/aws-sdk-go-v2/service/configservice v1.41.2/go.mod h1:wIuYBSC8G7HHXK/T6YO0t/m463ssur9aMLnycNvKXqQ=
+github.com/aws/aws-sdk-go-v2/service/dynamodb v1.25.2 h1:O6ff5PwwgQ7QkL/XA0H+0U0mWwjkYaP9tHvbr0Ptqak=
+github.com/aws/aws-sdk-go-v2/service/dynamodb v1.25.2/go.mod h1:kuVxCbsxbP/h6YTT2BfOj4s/bwXYsG3C/8Qn9gO5QJY=
+github.com/aws/aws-sdk-go-v2/service/ec2 v1.136.0 h1:nZPVFkGojUUJupKJzaCKE07LaFDO3Tto1U69F8JipsI=
+github.com/aws/aws-sdk-go-v2/service/ec2 v1.136.0/go.mod h1:xYJZQIo/YZxEbeBxUYRQJTCJ924EuKtDfrhVx76yzOE=
+github.com/aws/aws-sdk-go-v2/service/ecr v1.23.0 h1:GXzeEnCzcbBTCyXunqPApkkya0+lUBFB3IvyH8383pY=
+github.com/aws/aws-sdk-go-v2/service/ecr v1.23.0/go.mod h1:/ioOZzYo15EL987AAdsmYWKpta8Rokosh5Iax9B6DPg=
+github.com/aws/aws-sdk-go-v2/service/ecs v1.33.1 h1:TozC9N4YIy3daojW5RoutyW0dIBCQvTtMXKDM7cSvW8=
+github.com/aws/aws-sdk-go-v2/service/ecs v1.33.1/go.mod h1:twzaZjxQJVIuJBlk/PCQ/El6rwvxcCQ2uiO/5BguYHg=
+github.com/aws/aws-sdk-go-v2/service/efs v1.23.2 h1:+Bal9jUaFSjYjiJkoE0eiqCvmknCboCvSCESznszsrQ=
+github.com/aws/aws-sdk-go-v2/service/efs v1.23.2/go.mod h1:raG1iL/vkJ+4nVtmrc4PgmwH0JgZp5NBOcWFf9GBRJY=
+github.com/aws/aws-sdk-go-v2/service/eks v1.33.1 h1:zRB7CTeejJmBpdpzrBkciNLMpg8T+06EvGA/H4Kkvcw=
+github.com/aws/aws-sdk-go-v2/service/eks v1.33.1/go.mod h1:23btAyMrfTvG2zh/3+CZJ1c2eYWiVWP6tPRJwC67sk8=
+github.com/aws/aws-sdk-go-v2/service/elasticache v1.32.2 h1:3V4GHH05PtNsDjXlKXVbIw0vSjSNUQoPQEtILns4BMs=
+github.com/aws/aws-sdk-go-v2/service/elasticache v1.32.2/go.mod h1:p5/Vq+5NiyqnyQyH5JVK3lrHDygbiQiqdCNaDT018I8=
+github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.24.2 h1:4pOJ+1slB9s36rDsHvnbUd93SZZ4+Z/FdX5f1TKOiQk=
+github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.24.2/go.mod h1:NatT0jYQo0MfgZnIX8ReNWnbsl4rbQjuS+uci1KNkck=
+github.com/aws/aws-sdk-go-v2/service/iam v1.27.2 h1:Z3a5I5kKGsuVW4kbrtHVnLGUHpEpo19zFyo6dzP2WCM=
+github.com/aws/aws-sdk-go-v2/service/iam v1.27.2/go.mod h1:CYRyr95Q57xVvrcKJu3vw4jVVCZhmY1SyugM+EWXlzI=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.1 h1:rpkF4n0CyFcrJUG/rNNohoTmhtWlFTRI4BsZOh9PvLs=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.1/go.mod h1:l9ymW25HOqymeU2m1gbUQ3rUIsTwKs8gYHXkqDQUhiI=
+github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.3 h1:xbwRyCy7kXrOj89iIKLB6NfE2WCpP9HoKyk8dMDvnIQ=
+github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.3/go.mod h1:R+/S1O4TYpcktbVwddeOYg+uwUfLhADP2S/x4QwsCTM=
+github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.8.3 h1:AakYQhCXteXSRHebRAGDKf/P+3kmEWwiyE3Um/d0ecg=
+github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.8.3/go.mod h1:wt1Ib9UX0A8fxifnkYLrv7RAlg+ziPR8Fo0NqzuJkHI=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.3 h1:kJOolE8xBAD13xTCgOakByZkyP4D/owNmvEiioeUNAg=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.3/go.mod h1:Owv1I59vaghv1Ax8zz8ELY8DN7/Y0rGS+WWAmjgi950=
+github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.3 h1:KV0z2RDc7euMtg8aUT1czv5p29zcLlXALNFsd3jkkEc=
+github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.3/go.mod h1:KZgs2ny8HsxRIRbDwgvJcHHBZPOzQr/+NtGwnP+w2ec=
+github.com/aws/aws-sdk-go-v2/service/kinesis v1.22.2 h1:kav618UT9BH3kNhEXWo5YPphWBzcxLHp/VKmgXXqM34=
+github.com/aws/aws-sdk-go-v2/service/kinesis v1.22.2/go.mod h1:pDjJUf6yTIRPsSLDdVI2oR6A9Iv12P1NOL5KaJ9AeRI=
+github.com/aws/aws-sdk-go-v2/service/kms v1.26.2 h1:cd6qixgKwsu4i1oT14brIYx9qZaXX/9CFrBncxYr7OY=
+github.com/aws/aws-sdk-go-v2/service/kms v1.26.2/go.mod h1:SBBCPcfsuNkvXnW4sDzoPNeow6xOaU6g2xTfj1dfxo4=
+github.com/aws/aws-sdk-go-v2/service/lambda v1.48.0 h1:Q1ajPX+B64b/OyxuaSDBjqOMmVrpNLhPfTFghpU783k=
+github.com/aws/aws-sdk-go-v2/service/lambda v1.48.0/go.mod h1:80TuTBIg7+OWOOA85SdMfvV393HGXPwqoepFTQn6/qA=
+github.com/aws/aws-sdk-go-v2/service/opensearch v1.25.2 h1:HwLseszN4BX8bbibqfBs+oyAHWb2vFoYQi0P5tPq+74=
+github.com/aws/aws-sdk-go-v2/service/opensearch v1.25.2/go.mod h1:QHhacFfqWSaj5/N+gPShKlg0V+hsvhnCCtH575tsW3E=
+github.com/aws/aws-sdk-go-v2/service/pricing v1.23.2 h1:EMIsBk8ansD+Fs5Fdl3iFL0Cf9Y++68psfK4Owhbga8=
+github.com/aws/aws-sdk-go-v2/service/pricing v1.23.2/go.mod h1:UzuiXD0+X63VTTdvwpSwyhBhnwAygld8Ll/gMT6kAOI=
+github.com/aws/aws-sdk-go-v2/service/rds v1.63.0 h1:Mb6mn6mRfTpI2WEZkLmmJ7jtiPHKzwJ8otzUA5rIq+o=
+github.com/aws/aws-sdk-go-v2/service/rds v1.63.0/go.mod h1:C73+OVOdaMZNc/Z8PhnLoArk6mCqxkiqfgmCrvNrDDM=
+github.com/aws/aws-sdk-go-v2/service/redshift v1.37.0 h1:h/XTWZNIkMTNZFjnmIRHr+p6BT9esREmacvlXTNfK5w=
+github.com/aws/aws-sdk-go-v2/service/redshift v1.37.0/go.mod h1:s7X0SVket1YMB6VRzilG1F8k/wQSMgfCL5BYA5d7C04=
+github.com/aws/aws-sdk-go-v2/service/s3 v1.43.0 h1:cwTuq73Tv6jtNJIMgTDKsih5O2YsVrKGpg20H98tbmo=
+github.com/aws/aws-sdk-go-v2/service/s3 v1.43.0/go.mod h1:NXRKkiRF+erX2hnybnVU660cYT5/KChRD4iUgJ97cI8=
+github.com/aws/aws-sdk-go-v2/service/servicecatalog v1.24.2 h1:rJPd7ZUwHSJnUUMwZYYQ5diw2En+8Glx9XAwNSyGyTM=
+github.com/aws/aws-sdk-go-v2/service/servicecatalog v1.24.2/go.mod h1:qzLepVh/MNcSxD5o88id3Rt83nBOKDlV6lAMjoSCAHk=
+github.com/aws/aws-sdk-go-v2/service/sns v1.25.2 h1:KVWf3qQZxqX0ogLvRfq+uEXfbRexe7Y2JBRQ0TQaxwQ=
+github.com/aws/aws-sdk-go-v2/service/sns v1.25.2/go.mod h1:gOyDaoXeBT5gwG0DL+5RFQ7cddwLOablLJdXmWSWdyU=
+github.com/aws/aws-sdk-go-v2/service/sqs v1.28.1 h1:rfX6lA1EW6Q5zT7Cl8RG90hCdWY4VVaobnmbgl5OIy0=
+github.com/aws/aws-sdk-go-v2/service/sqs v1.28.1/go.mod h1:gGmF6hmPsYUf/kgaSw7BOqLpdVNSfMzGSar61OX812w=
+github.com/aws/aws-sdk-go-v2/service/ssm v1.43.0 h1:hrbnozmShh4n0ar1Zk7Ol0ST1sep1ECGHLwbdbfAFRo=
+github.com/aws/aws-sdk-go-v2/service/ssm v1.43.0/go.mod h1:5tNnH3XNzW2Jo3TXQjKKH/Ivx7gRsz9nGcvGhq6YPRA=
+github.com/aws/aws-sdk-go-v2/service/sso v1.17.2 h1:V47N5eKgVZoRSvx2+RQ0EpAEit/pqOhqeSQFiS4OFEQ=
+github.com/aws/aws-sdk-go-v2/service/sso v1.17.2/go.mod h1:/pE21vno3q1h4bbhUOEi+6Zu/aT26UK2WKkDXd+TssQ=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.20.0 h1:/XiEU7VIFcVWRDQLabyrSjBoKIm8UkYgsvWDuFW8Img=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.20.0/go.mod h1:dWqm5G767qwKPuayKfzm4rjzFmVjiBFbOJrpSPnAMDs=
+github.com/aws/aws-sdk-go-v2/service/sts v1.25.3 h1:M2w4kiMGJCCM6Ljmmx/l6mmpfa3gPJVpBencfnsgvqs=
+github.com/aws/aws-sdk-go-v2/service/sts v1.25.3/go.mod h1:4EqRHDCKP78hq3zOnmFXu5k0j4bXbRFfCh/zQ6KnEfQ=
+github.com/aws/smithy-go v1.17.0 h1:wWJD7LX6PBV6etBUwO0zElG0nWN9rUhp0WdYeHSHAaI=
+github.com/aws/smithy-go v1.17.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE=
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY=
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
@@ -318,7 +295,6 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
-github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
diff --git a/internal/internal.go b/internal/internal.go
index f8554dcab..388488bf3 100644
--- a/internal/internal.go
+++ b/internal/internal.go
@@ -236,27 +236,27 @@ func triggerFetchingWorfklow(ctx context.Context, client providers.ProviderClien
case "AWS":
aws.FetchResources(ctx, client, regions, db, telemetry, analytics, wp)
case "DigitalOcean":
- do.FetchResources(ctx, client, db, telemetry, analytics)
+ do.FetchResources(ctx, client, db, telemetry, analytics, wp)
case "OCI":
- oci.FetchResources(ctx, client, db, telemetry, analytics)
+ oci.FetchResources(ctx, client, db, telemetry, analytics, wp)
case "Civo":
- civo.FetchResources(ctx, client, db, telemetry, analytics)
+ civo.FetchResources(ctx, client, db, telemetry, analytics, wp)
case "Kubernetes":
- k8s.FetchResources(ctx, client, db, telemetry, analytics)
+ k8s.FetchResources(ctx, client, db, telemetry, analytics, wp)
case "Linode":
- linode.FetchResources(ctx, client, db, telemetry, analytics)
+ linode.FetchResources(ctx, client, db, telemetry, analytics, wp)
case "Tencent":
- tencent.FetchResources(ctx, client, db, telemetry, analytics)
+ tencent.FetchResources(ctx, client, db, telemetry, analytics, wp)
case "Azure":
azure.FetchResources(ctx, client, db, telemetry, analytics, wp)
case "Scaleway":
- scaleway.FetchResources(ctx, client, db, telemetry, analytics)
+ scaleway.FetchResources(ctx, client, db, telemetry, analytics, wp)
case "MongoDBAtlas":
mongodbatlas.FetchResources(ctx, client, db, telemetry, analytics, wp)
case "GCP":
gcp.FetchResources(ctx, client, db, telemetry, analytics, wp)
case "OVH":
- ovh.FetchResources(ctx, client, db, telemetry, analytics)
+ ovh.FetchResources(ctx, client, db, telemetry, analytics, wp)
}
}
diff --git a/providers/aws/aws.go b/providers/aws/aws.go
index aa0ba4338..1e03cee43 100644
--- a/providers/aws/aws.go
+++ b/providers/aws/aws.go
@@ -11,6 +11,9 @@ import (
"github.com/tailwarden/komiser/providers/aws/apigateway"
"github.com/tailwarden/komiser/providers/aws/cloudfront"
"github.com/tailwarden/komiser/providers/aws/cloudwatch"
+ "github.com/tailwarden/komiser/providers/aws/codecommit"
+ "github.com/tailwarden/komiser/providers/aws/codebuild"
+ "github.com/tailwarden/komiser/providers/aws/codedeploy"
"github.com/tailwarden/komiser/providers/aws/dynamodb"
"github.com/tailwarden/komiser/providers/aws/ec2"
"github.com/tailwarden/komiser/providers/aws/ecr"
@@ -97,6 +100,9 @@ func listOfSupportedServices() []providers.FetchDataFunction {
ec2.VpcPeeringConnections,
kinesis.Streams,
redshift.EventSubscriptions,
+ codecommit.Repositories,
+ codebuild.BuildProjects,
+ codedeploy.DeploymentGroups,
}
}
@@ -115,6 +121,7 @@ func FetchResources(ctx context.Context, client providers.ProviderClient, region
Name: client.Name,
}
for _, fetchResources := range listOfSupportedServices() {
+ fetchResources := fetchResources
wp.SubmitTask(func() {
resources, err := fetchResources(ctx, client)
if err != nil {
diff --git a/providers/aws/codebuild/projects.go b/providers/aws/codebuild/projects.go
new file mode 100644
index 000000000..14d8d584e
--- /dev/null
+++ b/providers/aws/codebuild/projects.go
@@ -0,0 +1,68 @@
+package codebuild
+
+import (
+ "context"
+ "fmt"
+ "time"
+
+ log "github.com/sirupsen/logrus"
+
+ "github.com/aws/aws-sdk-go-v2/aws"
+
+ "github.com/aws/aws-sdk-go-v2/service/codebuild"
+ "github.com/aws/aws-sdk-go-v2/service/sts"
+ "github.com/tailwarden/komiser/models"
+ "github.com/tailwarden/komiser/providers"
+)
+
+func BuildProjects(ctx context.Context, client providers.ProviderClient) ([]models.Resource, error) {
+ var listProjectsParams codebuild.ListProjectsInput
+ resources := make([]models.Resource, 0)
+ codebuildClient := codebuild.NewFromConfig(*client.AWSClient)
+ stsClient := sts.NewFromConfig(*client.AWSClient)
+ stsOutput, err := stsClient.GetCallerIdentity(ctx, &sts.GetCallerIdentityInput{})
+ if err != nil {
+ return resources, err
+ }
+
+ accountId := stsOutput.Account
+
+ for {
+ output, err := codebuildClient.ListProjects(ctx, &listProjectsParams)
+ if err != nil {
+ return resources, err
+ }
+
+ for _, project := range output.Projects {
+ resourceArn := fmt.Sprintf("arn:aws:codebuild:%s:%s:project/%s", client.AWSClient.Region, *accountId, project)
+ tags := make([]models.Tag, 0)
+
+ resources = append(resources, models.Resource{
+ Provider: "AWS",
+ Account: client.Name,
+ Service: "CodeBuild",
+ ResourceId: resourceArn,
+ Region: client.AWSClient.Region,
+ Name: project,
+ Tags: tags,
+ FetchedAt: time.Now(),
+ Link: fmt.Sprintf("https://%s.console.aws.amazon.com/codesuite/codebuild/%s/projects/%s/details?region=%s", client.AWSClient.Region, *accountId, project, client.AWSClient.Region),
+ })
+ }
+ if aws.ToString(output.NextToken) == "" {
+ break
+ }
+
+ listProjectsParams.NextToken = output.NextToken
+ }
+
+ log.WithFields(log.Fields{
+ "provider": "AWS",
+ "account": client.Name,
+ "region": client.AWSClient.Region,
+ "service": "CodeBuild",
+ "resources": len(resources),
+ }).Info("Fetched resources")
+
+ return resources, nil
+}
diff --git a/providers/aws/codecommit/repositories.go b/providers/aws/codecommit/repositories.go
new file mode 100644
index 000000000..e33b02e9b
--- /dev/null
+++ b/providers/aws/codecommit/repositories.go
@@ -0,0 +1,69 @@
+package codecommit
+
+import (
+ "context"
+ "fmt"
+ "time"
+
+ log "github.com/sirupsen/logrus"
+
+ "github.com/aws/aws-sdk-go-v2/aws"
+ "github.com/aws/aws-sdk-go-v2/service/codecommit"
+ "github.com/tailwarden/komiser/models"
+ "github.com/tailwarden/komiser/providers"
+)
+
+func Repositories(ctx context.Context, client providers.ProviderClient) ([]models.Resource, error) {
+ var listRepoParams codecommit.ListRepositoriesInput
+ resources := make([]models.Resource, 0)
+ codecommitClient := codecommit.NewFromConfig(*client.AWSClient)
+
+ for {
+ output, err := codecommitClient.ListRepositories(ctx, &listRepoParams)
+ if err != nil {
+ return resources, err
+ }
+
+ for _, repository := range output.Repositories {
+ outputTags, err := codecommitClient.ListTagsForResource(ctx, &codecommit.ListTagsForResourceInput{
+ ResourceArn: repository.RepositoryId,
+ })
+
+ tags := make([]models.Tag, 0)
+ if err == nil {
+ for _, tag := range outputTags.Tags {
+ tags = append(tags, models.Tag{
+ Key: tag,
+ Value: outputTags.Tags[tag],
+ })
+ }
+ }
+
+ resources = append(resources, models.Resource{
+ Provider: "AWS",
+ Account: client.Name,
+ Service: "CodeCommit",
+ ResourceId: *repository.RepositoryId,
+ Region: client.AWSClient.Region,
+ Name: *repository.RepositoryName,
+ Tags: tags,
+ FetchedAt: time.Now(),
+ Link: fmt.Sprintf("https://%s.console.aws.amazon.com/codesuite/codecommit/repositories/%s/browse?region=%s", client.AWSClient.Region, *repository.RepositoryName, client.AWSClient.Region),
+ })
+ }
+ if aws.ToString(output.NextToken) == "" {
+ break
+ }
+
+ listRepoParams.NextToken = output.NextToken
+ }
+
+ log.WithFields(log.Fields{
+ "provider": "AWS",
+ "account": client.Name,
+ "region": client.AWSClient.Region,
+ "service": "CodeCommit",
+ "resources": len(resources),
+ }).Info("Fetched resources")
+ return resources, nil
+}
diff --git a/providers/aws/codedeploy/deployment_groups.go b/providers/aws/codedeploy/deployment_groups.go
new file mode 100644
index 000000000..af214b5e7
--- /dev/null
+++ b/providers/aws/codedeploy/deployment_groups.go
@@ -0,0 +1,77 @@
+package codedeploy
+
+import (
+ "context"
+ "fmt"
+ "github.com/aws/aws-sdk-go-v2/aws"
+ "github.com/aws/aws-sdk-go-v2/service/codedeploy"
+ "github.com/aws/aws-sdk-go-v2/service/sts"
+ log "github.com/sirupsen/logrus"
+ "github.com/tailwarden/komiser/models"
+ "github.com/tailwarden/komiser/providers"
+ "time"
+)
+
+func DeploymentGroups(ctx context.Context, client providers.ProviderClient) ([]models.Resource, error) {
+ var listApplicationParams codedeploy.ListApplicationsInput
+ resources := make([]models.Resource, 0)
+ codedeployClient := codedeploy.NewFromConfig(*client.AWSClient)
+ stsClient := sts.NewFromConfig(*client.AWSClient)
+ stsOutput, err := stsClient.GetCallerIdentity(ctx, &sts.GetCallerIdentityInput{})
+ if err != nil {
+ return resources, err
+ }
+ accountId := stsOutput.Account
+
+ for {
+ output, err := codedeployClient.ListApplications(ctx, &listApplicationParams)
+ if err != nil {
+ return resources, err
+ }
+ for _, application := range output.Applications {
+ var listDeploymentGroupParams codedeploy.ListDeploymentGroupsInput
+ listDeploymentGroupParams.ApplicationName = &application
+ for {
+ listDeploymentGroupOutput, err := codedeployClient.ListDeploymentGroups(ctx, &listDeploymentGroupParams)
+ if err != nil {
+ return resources, nil
+ }
+ for _, deploymentGroup := range listDeploymentGroupOutput.DeploymentGroups {
+ // logic for arn
+ resourceArn := fmt.Sprintf("arn:aws:codedeploy:%s:%s:deploymentgroup:%s/%s", client.AWSClient.Region, *accountId, application, deploymentGroup)
+ tags := make([]models.Tag, 0)
+ resources = append(resources, models.Resource{
+ Provider: "AWS",
+ Account: client.Name,
+ Service: "CodeDeploy",
+ ResourceId: resourceArn,
+ Region: client.AWSClient.Region,
+ Name: deploymentGroup,
+ Tags: tags,
+ FetchedAt: time.Now(),
+ })
+ }
+ if aws.ToString(listDeploymentGroupOutput.NextToken) == "" {
+ break
+ }
+ listDeploymentGroupParams.NextToken = listDeploymentGroupOutput.NextToken
+ }
+
+ }
+
+ if aws.ToString(output.NextToken) == "" {
+ break
+ }
+ listApplicationParams.NextToken = output.NextToken
+ }
+
+ log.WithFields(log.Fields{
+ "provider": "AWS",
+ "account": client.Name,
+ "region": client.AWSClient.Region,
+ "service": "CodeDeploy",
+ "resources": len(resources),
+ }).Info("Fetched resources")
+
+ return resources, nil
+}
diff --git a/providers/aws/ec2/instances.go b/providers/aws/ec2/instances.go
index 4bc3cbac9..6efb0c11a 100644
--- a/providers/aws/ec2/instances.go
+++ b/providers/aws/ec2/instances.go
@@ -174,9 +174,9 @@ func Instances(ctx context.Context, client providers.ProviderClient) ([]models.R
}
func getEC2Relations(inst *etype.Instance, resourceArn string) []models.Link {
-
+
var rel []models.Link
- // Get associated security groups
+ // Get associated security groups
for _, sgrp := range inst.SecurityGroups {
rel = append(rel, models.Link{
ResourceID: *sgrp.GroupId,
@@ -197,21 +197,25 @@ func getEC2Relations(inst *etype.Instance, resourceArn string) []models.Link {
})
}
- // Get associated VPC
- rel = append(rel, models.Link{
- ResourceID: fmt.Sprintf("%s:vpc/%s", resourceArn, *inst.VpcId),
- Type: "VPC",
- Name: *inst.VpcId,
- Relation: "USES",
- })
-
- // Get associated Subnet
- rel = append(rel, models.Link{
- ResourceID: fmt.Sprintf("%s:subnet/%s", resourceArn, *inst.SubnetId),
- Name: *inst.SubnetId,
- Type: "Subnet",
- Relation: "USES",
- })
+ if inst.VpcId != nil {
+ // Get associated VPC
+ rel = append(rel, models.Link{
+ ResourceID: fmt.Sprintf("%s:vpc/%s", resourceArn, *inst.VpcId),
+ Type: "VPC",
+ Name: *inst.VpcId,
+ Relation: "USES",
+ })
+ }
+
+ if inst.SubnetId != nil {
+ // Get associated Subnet
+ rel = append(rel, models.Link{
+ ResourceID: fmt.Sprintf("%s:subnet/%s", resourceArn, *inst.SubnetId),
+ Name: *inst.SubnetId,
+ Type: "Subnet",
+ Relation: "USES",
+ })
+ }
// Get associated Keypair
if inst.KeyName != nil {
diff --git a/providers/azure/azure.go b/providers/azure/azure.go
index ee014ae78..144faa566 100644
--- a/providers/azure/azure.go
+++ b/providers/azure/azure.go
@@ -32,6 +32,7 @@ func listOfSupportedServices() []providers.FetchDataFunction {
func FetchResources(ctx context.Context, client providers.ProviderClient, db *bun.DB, telemetry bool, analytics utils.Analytics, wp *providers.WorkerPool) {
for _, fetchResources := range listOfSupportedServices() {
+ fetchResources := fetchResources
wp.SubmitTask(func() {
resources, err := fetchResources(ctx, client)
if err != nil {
diff --git a/providers/civo/civo.go b/providers/civo/civo.go
index 3a64e690f..663f730d3 100644
--- a/providers/civo/civo.go
+++ b/providers/civo/civo.go
@@ -28,8 +28,9 @@ func listOfSupportedServices() []providers.FetchDataFunction {
}
}
-func FetchResources(ctx context.Context, client providers.ProviderClient, db *bun.DB, telemetry bool, analytics utils.Analytics) {
+func FetchResources(ctx context.Context, client providers.ProviderClient, db *bun.DB, telemetry bool, analytics utils.Analytics, wp *providers.WorkerPool) {
for _, fetchResources := range listOfSupportedServices() {
+ fetchResources := fetchResources
regions, err := client.CivoClient.ListRegions()
if err != nil {
log.Printf("[%s][Civo] %s", client.Name, err)
@@ -43,23 +44,25 @@ func FetchResources(ctx context.Context, client providers.ProviderClient, db *bu
client.CivoClient = clientWithRegion
- resources, err := fetchResources(ctx, client)
- if err != nil {
- log.Printf("[%s][Civo] %s", client.Name, err)
- } else {
- for _, resource := range resources {
- _, err := db.NewInsert().Model(&resource).On("CONFLICT (resource_id) DO UPDATE").Set("cost = EXCLUDED.cost, relations=EXCLUDED.relations").Exec(context.Background())
- if err != nil {
- log.WithError(err).Errorf("db trigger failed")
+ wp.SubmitTask(func() {
+ resources, err := fetchResources(ctx, client)
+ if err != nil {
+ log.Printf("[%s][Civo] %s", client.Name, err)
+ } else {
+ for _, resource := range resources {
+ _, err := db.NewInsert().Model(&resource).On("CONFLICT (resource_id) DO UPDATE").Set("cost = EXCLUDED.cost, relations=EXCLUDED.relations").Exec(context.Background())
+ if err != nil {
+ log.WithError(err).Errorf("db trigger failed")
+ }
+ }
+ if telemetry {
+ analytics.TrackEvent("discovered_resources", map[string]interface{}{
+ "provider": "Civo",
+ "resources": len(resources),
+ })
}
}
- if telemetry {
- analytics.TrackEvent("discovered_resources", map[string]interface{}{
- "provider": "Civo",
- "resources": len(resources),
- })
- }
- }
+ })
}
}
}
diff --git a/providers/digitalocean/digitalocean.go b/providers/digitalocean/digitalocean.go
index b9eef09b4..60fb91308 100644
--- a/providers/digitalocean/digitalocean.go
+++ b/providers/digitalocean/digitalocean.go
@@ -30,25 +30,28 @@ func listOfSupportedServices() []providers.FetchDataFunction {
}
}
-func FetchResources(ctx context.Context, client providers.ProviderClient, db *bun.DB, telemetry bool, analytics utils.Analytics) {
+func FetchResources(ctx context.Context, client providers.ProviderClient, db *bun.DB, telemetry bool, analytics utils.Analytics, wp *providers.WorkerPool) {
for _, fetchResources := range listOfSupportedServices() {
- resources, err := fetchResources(ctx, client)
- if err != nil {
- log.Printf("[%s][DigitalOcean] %s", client.Name, err)
- } else {
- for _, resource := range resources {
- _, err := db.NewInsert().Model(&resource).On("CONFLICT (resource_id) DO UPDATE").Set("cost = EXCLUDED.cost").Exec(context.Background())
- if err != nil {
- logrus.WithError(err).Errorf("db trigger failed")
- }
+ fetchResources := fetchResources
+ wp.SubmitTask(func() {
+ resources, err := fetchResources(ctx, client)
+ if err != nil {
+ log.Printf("[%s][DigitalOcean] %s", client.Name, err)
+ } else {
+ for _, resource := range resources {
+ _, err := db.NewInsert().Model(&resource).On("CONFLICT (resource_id) DO UPDATE").Set("cost = EXCLUDED.cost").Exec(context.Background())
+ if err != nil {
+ logrus.WithError(err).Errorf("db trigger failed")
+ }
+ }
+ if telemetry {
+ analytics.TrackEvent("discovered_resources", map[string]interface{}{
+ "provider": "DigitalOcean",
+ "resources": len(resources),
+ })
+ }
}
- if telemetry {
- analytics.TrackEvent("discovered_resources", map[string]interface{}{
- "provider": "DigitalOcean",
- "resources": len(resources),
- })
- }
- }
+ })
}
}
diff --git a/providers/gcp/gcp.go b/providers/gcp/gcp.go
index 4d4c14ba1..794288def 100644
--- a/providers/gcp/gcp.go
+++ b/providers/gcp/gcp.go
@@ -41,6 +41,7 @@ func listOfSupportedServices() []providers.FetchDataFunction {
func FetchResources(ctx context.Context, client providers.ProviderClient, db *bun.DB, telemetry bool, analytics utils.Analytics, wp *providers.WorkerPool) {
for _, fetchResources := range listOfSupportedServices() {
+ fetchResources := fetchResources
wp.SubmitTask(func() {
resources, err := fetchResources(ctx, client)
if err != nil {
diff --git a/providers/k8s/k8s.go b/providers/k8s/k8s.go
index 60226960b..b8c792d91 100644
--- a/providers/k8s/k8s.go
+++ b/providers/k8s/k8s.go
@@ -28,24 +28,27 @@ func listOfSupportedServices() []providers.FetchDataFunction {
}
}
-func FetchResources(ctx context.Context, client providers.ProviderClient, db *bun.DB, telemetry bool, analytics utils.Analytics) {
+func FetchResources(ctx context.Context, client providers.ProviderClient, db *bun.DB, telemetry bool, analytics utils.Analytics, wp *providers.WorkerPool) {
for _, fetchResources := range listOfSupportedServices() {
- resources, err := fetchResources(ctx, client)
- if err != nil {
- log.Printf("[%s][K8s] %s", client.Name, err)
- } else {
- for _, resource := range resources {
- _, err = db.NewInsert().Model(&resource).On("CONFLICT (resource_id) DO UPDATE").Set("cost = EXCLUDED.cost").Exec(context.Background())
- if err != nil {
- logrus.WithError(err).Errorf("db trigger failed")
+ fetchResources := fetchResources
+ wp.SubmitTask(func() {
+ resources, err := fetchResources(ctx, client)
+ if err != nil {
+ log.Printf("[%s][K8s] %s", client.Name, err)
+ } else {
+ for _, resource := range resources {
+ _, err = db.NewInsert().Model(&resource).On("CONFLICT (resource_id) DO UPDATE").Set("cost = EXCLUDED.cost").Exec(context.Background())
+ if err != nil {
+ logrus.WithError(err).Errorf("db trigger failed")
+ }
+ }
+ if telemetry {
+ analytics.TrackEvent("discovered_resources", map[string]interface{}{
+ "provider": "K8s",
+ "resources": len(resources),
+ })
}
}
- if telemetry {
- analytics.TrackEvent("discovered_resources", map[string]interface{}{
- "provider": "K8s",
- "resources": len(resources),
- })
- }
- }
+ })
}
}
diff --git a/providers/linode/linode.go b/providers/linode/linode.go
index 0d6eaa3c7..bed1d7430 100644
--- a/providers/linode/linode.go
+++ b/providers/linode/linode.go
@@ -9,11 +9,11 @@ import (
"github.com/tailwarden/komiser/providers"
"github.com/tailwarden/komiser/providers/linode/compute"
+ "github.com/tailwarden/komiser/providers/linode/lkepool"
"github.com/tailwarden/komiser/providers/linode/networking"
"github.com/tailwarden/komiser/providers/linode/postgres"
"github.com/tailwarden/komiser/providers/linode/sql"
"github.com/tailwarden/komiser/providers/linode/storage"
- "github.com/tailwarden/komiser/providers/linode/lkepool"
"github.com/uptrace/bun"
)
@@ -32,24 +32,27 @@ func listOfSupportedServices() []providers.FetchDataFunction {
}
}
-func FetchResources(ctx context.Context, client providers.ProviderClient, db *bun.DB, telemetry bool, analytics utils.Analytics) {
+func FetchResources(ctx context.Context, client providers.ProviderClient, db *bun.DB, telemetry bool, analytics utils.Analytics, wp *providers.WorkerPool) {
for _, fetchResources := range listOfSupportedServices() {
- resources, err := fetchResources(ctx, client)
- if err != nil {
- log.Printf("[%s][Linode] %s", client.Name, err)
- } else {
- for _, resource := range resources {
- _, err := db.NewInsert().Model(&resource).On("CONFLICT (resource_id) DO UPDATE").Set("cost = EXCLUDED.cost").Exec(context.Background())
- if err != nil {
- logrus.WithError(err).Errorf("db trigger failed")
+ fetchResources := fetchResources
+ wp.SubmitTask(func() {
+ resources, err := fetchResources(ctx, client)
+ if err != nil {
+ log.Printf("[%s][Linode] %s", client.Name, err)
+ } else {
+ for _, resource := range resources {
+ _, err := db.NewInsert().Model(&resource).On("CONFLICT (resource_id) DO UPDATE").Set("cost = EXCLUDED.cost").Exec(context.Background())
+ if err != nil {
+ logrus.WithError(err).Errorf("db trigger failed")
+ }
+ }
+ if telemetry {
+ analytics.TrackEvent("discovered_resources", map[string]interface{}{
+ "provider": "Linode",
+ "resources": len(resources),
+ })
}
}
- if telemetry {
- analytics.TrackEvent("discovered_resources", map[string]interface{}{
- "provider": "Linode",
- "resources": len(resources),
- })
- }
- }
+ })
}
}
diff --git a/providers/mongodbatlas/mongodbatlas.go b/providers/mongodbatlas/mongodbatlas.go
index 7f5b846f8..ffca9b32e 100644
--- a/providers/mongodbatlas/mongodbatlas.go
+++ b/providers/mongodbatlas/mongodbatlas.go
@@ -19,6 +19,7 @@ func listOfSupportedServices() []providers.FetchDataFunction {
func FetchResources(ctx context.Context, client providers.ProviderClient, db *bun.DB, telemetry bool, analytics utils.Analytics, wp *providers.WorkerPool) {
for _, fetchResources := range listOfSupportedServices() {
+ fetchResources := fetchResources
wp.SubmitTask(func() {
resources, err := fetchResources(ctx, client)
if err != nil {
diff --git a/providers/oci/oci.go b/providers/oci/oci.go
index 3ea31bb2e..601932cfb 100644
--- a/providers/oci/oci.go
+++ b/providers/oci/oci.go
@@ -27,24 +27,27 @@ func listOfSupportedServices() []providers.FetchDataFunction {
}
}
-func FetchResources(ctx context.Context, client providers.ProviderClient, db *bun.DB, telemetry bool, analytics utils.Analytics) {
+func FetchResources(ctx context.Context, client providers.ProviderClient, db *bun.DB, telemetry bool, analytics utils.Analytics, wp *providers.WorkerPool) {
for _, fetchResources := range listOfSupportedServices() {
- resources, err := fetchResources(ctx, client)
- if err != nil {
- log.Printf("[%s][OCI] %s", client.Name, err)
- } else {
- for _, resource := range resources {
- _, err = db.NewInsert().Model(&resource).On("CONFLICT (resource_id) DO UPDATE").Set("cost = EXCLUDED.cost").Exec(context.Background())
- if err != nil {
- logrus.WithError(err).Errorf("db trigger failed")
+ fetchResources := fetchResources
+ wp.SubmitTask(func() {
+ resources, err := fetchResources(ctx, client)
+ if err != nil {
+ log.Printf("[%s][OCI] %s", client.Name, err)
+ } else {
+ for _, resource := range resources {
+ _, err = db.NewInsert().Model(&resource).On("CONFLICT (resource_id) DO UPDATE").Set("cost = EXCLUDED.cost").Exec(context.Background())
+ if err != nil {
+ logrus.WithError(err).Errorf("db trigger failed")
+ }
+ }
+ if telemetry {
+ analytics.TrackEvent("discovered_resources", map[string]interface{}{
+ "provider": "OCI",
+ "resources": len(resources),
+ })
}
}
- if telemetry {
- analytics.TrackEvent("discovered_resources", map[string]interface{}{
- "provider": "OCI",
- "resources": len(resources),
- })
- }
- }
+ })
}
}
diff --git a/providers/ovh/ovh.go b/providers/ovh/ovh.go
index 057658f17..ddbd6d1d1 100644
--- a/providers/ovh/ovh.go
+++ b/providers/ovh/ovh.go
@@ -42,24 +42,27 @@ func listOfSupportedServices() []providers.FetchDataFunction {
}
}
-func FetchResources(ctx context.Context, client providers.ProviderClient, db *bun.DB, telemetry bool, analytics utils.Analytics) {
- for _, fetchResources := range listOfSupportedServices() {
- resources, err := fetchResources(ctx, client)
- if err != nil {
- log.Printf("[%s][OVH] %s", client.Name, err)
- } else {
- for _, resource := range resources {
- _, err := db.NewInsert().Model(&resource).On("CONFLICT (resource_id) DO UPDATE").Set("cost = EXCLUDED.cost").Exec(context.Background())
- if err != nil {
- logrus.WithError(err).Errorf("db trigger failed")
+func FetchResources(ctx context.Context, client providers.ProviderClient, db *bun.DB, telemetry bool, analytics utils.Analytics, wp *providers.WorkerPool) {
+ wp.SubmitTask(func() {
+ for _, fetchResources := range listOfSupportedServices() {
+ fetchResources := fetchResources
+ resources, err := fetchResources(ctx, client)
+ if err != nil {
+ log.Printf("[%s][OVH] %s", client.Name, err)
+ } else {
+ for _, resource := range resources {
+ _, err := db.NewInsert().Model(&resource).On("CONFLICT (resource_id) DO UPDATE").Set("cost = EXCLUDED.cost").Exec(context.Background())
+ if err != nil {
+ logrus.WithError(err).Errorf("db trigger failed")
+ }
+ }
+ if telemetry {
+ analytics.TrackEvent("discovered_resources", map[string]interface{}{
+ "provider": "OVH",
+ "resources": len(resources),
+ })
}
- }
- if telemetry {
- analytics.TrackEvent("discovered_resources", map[string]interface{}{
- "provider": "OVH",
- "resources": len(resources),
- })
}
}
- }
+ })
}
diff --git a/providers/providers.go b/providers/providers.go
index 1ad5cda48..c3ad76191 100644
--- a/providers/providers.go
+++ b/providers/providers.go
@@ -12,14 +12,14 @@ import (
"github.com/oracle/oci-go-sdk/common"
"github.com/ovh/go-ovh/ovh"
"github.com/scaleway/scaleway-sdk-go/scw"
- . "github.com/tailwarden/komiser/models"
+ "github.com/tailwarden/komiser/models"
tccvm "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm/v20170312"
"go.mongodb.org/atlas/mongodbatlas"
"golang.org/x/oauth2/google"
"k8s.io/client-go/kubernetes"
)
-type FetchDataFunction func(ctx context.Context, client ProviderClient) ([]Resource, error)
+type FetchDataFunction func(ctx context.Context, client ProviderClient) ([]models.Resource, error)
type ProviderClient struct {
AWSClient *aws.Config
diff --git a/providers/scaleway/scaleway.go b/providers/scaleway/scaleway.go
index 212e94038..779945f86 100644
--- a/providers/scaleway/scaleway.go
+++ b/providers/scaleway/scaleway.go
@@ -28,24 +28,27 @@ func listOfSupportedServices() []providers.FetchDataFunction {
}
}
-func FetchResources(ctx context.Context, client providers.ProviderClient, db *bun.DB, telemetry bool, analytics utils.Analytics) {
- for _, fetchResources := range listOfSupportedServices() {
- resources, err := fetchResources(ctx, client)
- if err != nil {
- log.Printf("[%s][Scaleway] %s", client.Name, err)
- } else {
- for _, resource := range resources {
- _, err := db.NewInsert().Model(&resource).On("CONFLICT (resource_id) DO UPDATE").Set("cost = EXCLUDED.cost").Exec(context.Background())
- if err != nil {
- logrus.WithError(err).Errorf("db trigger failed")
+func FetchResources(ctx context.Context, client providers.ProviderClient, db *bun.DB, telemetry bool, analytics utils.Analytics, wp *providers.WorkerPool) {
+ wp.SubmitTask(func() {
+ for _, fetchResources := range listOfSupportedServices() {
+ fetchResources := fetchResources
+ resources, err := fetchResources(ctx, client)
+ if err != nil {
+ log.Printf("[%s][Scaleway] %s", client.Name, err)
+ } else {
+ for _, resource := range resources {
+ _, err := db.NewInsert().Model(&resource).On("CONFLICT (resource_id) DO UPDATE").Set("cost = EXCLUDED.cost").Exec(context.Background())
+ if err != nil {
+ logrus.WithError(err).Errorf("db trigger failed")
+ }
+ }
+ if telemetry {
+ analytics.TrackEvent("discovered_resources", map[string]interface{}{
+ "provider": "Scaleway",
+ "resources": len(resources),
+ })
}
- }
- if telemetry {
- analytics.TrackEvent("discovered_resources", map[string]interface{}{
- "provider": "Scaleway",
- "resources": len(resources),
- })
}
}
- }
+ })
}
diff --git a/providers/tencent/tencent.go b/providers/tencent/tencent.go
index 6075964cc..38b3327d5 100644
--- a/providers/tencent/tencent.go
+++ b/providers/tencent/tencent.go
@@ -3,7 +3,6 @@ package tencent
import (
"context"
- "github.com/sirupsen/logrus"
log "github.com/sirupsen/logrus"
"github.com/tailwarden/komiser/providers"
@@ -20,8 +19,9 @@ func listOfSupportedServices() []providers.FetchDataFunction {
}
}
-func FetchResources(ctx context.Context, client providers.ProviderClient, db *bun.DB, telemetry bool, analytics utils.Analytics) {
+func FetchResources(ctx context.Context, client providers.ProviderClient, db *bun.DB, telemetry bool, analytics utils.Analytics, wp *providers.WorkerPool) {
for _, fetchResources := range listOfSupportedServices() {
+ fetchResources := fetchResources
regions, err := client.TencentClient.DescribeRegionsWithContext(ctx, tccvm.NewDescribeRegionsRequest())
if err != nil {
log.Errorf("[%s][Tencent] Couldn't fetch the list of regions: %s", client.Name, err)
@@ -37,23 +37,25 @@ func FetchResources(ctx context.Context, client providers.ProviderClient, db *bu
client.TencentClient = clientWithRegion
- resources, err := fetchResources(ctx, client)
- if err != nil {
- log.Printf("[%s][Tencent] %s", client.Name, err)
- } else {
- for _, resource := range resources {
- _, err := db.NewInsert().Model(&resource).On("CONFLICT (resource_id) DO UPDATE").Set("cost = EXCLUDED.cost").Exec(context.Background())
- if err != nil {
- logrus.WithError(err).Error("db trigger failed")
+ wp.SubmitTask(func() {
+ resources, err := fetchResources(ctx, client)
+ if err != nil {
+ log.Printf("[%s][Tencent] %s", client.Name, err)
+ } else {
+ for _, resource := range resources {
+ _, err := db.NewInsert().Model(&resource).On("CONFLICT (resource_id) DO UPDATE").Set("cost = EXCLUDED.cost").Exec(context.Background())
+ if err != nil {
+ log.WithError(err).Error("db trigger failed")
+ }
+ }
+ if telemetry {
+ analytics.TrackEvent("discovered_resources", map[string]interface{}{
+ "provider": "Tencent",
+ "resources": len(resources),
+ })
}
}
- if telemetry {
- analytics.TrackEvent("discovered_resources", map[string]interface{}{
- "provider": "Tencent",
- "resources": len(resources),
- })
- }
- }
+ })
}
}
}