/ config / providers / digitalocean.go
digitalocean.go
 1  package providers
 2  
 3  import (
 4  	"github.com/pulumi/pulumi-digitalocean/sdk/v4/go/digitalocean"
 5  	"github.com/pulumi/pulumi-std/sdk/go/std"
 6  	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 7  )
 8  
 9  func DigitalOcean(ctx *pulumi.Context, enableDroplet bool) (*digitalocean.Droplet, error) {
10  	if !enableDroplet {
11  		return nil, nil
12  	}
13  
14  	invokeFile, err := std.File(ctx, &std.FileArgs{
15  		Input: "../../.ssh/id_ed25519.pub",
16  	}, nil)
17  
18  	if err != nil {
19  		return nil, err
20  	}
21  
22  	sshKey, err := digitalocean.NewSshKey(ctx, "framework-desktop", &digitalocean.SshKeyArgs{
23  		Name:      pulumi.String("framework-desktop"),
24  		PublicKey: pulumi.String(invokeFile.Result),
25  	})
26  
27  	if err != nil {
28  		return nil, err
29  	}
30  
31  	vm, err := digitalocean.NewDroplet(ctx, "ubuntu-s-1vcpu-512mb-10gb-tor1-01", &digitalocean.DropletArgs{
32  		Name:    pulumi.String("ubuntu-s-1vcpu-512mb-10gb-tor1-01"),
33  		Image:   pulumi.String("ubuntu-24-04-x64"),
34  		Region:  pulumi.String(digitalocean.RegionTOR1),
35  		Size:    pulumi.String(digitalocean.DropletSlugDropletS1VCPU512MB10GB),
36  		Backups: pulumi.Bool(false),
37  
38  		SshKeys: pulumi.StringArray{
39  			sshKey.Fingerprint,
40  		},
41  
42  		Tags: pulumi.StringArray{
43  			pulumi.String("dev"),
44  		},
45  	})
46  
47  	if err != nil {
48  		return nil, err
49  	}
50  
51  	_, err = digitalocean.NewProject(ctx, "openws", &digitalocean.ProjectArgs{
52  		Name:        pulumi.String("openws"),
53  		Environment: pulumi.String("Development"),
54  		Purpose:     pulumi.String("Web Application"),
55  		Description: pulumi.String("A project to represent development resources."),
56  
57  		Resources: pulumi.StringArray{
58  			vm.DropletUrn,
59  		},
60  	})
61  
62  	if err != nil {
63  		return nil, err
64  	}
65  
66  	return vm, nil
67  }