terraform/builtin/providers/rancher/util.go

83 lines
1.8 KiB
Go

package rancher
import (
"fmt"
"net/url"
"strings"
"github.com/rancher/go-rancher/v2"
)
const (
stateRemoved = "removed"
statePurged = "purged"
)
// GetActiveOrchestration get the name of the active orchestration for a environment
func getActiveOrchestration(project *client.Project) string {
return project.Orchestration
}
func removed(state string) bool {
return state == stateRemoved || state == statePurged
}
func splitID(id string) (envID, resourceID string) {
if strings.Contains(id, "/") {
return id[0:strings.Index(id, "/")], id[strings.Index(id, "/")+1:]
}
return "", id
}
// NewListOpts wraps around client.NewListOpts()
func NewListOpts() *client.ListOpts {
return client.NewListOpts()
}
func populateProjectTemplateIDs(config *Config) error {
cli, err := config.GlobalClient()
if err != nil {
return err
}
for projectTemplate := range defaultProjectTemplates {
templates, err := cli.ProjectTemplate.List(&client.ListOpts{
Filters: map[string]interface{}{
"isPublic": true,
"name": projectTemplate,
"sort": "created",
},
})
if err != nil {
return err
}
if len(templates.Data) > 0 {
defaultProjectTemplates[projectTemplate] = templates.Data[0].Id
}
}
return nil
}
func addHostLabels(command string, labels map[string]interface{}) string {
result := []string{}
hostLabels := url.Values{}
if len(labels) == 0 {
return command
}
tokenizedCommand := strings.Split(command, " ")
if len(tokenizedCommand) > 0 {
result = append(result, tokenizedCommand[:3]...)
for k, v := range labels {
hostLabels.Add(k, v.(string))
}
strHostLabels := hostLabels.Encode()
result = append(result, "-e", fmt.Sprintf("CATTLE_HOST_LABELS='%s'", strHostLabels))
result = append(result, tokenizedCommand[3:]...)
}
return strings.Join(result, " ")
}