-
Notifications
You must be signed in to change notification settings - Fork 23
/
store_nodes.go
75 lines (68 loc) · 3.07 KB
/
store_nodes.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
// Copyright 2018 Bull S.A.S. Atos Technologies - Bull, Rue Jean Jaures, B.P.68, 78340, Les Clayes-sous-Bois, France.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package internal
import (
"context"
"os"
"path"
"path/filepath"
"strconv"
"strings"
"github.com/ystia/yorc/v3/helper/consulutil"
"github.com/ystia/yorc/v3/log"
"github.com/ystia/yorc/v3/tosca"
)
// storeNodes stores topology nodes
func storeNodes(ctx context.Context, consulStore consulutil.ConsulStore, topology tosca.Topology, topologyPrefix, importPath, rootDefPath string) {
nodesPrefix := path.Join(topologyPrefix, "nodes")
for nodeName, node := range topology.TopologyTemplate.NodeTemplates {
nodePrefix := nodesPrefix + "/" + nodeName
consulStore.StoreConsulKeyAsString(nodePrefix+"/type", node.Type)
if node.Directives != nil {
consulStore.StoreConsulKeyAsString(
path.Join(nodePrefix, "directives"),
strings.Join(node.Directives, ","))
}
storeMapValueAssignment(consulStore, path.Join(nodePrefix, "properties"), node.Properties)
storeMapValueAssignment(consulStore, path.Join(nodePrefix, "attributes"), node.Attributes)
capabilitiesPrefix := nodePrefix + "/capabilities"
for capName, capability := range node.Capabilities {
capabilityPrefix := capabilitiesPrefix + "/" + capName
storeMapValueAssignment(consulStore, path.Join(capabilityPrefix, "properties"), capability.Properties)
storeMapValueAssignment(consulStore, path.Join(capabilityPrefix, "attributes"), capability.Attributes)
}
requirementsPrefix := nodePrefix + "/requirements"
for reqIndex, reqValueMap := range node.Requirements {
for reqName, reqValue := range reqValueMap {
reqPrefix := requirementsPrefix + "/" + strconv.Itoa(reqIndex)
StoreRequirementAssignment(consulStore, reqValue, reqPrefix, reqName)
}
}
artifactsPrefix := nodePrefix + "/artifacts"
for artName, artDef := range node.Artifacts {
artFile := filepath.Join(rootDefPath, filepath.FromSlash(path.Join(importPath, artDef.File)))
log.Debugf("Looking if artifact %q exists on filesystem", artFile)
if _, err := os.Stat(artFile); os.IsNotExist(err) {
log.Printf("Warning: Artifact %q for node %q with computed path %q doesn't exists on filesystem, ignoring it.", artName, nodeName, artFile)
continue
}
storeArtifact(consulStore, artDef, path.Join(artifactsPrefix, artName))
}
metadataPrefix := nodePrefix + "/metadata/"
for metaName, metaValue := range node.Metadata {
consulStore.StoreConsulKeyAsString(metadataPrefix+metaName, metaValue)
}
storeInterfaces(consulStore, node.Interfaces, nodePrefix, false)
}
}