/ config / providers / hetzner.go
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  }