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 }