platform/main.go

91 lines
2.1 KiB
Go
Raw Normal View History

2022-03-18 02:14:49 +00:00
package main
import (
"fmt"
"strconv"
2022-03-18 02:14:49 +00:00
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config"
"github.com/pulumi/pulumi-linode/sdk/v3/go/linode"
2022-03-18 02:14:49 +00:00
)
func main() {
pulumi.Run(infra)
}
func infra(ctx *pulumi.Context) error {
cfg := config.New(ctx, "")
platformConfigFile := cfg.Require("file")
p, err := newConfig(platformConfigFile)
if err != nil {
return fmt.Errorf("unable to load the platform configuration; %w", err)
2022-03-18 02:14:49 +00:00
}
if err := domain(ctx, p); err != nil {
return fmt.Errorf("unable to manage the domain; %w", err)
}
if err := records(ctx, p); err != nil {
return fmt.Errorf("unable to manage the domain records; %w", err)
}
return nil
}
func domain(ctx *pulumi.Context, cfg *platform) error {
domainArgs := linode.DomainArgs{
Description: pulumi.String(cfg.Domain.Description),
Domain: pulumi.String(cfg.Domain.Name),
SoaEmail: pulumi.String(cfg.Domain.Email),
Status: pulumi.String("active"),
Tags: pulumi.StringArray{
pulumi.String("flow"),
},
Type: pulumi.String(cfg.Domain.Type),
}
_, err := linode.NewDomain(ctx, cfg.Domain.Name, &domainArgs, pulumi.Protect(true))
if err != nil {
return err
}
return nil
}
func records(ctx *pulumi.Context, cfg *platform) error {
domainName := cfg.Domain.Name
domainArgs := linode.LookupDomainArgs{
Domain: &domainName,
}
domain, err := linode.LookupDomain(ctx, &domainArgs, nil)
if err != nil {
return fmt.Errorf("unable to lookup domain %s; %w", domainName, err)
}
domainID, err := strconv.Atoi(*domain.Id)
if err != nil {
return fmt.Errorf("unable to get the Domain ID; %w", err)
}
for _, r := range cfg.Domain.Records {
args := linode.DomainRecordArgs{
DomainId: pulumi.Int(domainID),
Name: pulumi.String(r.Name),
RecordType: pulumi.String(r.Type),
Target: pulumi.String(cfg.TempIP),
TtlSec: pulumi.Int(r.TtlSec),
}
_, err := linode.NewDomainRecord(ctx, r.Label, &args, nil)
if err != nil {
return fmt.Errorf("unable to update the domain record '%s'; %w", r.Name, err)
}
2022-03-18 02:14:49 +00:00
}
return nil
}