Skip to content

Commit

Permalink
more partial
Browse files Browse the repository at this point in the history
  • Loading branch information
adrianriobo committed Nov 9, 2023
1 parent a886980 commit ee8fc19
Show file tree
Hide file tree
Showing 5 changed files with 305 additions and 189 deletions.
4 changes: 0 additions & 4 deletions pkg/provider/aws/action/mac/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,6 @@ const (

awsMacMachineID = "amm"

cidrVN = "10.0.0.0/16"
cidrPublicSN = "10.0.2.0/24"
cidrIntraSN = "10.0.101.0/24"

outputHost = "ammHost"
outputUsername = "ammUsername"
outputUserPassword = "ammUserPassword"
Expand Down
7 changes: 4 additions & 3 deletions pkg/provider/aws/action/windows/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,16 @@ var (

awsWindowsDedicatedID = "awd"

rdpDefaultPort int = 3389
diskSize int = 200
rootBlockDeviceName string = "/dev/sda1"
rdpDefaultPort int = 3389
diskSize int = 200
// rootBlockDeviceName string = "/dev/sda1"

// This is based on a Custom AMI
amiNameDefault = "Windows_Server-2019-English-Full-HyperV*"
amiOwner = "self"
amiDefaultUser = "ec2-user"

// outputHost = "awdHost"
outputUsername = "awdUsername"
outputUserPrivateKey = "awdPrivatekey"
)
309 changes: 149 additions & 160 deletions pkg/provider/aws/action/windows/windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
_ "embed"
"fmt"
"os"
"strconv"

"github.com/adrianriobo/qenvs/pkg/manager"
qenvsContext "github.com/adrianriobo/qenvs/pkg/manager/context"
Expand All @@ -14,13 +13,12 @@ import (
"github.com/adrianriobo/qenvs/pkg/provider/aws/modules/network"
"github.com/adrianriobo/qenvs/pkg/provider/aws/modules/spot"
amiSVC "github.com/adrianriobo/qenvs/pkg/provider/aws/services/ec2/ami"
"github.com/adrianriobo/qenvs/pkg/provider/aws/services/ec2/compute"
"github.com/adrianriobo/qenvs/pkg/provider/aws/services/ec2/keypair"
securityGroup "github.com/adrianriobo/qenvs/pkg/provider/aws/services/ec2/security-group"
"github.com/adrianriobo/qenvs/pkg/util"
resourcesUtil "github.com/adrianriobo/qenvs/pkg/util/resources"
"github.com/pulumi/pulumi-aws/sdk/v5/go/aws/autoscaling"
"github.com/pulumi/pulumi-aws/sdk/v5/go/aws/ec2"
"github.com/pulumi/pulumi-aws/sdk/v5/go/aws/lb"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

Expand All @@ -43,11 +41,11 @@ type WindowsRequest struct {
amiReplicate bool
}

type userDataValues struct {
Username string
Password string
AuthorizedKey string
}
// type userDataValues struct {
// Username string
// Password string
// AuthorizedKey string
// }

//go:embed bootstrap.ps1
var BootstrapScript []byte
Expand Down Expand Up @@ -160,7 +158,7 @@ func (r *WindowsRequest) deployer(ctx *pulumi.Context) error {
}
}
// Get the AMI
_, err := amiSVC.GetAMIByName(ctx, r.AMIName, amiOwner, nil)
ami, err := amiSVC.GetAMIByName(ctx, r.AMIName, amiOwner, nil)
if err != nil {
return err
}
Expand All @@ -174,7 +172,8 @@ func (r *WindowsRequest) deployer(ctx *pulumi.Context) error {
Airgap: r.Airgap,
AirgapPhaseConnectivity: r.airgapPhaseConnectivity,
}
vpc, targetSubnet, targetRouteTableAssociation, bastion, lb, err := nr.Network(ctx)
// vpc, targetSubnet, targetRouteTableAssociation, bastion, lb, err := nr.Network(ctx)
vpc, targetSubnet, _, _, _, err := nr.Network(ctx)
if err != nil {
return err
}
Expand All @@ -195,10 +194,27 @@ func (r *WindowsRequest) deployer(ctx *pulumi.Context) error {
}
ctx.Export(fmt.Sprintf("%s-%s", r.Prefix, outputUsername),
pulumi.String(amiDefaultUser))
if r.Spot {

// if !r.Spot {
cr := compute.ComputeRequest{
Prefix: r.Prefix,
ID: awsWindowsDedicatedID,
VPC: vpc,
Subnet: targetSubnet,
AMI: ami,
KeyResources: keyResources,
SecurityGroups: securityGroups,
InstaceTypes: []string{"c5.metal", "c5d.metal", "c5n.metal"},
DiskSize: &diskSize,
Airgap: r.Airgap,
}
_, err = cr.NewCompute(ctx)
if err != nil {
return err
}
return fmt.Errorf("not implemented yet")
// ctx.Export(fmt.Sprintf("%s-%s", r.Prefix, outputUsername),
// pulumi.String(amiDefaultUser))
// }
return nil
}

// security group for mac machine with ingress rules for ssh and vnc
Expand Down Expand Up @@ -234,154 +250,127 @@ func (r *WindowsRequest) securityGroups(ctx *pulumi.Context,
return pulumi.StringArray(sgs[:]), nil
}

// // Create the mac instance
func (r *WindowsRequest) instance(ctx *pulumi.Context,
subnet *ec2.Subnet,
ami *ec2.LookupAmiResult,
keyResources *keypair.KeyPairResources,
securityGroups pulumi.StringArray,
) (*ec2.Instance, error) {
instanceArgs := ec2.InstanceArgs{
SubnetId: subnet.ID(),
Ami: pulumi.String(ami.Id),
InstanceType: pulumi.String("c5.metal"),
KeyName: keyResources.AWSKeyPair.KeyName,
AssociatePublicIpAddress: pulumi.Bool(true),
VpcSecurityGroupIds: securityGroups,
RootBlockDevice: ec2.InstanceRootBlockDeviceArgs{
VolumeSize: pulumi.Int(diskSize),
},
Tags: qenvsContext.GetTagsAsPulumiStringMap(nil),
}
if r.Airgap {
instanceArgs.AssociatePublicIpAddress = pulumi.Bool(false)
}
return ec2.NewInstance(ctx,
resourcesUtil.GetResourceName(r.Prefix, awsWindowsDedicatedID, "instance"),
&instanceArgs)
}

func (r WindowsRequest) createSpotInstance(ctx *pulumi.Context,
vpc *ec2.Vpc,
subnet *ec2.Subnet,
nlb *lb.LoadBalancer,
ami *ec2.LookupAmiResult,
keyResources *keypair.KeyPairResources,
securityGroups pulumi.StringArray) error {
args := &ec2.LaunchTemplateArgs{
NamePrefix: pulumi.String(awsWindowsDedicatedID),
ImageId: pulumi.String(ami.Id),
KeyName: keyResources.AWSKeyPair.KeyName,
NetworkInterfaces: ec2.LaunchTemplateNetworkInterfaceArray{
&ec2.LaunchTemplateNetworkInterfaceArgs{
SecurityGroups: securityGroups,
AssociatePublicIpAddress: pulumi.String(strconv.FormatBool(!r.Airgap)),
SubnetId: subnet.ID(),
},
},
BlockDeviceMappings: ec2.LaunchTemplateBlockDeviceMappingArray{
&ec2.LaunchTemplateBlockDeviceMappingArgs{
DeviceName: pulumi.String(rootBlockDeviceName),
Ebs: &ec2.LaunchTemplateBlockDeviceMappingEbsArgs{
VolumeSize: pulumi.Int(diskSize),
},
},
},
Tags: qenvsContext.GetTagsAsPulumiStringMap(nil),
}
// if udBase64 != nil {
// args.UserData = udBase64
// }
lt, err := ec2.NewLaunchTemplate(ctx,
resourcesUtil.GetResourceName(r.Prefix, awsWindowsDedicatedID, "lt"),
args)
if err != nil {
return err
}
// func (r WindowsRequest) createSpotInstance(ctx *pulumi.Context,
// vpc *ec2.Vpc,
// subnet *ec2.Subnet,
// nlb *lb.LoadBalancer,
// ami *ec2.LookupAmiResult,
// keyResources *keypair.KeyPairResources,
// securityGroups pulumi.StringArray) error {
// args := &ec2.LaunchTemplateArgs{
// NamePrefix: pulumi.String(awsWindowsDedicatedID),
// ImageId: pulumi.String(ami.Id),
// KeyName: keyResources.AWSKeyPair.KeyName,
// NetworkInterfaces: ec2.LaunchTemplateNetworkInterfaceArray{
// &ec2.LaunchTemplateNetworkInterfaceArgs{
// SecurityGroups: securityGroups,
// AssociatePublicIpAddress: pulumi.String(strconv.FormatBool(!r.Airgap)),
// SubnetId: subnet.ID(),
// },
// },
// BlockDeviceMappings: ec2.LaunchTemplateBlockDeviceMappingArray{
// &ec2.LaunchTemplateBlockDeviceMappingArgs{
// DeviceName: pulumi.String(rootBlockDeviceName),
// Ebs: &ec2.LaunchTemplateBlockDeviceMappingEbsArgs{
// VolumeSize: pulumi.Int(diskSize),
// },
// },
// },
// Tags: qenvsContext.GetTagsAsPulumiStringMap(nil),
// }
// // if udBase64 != nil {
// // args.UserData = udBase64
// // }
// lt, err := ec2.NewLaunchTemplate(ctx,
// resourcesUtil.GetResourceName(r.Prefix, awsWindowsDedicatedID, "lt"),
// args)
// if err != nil {
// return err
// }

rhelTargetGroup, err := lb.NewTargetGroup(ctx,
resourcesUtil.GetResourceName(r.Prefix, awsWindowsDedicatedID, "tg"),
&lb.TargetGroupArgs{
Port: pulumi.Int(22),
Protocol: pulumi.String("TCP"),
VpcId: vpc.ID(),
})
if err != nil {
return err
}
_, err = lb.NewListener(ctx,
resourcesUtil.GetResourceName(r.Prefix, awsWindowsDedicatedID, "listener"),
&lb.ListenerArgs{
LoadBalancerArn: nlb.Arn,
Port: pulumi.Int(22),
Protocol: pulumi.String("TCP"),
DefaultActions: lb.ListenerDefaultActionArray{
&lb.ListenerDefaultActionArgs{
Type: pulumi.String("forward"),
TargetGroupArn: rhelTargetGroup.Arn,
},
},
})
if err != nil {
return err
}
compute.InstanceIP = nlb.DnsName
compute.Username = r.Specs.AMI.DefaultUser
overrides := autoscaling.GroupMixedInstancesPolicyLaunchTemplateOverrideArray{}
for _, instanceType := range r.Specs.InstaceTypes {
overrides = append(overrides, &autoscaling.GroupMixedInstancesPolicyLaunchTemplateOverrideArgs{
InstanceType: pulumi.String(instanceType),
})
}
mixedInstancesPolicy := &autoscaling.GroupMixedInstancesPolicyArgs{
InstancesDistribution: &autoscaling.GroupMixedInstancesPolicyInstancesDistributionArgs{
OnDemandBaseCapacity: pulumi.Int(0),
OnDemandPercentageAboveBaseCapacity: pulumi.Int(0),
SpotAllocationStrategy: pulumi.String("capacity-optimized"),
SpotMaxPrice: pulumi.String(r.SpotPrice),
},
LaunchTemplate: &autoscaling.GroupMixedInstancesPolicyLaunchTemplateArgs{
LaunchTemplateSpecification: &autoscaling.GroupMixedInstancesPolicyLaunchTemplateLaunchTemplateSpecificationArgs{
LaunchTemplateId: lt.ID(),
},
Overrides: overrides,
},
}
_, err = autoscaling.NewGroup(ctx,
r.GetName(),
&autoscaling.GroupArgs{
TargetGroupArns: pulumi.ToStringArrayOutput([]pulumi.StringOutput{rhelTargetGroup.Arn}),
CapacityRebalance: pulumi.Bool(true),
DesiredCapacity: pulumi.Int(1),
MaxSize: pulumi.Int(1),
MinSize: pulumi.Int(1),
VpcZoneIdentifiers: pulumi.StringArray{r.Subnets[0].ID()},
MixedInstancesPolicy: mixedInstancesPolicy,
// Check if this is needed now
HealthCheckGracePeriod: pulumi.Int(defaultHealthCheckGracePeriod),
// Suspend healthcheck to allow restart computer
// required on windows hosts for Openshift local installation
SuspendedProcesses: pulumi.StringArray{
pulumi.String("HealthCheck")},
Tags: autoscaling.GroupTagArray{
&autoscaling.GroupTagArgs{
Key: pulumi.String("Name"),
Value: pulumi.String(r.GetName()),
PropagateAtLaunch: pulumi.Bool(true),
},
&autoscaling.GroupTagArgs{
Key: pulumi.String("HOST_ID"),
Value: pulumi.String(r.Specs.ID),
PropagateAtLaunch: pulumi.Bool(true),
},
},
})
if err != nil {
return err
}
ctx.Export(r.OutputHost(), compute.InstanceIP)
return nil
}
// rhelTargetGroup, err := lb.NewTargetGroup(ctx,
// resourcesUtil.GetResourceName(r.Prefix, awsWindowsDedicatedID, "tg"),
// &lb.TargetGroupArgs{
// Port: pulumi.Int(22),
// Protocol: pulumi.String("TCP"),
// VpcId: vpc.ID(),
// })
// if err != nil {
// return err
// }
// _, err = lb.NewListener(ctx,
// resourcesUtil.GetResourceName(r.Prefix, awsWindowsDedicatedID, "listener"),
// &lb.ListenerArgs{
// LoadBalancerArn: nlb.Arn,
// Port: pulumi.Int(22),
// Protocol: pulumi.String("TCP"),
// DefaultActions: lb.ListenerDefaultActionArray{
// &lb.ListenerDefaultActionArgs{
// Type: pulumi.String("forward"),
// TargetGroupArn: rhelTargetGroup.Arn,
// },
// },
// })
// if err != nil {
// return err
// }
// compute.InstanceIP = nlb.DnsName
// compute.Username = r.Specs.AMI.DefaultUser
// overrides := autoscaling.GroupMixedInstancesPolicyLaunchTemplateOverrideArray{}
// for _, instanceType := range r.Specs.InstaceTypes {
// overrides = append(overrides, &autoscaling.GroupMixedInstancesPolicyLaunchTemplateOverrideArgs{
// InstanceType: pulumi.String(instanceType),
// })
// }
// mixedInstancesPolicy := &autoscaling.GroupMixedInstancesPolicyArgs{
// InstancesDistribution: &autoscaling.GroupMixedInstancesPolicyInstancesDistributionArgs{
// OnDemandBaseCapacity: pulumi.Int(0),
// OnDemandPercentageAboveBaseCapacity: pulumi.Int(0),
// SpotAllocationStrategy: pulumi.String("capacity-optimized"),
// SpotMaxPrice: pulumi.String(r.SpotPrice),
// },
// LaunchTemplate: &autoscaling.GroupMixedInstancesPolicyLaunchTemplateArgs{
// LaunchTemplateSpecification: &autoscaling.GroupMixedInstancesPolicyLaunchTemplateLaunchTemplateSpecificationArgs{
// LaunchTemplateId: lt.ID(),
// },
// Overrides: overrides,
// },
// }
// _, err = autoscaling.NewGroup(ctx,
// r.GetName(),
// &autoscaling.GroupArgs{
// TargetGroupArns: pulumi.ToStringArrayOutput([]pulumi.StringOutput{rhelTargetGroup.Arn}),
// CapacityRebalance: pulumi.Bool(true),
// DesiredCapacity: pulumi.Int(1),
// MaxSize: pulumi.Int(1),
// MinSize: pulumi.Int(1),
// VpcZoneIdentifiers: pulumi.StringArray{r.Subnets[0].ID()},
// MixedInstancesPolicy: mixedInstancesPolicy,
// // Check if this is needed now
// HealthCheckGracePeriod: pulumi.Int(defaultHealthCheckGracePeriod),
// // Suspend healthcheck to allow restart computer
// // required on windows hosts for Openshift local installation
// SuspendedProcesses: pulumi.StringArray{
// pulumi.String("HealthCheck")},
// Tags: autoscaling.GroupTagArray{
// &autoscaling.GroupTagArgs{
// Key: pulumi.String("Name"),
// Value: pulumi.String(r.GetName()),
// PropagateAtLaunch: pulumi.Bool(true),
// },
// &autoscaling.GroupTagArgs{
// Key: pulumi.String("HOST_ID"),
// Value: pulumi.String(r.Specs.ID),
// PropagateAtLaunch: pulumi.Bool(true),
// },
// },
// })
// if err != nil {
// return err
// }
// ctx.Export(r.OutputHost(), compute.InstanceIP)
// return nil
// }

// func (r *WindowsRequest) GetUserdata(ctx *pulumi.Context) (pulumi.StringPtrInput, error) {
// password, err := security.CreatePassword(ctx, r.GetName())
Expand Down
Loading

0 comments on commit ee8fc19

Please sign in to comment.