/
blockstorage_extensions.go
84 lines (64 loc) · 2.31 KB
/
blockstorage_extensions.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 nhncloud
import (
"bytes"
"fmt"
"github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/schedulerhints"
"github.com/gophercloud/utils/terraform/hashcode"
)
func expandBlockStorageExtensionsSchedulerHints(v schedulerhints.SchedulerHints) map[string]interface{} {
schedulerHints := make(map[string]interface{})
differentHost := make([]interface{}, len(v.DifferentHost))
for i, dh := range v.DifferentHost {
differentHost[i] = dh
}
sameHost := make([]interface{}, len(v.SameHost))
for i, sh := range v.SameHost {
sameHost[i] = sh
}
schedulerHints["different_host"] = differentHost
schedulerHints["same_host"] = sameHost
schedulerHints["local_to_instance"] = v.LocalToInstance
schedulerHints["query"] = v.Query
schedulerHints["additional_properties"] = v.AdditionalProperties
return schedulerHints
}
func blockStorageExtensionsSchedulerHintsHash(v interface{}) int {
var buf bytes.Buffer
m := v.(map[string]interface{})
if m["query"] != nil {
buf.WriteString(fmt.Sprintf("%s-", m["query"].(string)))
}
if m["local_to_instance"] != nil {
buf.WriteString(fmt.Sprintf("%s-", m["local_to_instance"].(string)))
}
if m["additional_properties"] != nil {
for _, v := range m["additional_properties"].(map[string]interface{}) {
buf.WriteString(fmt.Sprintf("%s-", v))
}
}
buf.WriteString(fmt.Sprintf("%s-", m["different_host"].([]interface{})))
buf.WriteString(fmt.Sprintf("%s-", m["same_host"].([]interface{})))
return hashcode.String(buf.String())
}
func resourceBlockStorageSchedulerHints(schedulerHintsRaw map[string]interface{}) schedulerhints.SchedulerHints {
schedulerHints := schedulerhints.SchedulerHints{
Query: schedulerHintsRaw["query"].(string),
LocalToInstance: schedulerHintsRaw["local_to_instance"].(string),
AdditionalProperties: schedulerHintsRaw["additional_properties"].(map[string]interface{}),
}
if v, ok := schedulerHintsRaw["different_host"].([]interface{}); ok {
differentHost := make([]string, len(v))
for i, dh := range v {
differentHost[i] = dh.(string)
}
schedulerHints.DifferentHost = differentHost
}
if v, ok := schedulerHintsRaw["same_host"].([]interface{}); ok {
sameHost := make([]string, len(v))
for i, sh := range v {
sameHost[i] = sh.(string)
}
schedulerHints.SameHost = sameHost
}
return schedulerHints
}