hetzner.go
1 package providers 2 3 import ( 4 "github.com/pulumi/pulumi-hcloud/sdk/go/hcloud" 5 "github.com/pulumi/pulumi-std/sdk/go/std" 6 "github.com/pulumi/pulumi/sdk/v3/go/pulumi" 7 //"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config" 8 ) 9 10 func Hetzner(ctx *pulumi.Context, enable bool) error { 11 if !enable { 12 return nil 13 } 14 15 // cfg := config.New(ctx, "") 16 // hcloudToken := cfg.RequireObject("hcloud:token") 17 18 invokeFile, err := std.File(ctx, &std.FileArgs{ 19 Input: "../../.ssh/id_ed25519.pub", 20 }, nil) 21 22 if err != nil { 23 return err 24 } 25 26 sshKey, err := hcloud.NewSshKey(ctx, "ssh-key", &hcloud.SshKeyArgs{ 27 Name: pulumi.String("mfarabi619@gmail.com"), 28 PublicKey: pulumi.String(invokeFile.Result), 29 Labels: pulumi.StringMap{ 30 "owner": pulumi.String("mfarabi"), 31 "pulumi": pulumi.String("true"), 32 }, 33 }) 34 35 if err != nil { 36 return err 37 } 38 39 server, err := hcloud.NewServer(ctx, "ubuntu-24.04", &hcloud.ServerArgs{ 40 Name: pulumi.String("ubuntu-24.04"), 41 Image: pulumi.String("ubuntu-24.04"), 42 ServerType: pulumi.String("cpx11"), 43 Datacenter: pulumi.String("ash-dc1"), 44 // Location: pulumi.String("ash"), 45 DeleteProtection: pulumi.Bool(false), 46 KeepDisk: pulumi.Bool(false), 47 RebuildProtection: pulumi.Bool(false), 48 Backups: pulumi.Bool(false), 49 ShutdownBeforeDeletion: pulumi.Bool(false), 50 PublicNets: hcloud.ServerPublicNetArray{ 51 &hcloud.ServerPublicNetArgs{ 52 Ipv4Enabled: pulumi.Bool(true), 53 Ipv6Enabled: pulumi.Bool(true), 54 }, 55 }, 56 SshKeys: pulumi.StringArray{ 57 sshKey.Name, 58 }, 59 Labels: pulumi.StringMap{ 60 "pulumi": pulumi.String("true"), 61 }, 62 }) 63 if err != nil { 64 return err 65 } 66 67 ctx.Export("ubuntu-24.04 IPV4", server.Ipv4Address) 68 ctx.Export("ubuntu-24.04 IPV6", server.Ipv6Address) 69 ctx.Export("ubuntu-24.04 PrimaryDiskSize", server.PrimaryDiskSize) 70 ctx.Export("ubuntu-24.04 Status", server.Status) 71 72 return nil 73 }