78 lines
2.5 KiB
Go
78 lines
2.5 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"io/ioutil"
|
|
|
|
"github.com/pulumi/pulumi-oci/sdk/go/oci/core"
|
|
"github.com/pulumi/pulumi-oci/sdk/go/oci/identity"
|
|
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
|
|
"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config"
|
|
)
|
|
|
|
func setupAIO(ctx *pulumi.Context, cfg *config.Config, compartment *identity.Compartment, vcn *core.Vcn, subnet *core.Subnet) error {
|
|
// Get boot image
|
|
imageId := compartment.CompartmentId.ApplyT(func(id string) string {
|
|
images, _ := core.GetImages(ctx, &core.GetImagesArgs{
|
|
CompartmentId: id,
|
|
OperatingSystem: pulumi.StringRef("Canonical Ubuntu"),
|
|
OperatingSystemVersion: pulumi.StringRef("22.04 Minimal aarch64"),
|
|
SortBy: pulumi.StringRef("TIMECREATED"),
|
|
SortOrder: pulumi.StringRef("DESC"),
|
|
Shape: pulumi.StringRef(SHAPE_ARM64),
|
|
})
|
|
return images.Images[0].Id
|
|
}).(pulumi.StringOutput)
|
|
|
|
// Get availability domains
|
|
availabilityDomainName := compartment.CompartmentId.ApplyT(func(id string) string {
|
|
availabilityDomains, _ := identity.GetAvailabilityDomains(ctx, &identity.GetAvailabilityDomainsArgs{
|
|
CompartmentId: id,
|
|
})
|
|
return availabilityDomains.AvailabilityDomains[0].Name
|
|
}).(pulumi.StringOutput)
|
|
|
|
// Load cloudinit
|
|
userData, err := ioutil.ReadFile("cloud-init.yaml")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// Create an OCI instance
|
|
instance, err := core.NewInstance(ctx, "nextcloud-instance-aio", &core.InstanceArgs{
|
|
AvailabilityDomain: availabilityDomainName,
|
|
CompartmentId: compartment.ID(),
|
|
DisplayName: pulumi.Sprintf("%s-nextcloud-aio", ctx.Stack()),
|
|
Shape: pulumi.String(SHAPE_ARM64),
|
|
ShapeConfig: core.InstanceShapeConfigArgs{
|
|
Ocpus: pulumi.Float64(2),
|
|
MemoryInGbs: pulumi.Float64(12),
|
|
},
|
|
SourceDetails: &core.InstanceSourceDetailsArgs{
|
|
SourceId: imageId,
|
|
SourceType: pulumi.String("image"),
|
|
},
|
|
CreateVnicDetails: &core.InstanceCreateVnicDetailsArgs{
|
|
AssignIpv6ip: pulumi.Bool(true),
|
|
SubnetId: subnet.ID(),
|
|
DisplayName: pulumi.Sprintf("%s-nextcloud-aio", ctx.Stack()),
|
|
},
|
|
ExtendedMetadata: pulumi.Map{
|
|
"MY_DOMAIN": pulumi.String("ncte.p0m.fr"),
|
|
"MY_DOMAINS": pulumi.String("ncte.p0m.fr"),
|
|
},
|
|
Metadata: pulumi.Map{
|
|
"user_data": pulumi.String(base64.StdEncoding.EncodeToString(userData)),
|
|
"ssh_authorized_keys": pulumi.String(SSH_AUTHORIZED_KEYS),
|
|
},
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// Export the public-ip
|
|
ctx.Export("aio-instance-ip", instance.PublicIp)
|
|
|
|
return nil
|
|
}
|