Skip to content

Commit 1d0f147

Browse files
K8s (#698)
1 parent 5b6420a commit 1d0f147

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+1558
-340
lines changed

go.mod

+19-1
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,32 @@ require (
3838
)
3939

4040
require (
41+
github.com/aws/aws-cloud-map-mcs-controller-for-k8s v0.3.1 // indirect
42+
github.com/aws/aws-sdk-go-v2 v1.17.1 // indirect
43+
github.com/aws/aws-sdk-go-v2/config v1.18.3 // indirect
44+
github.com/aws/aws-sdk-go-v2/credentials v1.13.3 // indirect
45+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.19 // indirect
46+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.25 // indirect
47+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.19 // indirect
48+
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.26 // indirect
49+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.19 // indirect
50+
github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.18.2 // indirect
51+
github.com/aws/aws-sdk-go-v2/service/sso v1.11.25 // indirect
52+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.8 // indirect
53+
github.com/aws/aws-sdk-go-v2/service/sts v1.17.5 // indirect
54+
github.com/aws/smithy-go v1.13.4 // indirect
4155
github.com/dprotaso/go-yit v0.0.0-20191028211022-135eb7262960 // indirect
56+
github.com/fsnotify/fsnotify v1.6.0 // indirect
57+
github.com/go-logr/zapr v1.2.3 // indirect
58+
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
4259
github.com/gomodule/redigo v2.0.0+incompatible // indirect
4360
github.com/kr/pretty v0.3.0 // indirect
4461
github.com/mattn/go-sqlite3 v2.0.3+incompatible // indirect
4562
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect
4663
github.com/rivo/uniseg v0.4.4 // indirect
4764
golang.org/x/mod v0.9.0 // indirect
4865
golang.org/x/oauth2 v0.4.0 // indirect
66+
gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect
4967
)
5068

5169
replace github.com/smacker/go-tree-sitter => github.com/klothoplatform/go-tree-sitter v0.1.1
@@ -162,7 +180,7 @@ require (
162180
k8s.io/kubectl v0.26.0 // indirect
163181
k8s.io/utils v0.0.0-20230115233650-391b47cb4029 // indirect
164182
oras.land/oras-go v1.2.2 // indirect
165-
sigs.k8s.io/controller-runtime v0.9.7 // indirect
183+
sigs.k8s.io/controller-runtime v0.12.3 // indirect
166184
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
167185
sigs.k8s.io/kustomize/api v0.12.1 // indirect
168186
sigs.k8s.io/kustomize/kyaml v0.13.9 // indirect

go.sum

+40
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,34 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPd
8888
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
8989
github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535 h1:4daAzAu0S6Vi7/lbWECcX0j45yZReDZ56BQsrVBOEEY=
9090
github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg=
91+
github.com/aws/aws-cloud-map-mcs-controller-for-k8s v0.3.1 h1:Wyf4AF/6cqAwpDakp9h04C6B7ZjJswoOrk7K/nYW0DE=
92+
github.com/aws/aws-cloud-map-mcs-controller-for-k8s v0.3.1/go.mod h1:W9/23Xko4n06L7TU+ZC4/3bjXm+JmxJ9b56q87lTcno=
93+
github.com/aws/aws-sdk-go-v2 v1.17.1 h1:02c72fDJr87N8RAC2s3Qu0YuvMRZKNZJ9F+lAehCazk=
94+
github.com/aws/aws-sdk-go-v2 v1.17.1/go.mod h1:JLnGeGONAyi2lWXI1p0PCIOIy333JMVK1U7Hf0aRFLw=
95+
github.com/aws/aws-sdk-go-v2/config v1.18.3 h1:3kfBKcX3votFX84dm00U8RGA1sCCh3eRMOGzg5dCWfU=
96+
github.com/aws/aws-sdk-go-v2/config v1.18.3/go.mod h1:BYdrbeCse3ZnOD5+2/VE/nATOK8fEUpBtmPMdKSyhMU=
97+
github.com/aws/aws-sdk-go-v2/credentials v1.13.3 h1:ur+FHdp4NbVIv/49bUjBW+FE7e57HOo03ELodttmagk=
98+
github.com/aws/aws-sdk-go-v2/credentials v1.13.3/go.mod h1:/rOMmqYBcFfNbRPU0iN9IgGqD5+V2yp3iWNmIlz0wI4=
99+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.19 h1:E3PXZSI3F2bzyj6XxUXdTIfvp425HHhwKsFvmzBwHgs=
100+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.19/go.mod h1:VihW95zQpeKQWVPGkwT+2+WJNQV8UXFfMTWdU6VErL8=
101+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.25 h1:nBO/RFxeq/IS5G9Of+ZrgucRciie2qpLy++3UGZ+q2E=
102+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.25/go.mod h1:Zb29PYkf42vVYQY6pvSyJCJcFHlPIiY+YKdPtwnvMkY=
103+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.19 h1:oRHDrwCTVT8ZXi4sr9Ld+EXk7N/KGssOr2ygNeojEhw=
104+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.19/go.mod h1:6Q0546uHDp421okhmmGfbxzq2hBqbXFNpi4k+Q1JnQA=
105+
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.26 h1:Mza+vlnZr+fPKFKRq/lKGVvM6B/8ZZmNdEopOwSQLms=
106+
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.26/go.mod h1:Y2OJ+P+MC1u1VKnavT+PshiEuGPyh/7DqxoDNij4/bg=
107+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.19 h1:GE25AWCdNUPh9AOJzI9KIJnja7IwUc1WyUqz/JTyJ/I=
108+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.19/go.mod h1:02CP6iuYP+IVnBX5HULVdSAku/85eHB2Y9EsFhrkEwU=
109+
github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.18.2 h1:TBmvwADPIuBUEhWPrLsrE0VEchnSgM/wzL33MiuPjhs=
110+
github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.18.2/go.mod h1:/J9zJYj/yOhbRTj9EawVe32mkrrFcxCDo5vr5OulEMI=
111+
github.com/aws/aws-sdk-go-v2/service/sso v1.11.25 h1:GFZitO48N/7EsFDt8fMa5iYdmWqkUDDB3Eje6z3kbG0=
112+
github.com/aws/aws-sdk-go-v2/service/sso v1.11.25/go.mod h1:IARHuzTXmj1C0KS35vboR0FeJ89OkEy1M9mWbK2ifCI=
113+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.8 h1:jcw6kKZrtNfBPJkaHrscDOZoe5gvi9wjudnxvozYFJo=
114+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.13.8/go.mod h1:er2JHN+kBY6FcMfcBBKNGCT3CarImmdFzishsqBmSRI=
115+
github.com/aws/aws-sdk-go-v2/service/sts v1.17.5 h1:60SJ4lhvn///8ygCzYy2l53bFW/Q15bVfyjyAWo6zuw=
116+
github.com/aws/aws-sdk-go-v2/service/sts v1.17.5/go.mod h1:bXcN3koeVYiJcdDU89n3kCYILob7Y34AeLopUbZgLT4=
117+
github.com/aws/smithy-go v1.13.4 h1:/RN2z1txIJWeXeOkzX+Hk/4Uuvv7dWtCjbmVJcrskyk=
118+
github.com/aws/smithy-go v1.13.4/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
91119
github.com/beevik/etree v1.1.0 h1:T0xke/WvNtMoCqgzPhkX2r4rjY3GDZFi+FjpRZY2Jbs=
92120
github.com/beevik/etree v1.1.0/go.mod h1:r8Aw8JqVegEf0w2fDnATrX9VpkMcyFeM0FhwO62wh+A=
93121
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
@@ -208,6 +236,7 @@ github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoD
208236
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
209237
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
210238
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
239+
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
211240
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
212241
github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
213242
github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
@@ -226,9 +255,12 @@ github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7
226255
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
227256
github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
228257
github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
258+
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
229259
github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
230260
github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
231261
github.com/go-logr/zapr v0.4.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk=
262+
github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A=
263+
github.com/go-logr/zapr v1.2.3/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4=
232264
github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
233265
github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
234266
github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE=
@@ -277,6 +309,7 @@ github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4er
277309
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
278310
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
279311
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
312+
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
280313
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
281314
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
282315
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
@@ -322,6 +355,7 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
322355
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
323356
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
324357
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
358+
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
325359
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
326360
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
327361
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
@@ -412,6 +446,8 @@ github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLf
412446
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
413447
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
414448
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
449+
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
450+
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
415451
github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g=
416452
github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ=
417453
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
@@ -981,6 +1017,7 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc
9811017
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
9821018
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
9831019
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
1020+
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
9841021
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
9851022
golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
9861023
golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
@@ -1080,6 +1117,7 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
10801117
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
10811118
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
10821119
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
1120+
gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY=
10831121
gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY=
10841122
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
10851123
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
@@ -1290,6 +1328,8 @@ sigs.k8s.io/aws-load-balancer-controller v0.0.0-20221203001353-edeb4f1c1312 h1:i
12901328
sigs.k8s.io/aws-load-balancer-controller v0.0.0-20221203001353-edeb4f1c1312/go.mod h1:hBE6D6ynfG7d9uqW/skddaDF50/3YeM4SU6156ktXrI=
12911329
sigs.k8s.io/controller-runtime v0.9.7 h1:DlHMlAyLpgEITVvNsuZqMbf8/sJl9HirmCZIeR5H9mQ=
12921330
sigs.k8s.io/controller-runtime v0.9.7/go.mod h1:nExcHcQ2zvLMeoO9K7rOesGCmgu32srN5SENvpAEbGA=
1331+
sigs.k8s.io/controller-runtime v0.12.3 h1:FCM8xeY/FI8hoAfh/V4XbbYMY20gElh9yh+A98usMio=
1332+
sigs.k8s.io/controller-runtime v0.12.3/go.mod h1:qKsk4WE6zW2Hfj0G4v10EnNB2jMG1C+NTb8h+DwCoU0=
12931333
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
12941334
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
12951335
sigs.k8s.io/kustomize/api v0.12.1 h1:7YM7gW3kYBwtKvoY216ZzY+8hM+lV53LUayghNRJ0vM=

pkg/cli/plugins.go

+15-3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
envvar "github.com/klothoplatform/klotho/pkg/env_var"
1111
execunit "github.com/klothoplatform/klotho/pkg/exec_unit"
1212
"github.com/klothoplatform/klotho/pkg/infra/iac2"
13+
knowledgebase "github.com/klothoplatform/klotho/pkg/knowledge_base"
1314
"github.com/klothoplatform/klotho/pkg/lang/csharp"
1415
csRuntimes "github.com/klothoplatform/klotho/pkg/lang/csharp/runtimes"
1516
"github.com/klothoplatform/klotho/pkg/lang/golang"
@@ -19,6 +20,9 @@ import (
1920
"github.com/klothoplatform/klotho/pkg/lang/python"
2021
pyRuntimes "github.com/klothoplatform/klotho/pkg/lang/python/runtimes"
2122
"github.com/klothoplatform/klotho/pkg/multierr"
23+
"github.com/klothoplatform/klotho/pkg/provider"
24+
"github.com/klothoplatform/klotho/pkg/provider/kubernetes"
25+
kubernetesKb "github.com/klothoplatform/klotho/pkg/provider/kubernetes/knowledgebase"
2226
"github.com/klothoplatform/klotho/pkg/provider/providers"
2327
staticunit "github.com/klothoplatform/klotho/pkg/static_unit"
2428
"github.com/klothoplatform/klotho/pkg/visualizer"
@@ -51,15 +55,23 @@ func (b *PluginSetBuilder) AddAll() error {
5155
}
5256

5357
func (b *PluginSetBuilder) AddEngine() error {
54-
provider, err := providers.GetProvider(b.Cfg)
58+
cloudProvider, err := providers.GetProvider(b.Cfg)
5559
if err != nil {
5660
return err
5761
}
58-
kb, err := providers.GetKnowledgeBase(b.Cfg)
62+
cloudkb, err := providers.GetKnowledgeBase(b.Cfg)
5963
if err != nil {
6064
return err
6165
}
62-
b.Engine = engine.NewEngine(provider, kb, core.ListAllConstructs())
66+
kb, err := knowledgebase.MergeKBs([]knowledgebase.EdgeKB{cloudkb, kubernetesKb.KubernetesKB})
67+
if err != nil {
68+
return err
69+
}
70+
kubernetesProvider := &kubernetes.KubernetesProvider{AppName: b.Cfg.AppName}
71+
b.Engine = engine.NewEngine(map[string]provider.Provider{
72+
cloudProvider.Name(): cloudProvider,
73+
kubernetesProvider.Name(): kubernetesProvider,
74+
}, kb, core.ListAllConstructs())
6375
return nil
6476
}
6577

pkg/core/descriptor.go

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package core
2+
3+
type (
4+
Descriptor string
5+
Functionality Descriptor
6+
)
7+
8+
const (
9+
Compute Functionality = "compute"
10+
Cluster Functionality = "cluster"
11+
Unknown Functionality = "Unknown"
12+
)

pkg/core/errors.go

+30
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,42 @@ type (
2626
Cause error
2727
Stack errors.StackTrace
2828
}
29+
30+
OperationalResourceError struct {
31+
Needs []string
32+
Resource Resource
33+
Cause error
34+
}
2935
)
3036

3137
var (
3238
errorColour = color.New(color.FgRed)
3339
)
3440

41+
func NewOperationalResourceError(resource Resource, needs []string, cause error) *OperationalResourceError {
42+
return &OperationalResourceError{
43+
Resource: resource,
44+
Needs: needs,
45+
Cause: cause,
46+
}
47+
}
48+
49+
func (err *OperationalResourceError) Error() string {
50+
return fmt.Sprintf("error in making resource %s operational: %v", err.Resource.Id(), err.Cause)
51+
}
52+
53+
func (err *OperationalResourceError) Format(s fmt.State, verb rune) {
54+
if formatter, ok := err.Cause.(fmt.Formatter); ok {
55+
formatter.Format(s, verb)
56+
} else {
57+
fmt.Fprint(s, err.Error())
58+
}
59+
}
60+
61+
func (err *OperationalResourceError) Unwrap() error {
62+
return err.Cause
63+
}
64+
3565
func NewPluginError(name string, cause error) *PluginError {
3666
if subPlugin, ok := cause.(*PluginError); ok {
3767
return &PluginError{

pkg/core/resource_graph.go

+22
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,17 @@ func GetAllUpstreamResourcesOfType[T Resource](rg *ResourceGraph, source Resourc
348348
return
349349
}
350350

351+
func GetSingleUpstreamResourceOfType[T Resource](rg *ResourceGraph, source Resource) (resource T, err error) {
352+
resources := GetAllUpstreamResourcesOfType[T](rg, source)
353+
if len(resources) == 0 {
354+
return resource, errors.Errorf("no upstream resource of type %T found for resource %s", source, source.Id())
355+
} else if len(resources) > 1 {
356+
return resource, errors.Errorf("multiple upstream resources of type %T found for resource %s", source, source.Id())
357+
}
358+
return resources[0], nil
359+
360+
}
361+
351362
func (rg *ResourceGraph) getAllUpstreamResourcesSet(source Resource, upstreams map[Resource]struct{}) map[Resource]struct{} {
352363
for _, r := range rg.underlying.IncomingVertices(source) {
353364
upstreams[r] = struct{}{}
@@ -383,6 +394,17 @@ func GetAllDownstreamResourcesOfType[T Resource](rg *ResourceGraph, source Resou
383394
return
384395
}
385396

397+
func GetSingleDownstreamResourceOfType[T Resource](rg *ResourceGraph, source Resource) (resource T, err error) {
398+
resources := GetAllDownstreamResourcesOfType[T](rg, source)
399+
if len(resources) == 0 {
400+
return resource, errors.Errorf("no upstream resource of type %T found for resource %s", source, source.Id())
401+
} else if len(resources) > 1 {
402+
return resource, errors.Errorf("multiple upstream resources of type %T found for resource %s", source, source.Id())
403+
}
404+
return resources[0], nil
405+
406+
}
407+
386408
func (rg *ResourceGraph) ReplaceConstruct(resource Resource, new Resource) error {
387409
rg.AddResource(new)
388410
// Since its a construct we just assume every single edge can be removed

pkg/core/resources.go

-7
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,6 @@ type (
9191
HasLocalOutput interface {
9292
OutputTo(dest string) error
9393
}
94-
95-
Functionality string
9694
)
9795

9896
const (
@@ -110,11 +108,6 @@ const (
110108
AbstractConstructProvider = "klotho"
111109
)
112110

113-
const (
114-
Compute Functionality = "compute"
115-
Unknown Functionality = "Unknown"
116-
)
117-
118111
func IsConstructOfAnnotationCapability(baseConstruct BaseConstruct, cap string) bool {
119112
cons, ok := baseConstruct.(Construct)
120113
if !ok {

pkg/engine/api.go

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package engine
2+
3+
import "github.com/klothoplatform/klotho/pkg/core"
4+
5+
func (e *Engine) ListResources() []core.Resource {
6+
resources := []core.Resource{}
7+
for _, provider := range e.Providers {
8+
resources = append(resources, provider.ListResources()...)
9+
}
10+
return resources
11+
}
12+
13+
func (e *Engine) ListResourcesByType() []string {
14+
resources := []string{}
15+
for _, res := range e.ListResources() {
16+
resources = append(resources, res.Id().String())
17+
}
18+
return resources
19+
}

0 commit comments

Comments
 (0)