61 lines
1.7 KiB
Go
61 lines
1.7 KiB
Go
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
"regexp"
|
|
"strings"
|
|
|
|
"github.com/pulumi/pulumi-command/sdk/go/command/remote"
|
|
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
|
|
)
|
|
|
|
type SwarmJoinTokens struct {
|
|
ManagerToken string
|
|
WorkerToken string
|
|
}
|
|
|
|
func InstallAnsibleDependencies(ctx *pulumi.Context, connArgs remote.ConnectionArgs, uniqueness string) error {
|
|
_, err := remote.NewCommand(ctx, strings.Join([]string{uniqueness, "Install Ansible Dependencies"}, ": "),
|
|
&remote.CommandArgs{
|
|
Connection: connArgs,
|
|
Create: pulumi.String("apt-get update && apt-get install -y python3-pip python3-jsondiff"),
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func InitDockerSwarm(ctx *pulumi.Context, connArgs remote.ConnectionArgs, advertiseAddr pulumi.StringOutput) (pulumi.StringOutput, error) {
|
|
var tokens SwarmJoinTokens
|
|
|
|
fullCommand := advertiseAddr.ApplyT(func(addr string) *string {
|
|
initCommand := fmt.Sprintf("docker swarm init --advertise-addr %s", addr)
|
|
fullCommand := strings.Join([]string{initCommand, "echo \"Manager Token: $(docker swarm join-token -q manager)\"", "echo \"Worker Token: $(docker swarm join-token -q worker)\""}, " && ")
|
|
return &fullCommand
|
|
}).(pulumi.StringPtrOutput)
|
|
|
|
out, err := remote.NewCommand(ctx, "Init docker swarm",
|
|
&remote.CommandArgs{
|
|
Connection: connArgs,
|
|
Create: fullCommand,
|
|
})
|
|
if err != nil {
|
|
return pulumi.StringOutput{}, err
|
|
}
|
|
|
|
return out.Stdout.ApplyT(func(output string) string {
|
|
searchWorker := "Worker Token: "
|
|
pattern := regexp.MustCompile(searchWorker + `(\S+)`)
|
|
|
|
matches := pattern.FindStringSubmatch(output)
|
|
if len(matches) > 1 {
|
|
extracted := matches[1]
|
|
tokens.WorkerToken = extracted
|
|
return extracted
|
|
}
|
|
fmt.Println(tokens.WorkerToken)
|
|
return ""
|
|
}).(pulumi.StringOutput), nil
|
|
}
|