@@ -7,11 +7,9 @@ import (
77 "github.com/go-playground/validator/v10"
88 "github.com/pulumi/pulumi-aws/sdk/v7/go/aws/ec2"
99 "github.com/pulumi/pulumi-tls/sdk/v5/go/tls"
10- "github.com/pulumi/pulumi/sdk/v3/go/auto"
1110 "github.com/pulumi/pulumi/sdk/v3/go/pulumi"
1211 "github.com/redhat-developer/mapt/pkg/manager"
1312 mc "github.com/redhat-developer/mapt/pkg/manager/context"
14- kindApi "github.com/redhat-developer/mapt/pkg/provider/api/k8s/kind"
1513 "github.com/redhat-developer/mapt/pkg/provider/aws"
1614 awsConstants "github.com/redhat-developer/mapt/pkg/provider/aws/constants"
1715 "github.com/redhat-developer/mapt/pkg/provider/aws/modules/allocation"
@@ -23,7 +21,7 @@ import (
2321 "github.com/redhat-developer/mapt/pkg/provider/aws/services/ec2/keypair"
2422 securityGroup "github.com/redhat-developer/mapt/pkg/provider/aws/services/ec2/security-group"
2523 "github.com/redhat-developer/mapt/pkg/provider/util/command"
26- "github.com/redhat-developer/mapt/pkg/provider/util/output "
24+ utilKind "github.com/redhat-developer/mapt/pkg/targets/service/kind "
2725 "github.com/redhat-developer/mapt/pkg/util"
2826 "github.com/redhat-developer/mapt/pkg/util/logging"
2927 resourcesUtil "github.com/redhat-developer/mapt/pkg/util/resources"
@@ -37,7 +35,7 @@ type kindRequest struct {
3735 spot bool
3836 timeout * string
3937 allocationData * allocation.AllocationResult
40- extraPortMappings []kindApi .PortMapping
38+ extraPortMappings []utilKind .PortMapping
4139}
4240
4341func (r * kindRequest ) validate () error {
@@ -52,7 +50,7 @@ func (r *kindRequest) validate() error {
5250// Create orchestrate 3 stacks:
5351// If spot is enable it will run best spot option to get the best option to spin the machine
5452// Then it will run the stack for windows dedicated host
55- func Create (mCtxArgs * mc.ContextArgs , args * kindApi .KindArgs ) (kr * kindApi .KindResults , err error ) {
53+ func Create (mCtxArgs * mc.ContextArgs , args * utilKind .KindArgs ) (kr * utilKind .KindResults , err error ) {
5654 mCtx , err := mc .Init (mCtxArgs , aws .Provider ())
5755 if err != nil {
5856 return nil , err
@@ -87,7 +85,7 @@ func Destroy(mCtxArgs *mc.ContextArgs) (err error) {
8785 if err != nil {
8886 return err
8987 }
90- if err := aws .DestroyStack (mCtx , aws.DestroyStackRequest {Stackname : stackName }); err != nil {
88+ if err := aws .DestroyStack (mCtx , aws.DestroyStackRequest {Stackname : utilKind . StackName }); err != nil {
9189 return err
9290 }
9391 if spot .Exist (mCtx ) {
@@ -96,9 +94,9 @@ func Destroy(mCtxArgs *mc.ContextArgs) (err error) {
9694 return nil
9795}
9896
99- func (r * kindRequest ) createHost () (* kindApi .KindResults , error ) {
97+ func (r * kindRequest ) createHost () (* utilKind .KindResults , error ) {
10098 cs := manager.Stack {
101- StackName : r .mCtx .StackNameByProject (stackName ),
99+ StackName : r .mCtx .StackNameByProject (utilKind . StackName ),
102100 ProjectName : r .mCtx .ProjectName (),
103101 BackedURL : r .mCtx .BackedURL (),
104102 ProviderCredentials : aws .GetClouProviderCredentials (
@@ -113,7 +111,7 @@ func (r *kindRequest) createHost() (*kindApi.KindResults, error) {
113111 return nil , fmt .Errorf ("stack creation failed: %w" , err )
114112 }
115113
116- metadataResults , err := r . manageResults ( sr , r .prefix )
114+ metadataResults , err := utilKind . Results ( r . mCtx , sr , r .prefix )
117115 if err != nil {
118116 return nil , fmt .Errorf ("failed to manage results: %w" , err )
119117 }
@@ -125,6 +123,8 @@ func (r *kindRequest) deploy(ctx *pulumi.Context) error {
125123 if err := r .validate (); err != nil {
126124 return err
127125 }
126+ ctx .Export (fmt .Sprintf ("%s-%s" , * r .prefix , utilKind .OKSpotPrice ),
127+ pulumi .Float64 (* r .allocationData .SpotPrice ))
128128 // Get AMI
129129 ami , err := amiSVC .GetAMIByName (ctx ,
130130 amiName (r .arch ),
@@ -145,7 +145,7 @@ func (r *kindRequest) deploy(ctx *pulumi.Context) error {
145145 nw , err := network .Create (ctx , r .mCtx ,
146146 & network.NetworkArgs {
147147 Prefix : * r .prefix ,
148- ID : awsKindID ,
148+ ID : utilKind . KindID ,
149149 Region : * r .allocationData .Region ,
150150 AZ : * r .allocationData .AZ ,
151151 CreateLoadBalancer : r .allocationData .SpotPrice != nil ,
@@ -156,12 +156,12 @@ func (r *kindRequest) deploy(ctx *pulumi.Context) error {
156156
157157 // Create Keypair
158158 kpr := keypair.KeyPairRequest {
159- Name : resourcesUtil .GetResourceName (* r .prefix , awsKindID , "pk" )}
159+ Name : resourcesUtil .GetResourceName (* r .prefix , utilKind . KindID , "pk" )}
160160 keyResources , err := kpr .Create (ctx , r .mCtx )
161161 if err != nil {
162162 return err
163163 }
164- ctx .Export (fmt .Sprintf ("%s-%s" , * r .prefix , outputUserPrivateKey ),
164+ ctx .Export (fmt .Sprintf ("%s-%s" , * r .prefix , utilKind . OKPrivateKey ),
165165 keyResources .PrivateKey .PrivateKeyPem )
166166
167167 // Security groups
@@ -176,13 +176,13 @@ func (r *kindRequest) deploy(ctx *pulumi.Context) error {
176176 return err
177177 }
178178 // Build LB target groups including both default and extra ports
179- lbTargetGroups := []int {22 , kindApi .PortAPI , kindApi .PortHTTP , kindApi .PortHTTPS }
179+ lbTargetGroups := []int {22 , utilKind .PortAPI , utilKind .PortHTTP , utilKind .PortHTTPS }
180180 lbTargetGroups = append (lbTargetGroups , extraHostPorts ... )
181181
182182 cr := compute.ComputeRequest {
183183 MCtx : r .mCtx ,
184184 Prefix : * r .prefix ,
185- ID : awsKindID ,
185+ ID : utilKind . KindID ,
186186 VPC : nw .Vpc ,
187187 Subnet : nw .Subnet ,
188188 AMI : ami ,
@@ -204,16 +204,16 @@ func (r *kindRequest) deploy(ctx *pulumi.Context) error {
204204 return err
205205 }
206206
207- ctx .Export (fmt .Sprintf ("%s-%s" , * r .prefix , outputUsername ),
207+ ctx .Export (fmt .Sprintf ("%s-%s" , * r .prefix , utilKind . OKUsername ),
208208 pulumi .String (amiUserDefault ))
209209
210- ctx .Export (fmt .Sprintf ("%s-%s" , * r .prefix , outputHost ),
210+ ctx .Export (fmt .Sprintf ("%s-%s" , * r .prefix , utilKind . OKHost ),
211211 c .GetHostIP (true ))
212212
213213 if len (* r .timeout ) > 0 {
214214 err := serverless .OneTimeDelayedTask (ctx , r .mCtx ,
215215 * r .allocationData .Region , * r .prefix ,
216- awsKindID ,
216+ utilKind . KindID ,
217217 fmt .Sprintf ("aws %s destroy --project-name %s --backed-url %s --serverless --force-destroy" ,
218218 "kind" , r .mCtx .ProjectName (), r .mCtx .BackedURL ()),
219219 * r .timeout )
@@ -226,78 +226,21 @@ func (r *kindRequest) deploy(ctx *pulumi.Context) error {
226226 if err != nil {
227227 return err
228228 }
229- ctx .Export (fmt .Sprintf ("%s-%s" , * r .prefix , outputKubeconfig ),
229+ ctx .Export (fmt .Sprintf ("%s-%s" , * r .prefix , utilKind . OKKubeconfig ),
230230 pulumi .ToSecret (kubeconfig ))
231231
232232 return nil
233233}
234234
235- // Write exported values in context to files o a selected target folder
236- func (r * kindRequest ) manageResults (stackResult auto.UpResult , prefix * string ) (* kindApi.KindResults , error ) {
237- username , err := getResultOutput (outputUsername , stackResult , prefix )
238- if err != nil {
239- return nil , err
240- }
241- privateKey , err := getResultOutput (outputUserPrivateKey , stackResult , prefix )
242- if err != nil {
243- return nil , err
244- }
245- host , err := getResultOutput (outputHost , stackResult , prefix )
246- if err != nil {
247- return nil , err
248- }
249- kubeconfig , err := getResultOutput (outputKubeconfig , stackResult , prefix )
250- if err != nil {
251- return nil , err
252- }
253-
254- metadataResults := & kindApi.KindResults {
255- Username : username ,
256- PrivateKey : privateKey ,
257- Host : host ,
258- Kubeconfig : kubeconfig ,
259- SpotPrice : r .allocationData .SpotPrice ,
260- }
261-
262- hostIPKey := fmt .Sprintf ("%s-%s" , * prefix , outputHost )
263- results := map [string ]string {
264- fmt .Sprintf ("%s-%s" , * prefix , outputUsername ): "username" ,
265- fmt .Sprintf ("%s-%s" , * prefix , outputUserPrivateKey ): "id_rsa" ,
266- hostIPKey : "host" ,
267- fmt .Sprintf ("%s-%s" , * prefix , outputKubeconfig ): "kubeconfig" ,
268- }
269-
270- if r .mCtx .GetResultsOutputPath () != "" {
271- if err := output .Write (stackResult , r .mCtx .GetResultsOutputPath (), results ); err != nil {
272- return nil , fmt .Errorf ("failed to write results: %w" , err )
273- }
274- }
275-
276- return metadataResults , nil
277- }
278-
279- func getResultOutput (name string , sr auto.UpResult , prefix * string ) (string , error ) {
280- key := fmt .Sprintf ("%s-%s" , * prefix , name )
281- output , ok := sr .Outputs [key ]
282- if ! ok {
283- return "" , fmt .Errorf ("output not found: %s" , key )
284- }
285- value , ok := output .Value .(string )
286- if ! ok {
287- return "" , fmt .Errorf ("output for %s is not a string" , key )
288- }
289- return value , nil
290- }
291-
292235// security group for Openshift
293236func securityGroups (ctx * pulumi.Context , mCtx * mc.Context , prefix * string ,
294237 vpc * ec2.Vpc , extraHostPorts []int ) (pulumi.StringArray , error ) {
295238 // Build ingress rules including both default and extra ports
296239 ingressRules := []securityGroup.IngressRules {
297240 securityGroup .SSH_TCP ,
298- {Description : "HTTPS" , FromPort : kindApi .PortHTTPS , ToPort : kindApi .PortHTTPS , Protocol : "tcp" },
299- {Description : "HTTP" , FromPort : kindApi .PortHTTP , ToPort : kindApi .PortHTTP , Protocol : "tcp" },
300- {Description : "API" , FromPort : kindApi .PortAPI , ToPort : kindApi .PortAPI , Protocol : "tcp" },
241+ {Description : "HTTPS" , FromPort : utilKind .PortHTTPS , ToPort : utilKind .PortHTTPS , Protocol : "tcp" },
242+ {Description : "HTTP" , FromPort : utilKind .PortHTTP , ToPort : utilKind .PortHTTP , Protocol : "tcp" },
243+ {Description : "API" , FromPort : utilKind .PortAPI , ToPort : utilKind .PortAPI , Protocol : "tcp" },
301244 }
302245
303246 // Add extra ports to ingress rules
@@ -312,9 +255,9 @@ func securityGroups(ctx *pulumi.Context, mCtx *mc.Context, prefix *string,
312255
313256 // Create SG with ingress rules
314257 sg , err := securityGroup.SGRequest {
315- Name : resourcesUtil .GetResourceName (* prefix , awsKindID , "sg" ),
258+ Name : resourcesUtil .GetResourceName (* prefix , utilKind . KindID , "sg" ),
316259 VPC : vpc ,
317- Description : fmt .Sprintf ("sg for %s" , awsKindID ),
260+ Description : fmt .Sprintf ("sg for %s" , utilKind . KindID ),
318261 IngressRules : ingressRules ,
319262 }.Create (ctx , mCtx )
320263 if err != nil {
@@ -328,22 +271,21 @@ func securityGroups(ctx *pulumi.Context, mCtx *mc.Context, prefix *string,
328271 return pulumi .StringArray (sgs [:]), nil
329272}
330273
331- func userData (arch , k8sVersion * string , parsedPortMappings []kindApi .PortMapping , lbEIP * pulumi.StringOutput ) (pulumi.StringPtrInput , error ) {
274+ func userData (arch , k8sVersion * string , parsedPortMappings []utilKind .PortMapping , lbEIP * pulumi.StringOutput ) (pulumi.StringPtrInput , error ) {
332275 ccB64 := lbEIP .ApplyT (
333276 func (publicIP string ) (string , error ) {
334- ccB64 , err := kindApi . CloudConfig (
335- & kindApi. DataValues {
336- Arch : util . If ( * arch == "x86_64" ,
337- kindApi . X86_64 ,
338- kindApi . Arm64 ) ,
339- KindVersion : kindApi .KindK8sVersions [* k8sVersion ].KindVersion ,
340- KindImage : kindApi . KindK8sVersions [ * k8sVersion ]. KindImage ,
341- Username : amiUserDefault ,
342- PublicIP : publicIP ,
343- ExtraPortMappings : parsedPortMappings } )
277+ cc := & utilKind. CloudConfigArgs {
278+ Arch : util . If ( * arch == "x86_64" ,
279+ utilKind . X86_64 ,
280+ utilKind . Arm64 ) ,
281+ KindVersion : utilKind . KindK8sVersions [ * k8sVersion ]. KindVersion ,
282+ KindImage : utilKind .KindK8sVersions [* k8sVersion ].KindImage ,
283+ Username : amiUserDefault ,
284+ PublicIP : publicIP ,
285+ ExtraPortMappings : parsedPortMappings }
286+ ccB64 , err := cc . CloudConfig ( )
344287 return * ccB64 , err
345288 }).(pulumi.StringOutput )
346-
347289 return ccB64 , nil
348290}
349291
@@ -360,7 +302,7 @@ func kubeconfig(ctx *pulumi.Context,
360302 kindReadyCmd , err := c .RunCommand (ctx ,
361303 command .CommandCloudInitWait ,
362304 compute .LoggingCmdStd ,
363- fmt .Sprintf ("%s-kind-readiness" , * prefix ), awsKindID ,
305+ fmt .Sprintf ("%s-kind-readiness" , * prefix ), utilKind . KindID ,
364306 mk , amiUserDefault , nil , c .Dependencies )
365307 if err != nil {
366308 return pulumi.StringOutput {}, err
@@ -370,7 +312,7 @@ func kubeconfig(ctx *pulumi.Context,
370312 getKC , err := c .RunCommand (ctx ,
371313 getKCCmd ,
372314 compute .NoLoggingCmdStd ,
373- fmt .Sprintf ("%s-kubeconfig" , * prefix ), awsKindID , mk , amiUserDefault ,
315+ fmt .Sprintf ("%s-kubeconfig" , * prefix ), utilKind . KindID , mk , amiUserDefault ,
374316 nil , []pulumi.Resource {kindReadyCmd })
375317 if err != nil {
376318 return pulumi.StringOutput {}, err
0 commit comments