package main import ( "encoding/base64" "os" "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 setupHeyform(ctx *pulumi.Context, cfg *config.Config, compartment *identity.Compartment, 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("24.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 := os.ReadFile("cloud-init.yaml") if err != nil { return err } // Create an OCI instance instance, err := core.NewInstance(ctx, "heyform-instance-1", &core.InstanceArgs{ AvailabilityDomain: availabilityDomainName, CompartmentId: compartment.ID(), DisplayName: pulumi.Sprintf("%s-heyform", ctx.Stack()), Shape: pulumi.String(SHAPE_ARM64), ShapeConfig: core.InstanceShapeConfigArgs{ Ocpus: pulumi.Float64(1), MemoryInGbs: pulumi.Float64(8), }, SourceDetails: &core.InstanceSourceDetailsArgs{ SourceId: imageID, SourceType: pulumi.String("image"), }, CreateVnicDetails: &core.InstanceCreateVnicDetailsArgs{ AssignIpv6ip: pulumi.Bool(true), SubnetId: subnet.ID(), DisplayName: pulumi.Sprintf("%s-heyform", ctx.Stack()), }, ExtendedMetadata: pulumi.Map{ "FORM_ENCRYPTION_KEY": cfg.RequireSecret("heyform_form_encryption_key"), "SESSION_KEY": cfg.RequireSecret("heyform_session_key"), "SENSUS_API_KEY": cfg.RequireSecret("sensus_api_key"), "SMTP_USER": cfg.RequireSecret("smtp_user"), "SMTP_PASSWORD": cfg.RequireSecret("smtp_password"), "RESTIC_REPOSITORY": pulumi.String("s3:blob.nemunai.re/zbackup-heyform"), "RESTIC_PASSWORD": cfg.RequireSecret("restic_password"), "RESTIC_AWS_ACCESS_KEY_ID": cfg.RequireSecret("restic_aws_access_key_id"), "RESTIC_AWS_SECRET_ACCESS_KEY": cfg.RequireSecret("restic_aws_secret_access_key"), }, 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("heyform-instance-ip", instance.PublicIp) return nil }