/
terraform.go
84 lines (79 loc) · 2.27 KB
/
terraform.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package cloud
import (
"github.com/Juniper/asf/pkg/fileutil"
"github.com/Juniper/contrail/pkg/ansible"
"github.com/Juniper/contrail/pkg/services"
"github.com/pkg/errors"
)
func destroyTopology(c *Cloud, providers []string, clusterUUID string) error {
if tfStateOutputExists(c.config.CloudID) {
if err := fileutil.WriteToFile(GetTopoFile(c.config.CloudID), []byte{}, defaultRWOnlyPerm); err != nil {
return err
}
if err := updateTopology(c, providers, clusterUUID); err != nil {
return err
}
}
return nil
}
func updateTopology(c *Cloud, providers []string, clusterUUID string) error {
workDir := GetCloudDir(c.config.CloudID)
cmd := "deployer"
args := []string{
"all", "topology",
"--topology", GetTopoFile(c.config.CloudID),
"--secret", GetSecretFile(c.config.CloudID),
"--skip_validation",
}
for _, p := range providers {
args = append(args, []string{"--limit", p}...)
}
keyPaths := services.NewKeyFileDefaults()
registry, err := c.getRegistries(clusterUUID)
if err != nil {
return errors.Wrap(err, "get registires")
}
imageRef, err := c.getMultiCloudImageRef(clusterUUID)
if err != nil {
return errors.Wrap(err, "get MultiCloud image reference")
}
return c.containerExecutor.StartExecuteAndRemove(
c.ctx,
&ansible.ContainerParameters{
ImageRef: imageRef,
ImageRefUsername: registry.Username,
ImageRefPassword: registry.Password,
HostVolumes: []ansible.Volume{
{
Source: workDir,
Target: workDir,
},
{
Source: keyPaths.KeyHomeDir,
Target: keyPaths.KeyHomeDir,
},
},
ForceContainerRecreate: true,
WorkingDirectory: workDir,
RemoveContainer: true,
OverwriteEntrypoint: true,
ContainerPrefix: MultiCloudContainerPrefix,
HostNetwork: true,
Privileged: true,
},
append([]string{cmd}, args...),
)
}
func (c *Cloud) getMultiCloudImageRef(clusterUUID string) (string, error) {
clusterResp, err := c.APIServer.GetContrailCluster(c.ctx, &services.GetContrailClusterRequest{
ID: clusterUUID,
})
if err != nil {
return "", errors.Wrap(err, "get contrail cluster")
}
return ansible.ImageReference(
clusterResp.ContrailCluster.ContainerRegistry,
MultiCloudDockerImage,
ansible.GetContrailVersion(clusterResp.ContrailCluster, c.log),
)
}