/
doit_group.go
58 lines (51 loc) · 1.6 KB
/
doit_group.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
package doittypes
import (
"database/sql"
"fmt"
"time"
)
//Group a container for host and var entities
type Group struct {
ID int `sql:"not null;unique;AUTO_INCREMENT" json:"id"`
Name string `json:"name"`
Domain *Domain `json:"-"`
DomainID sql.NullInt64 `json:"-"`
Hosts []*Host `gorm:"many2many:group_hosts;" json:"hosts,omitempty"`
Vars []*Var `gorm:"many2many:group_vars;" json:"vars,omitempty"`
CreatedAt time.Time `json:"-"`
UpdatedAt time.Time `json:"-"`
}
//MarshalAnsilbe mashals the struct into an Ansible supported JSON
func (g *Group) MarshalAnsible() map[string]interface{} {
//vars
var vStrs, hStrs []map[string]interface{}
var hm, vm map[string]interface{}
if len(g.Hosts) > 0 {
for i := range g.Hosts {
hStrs = append(hStrs, g.Hosts[i].MarshalAnsible())
}
hm = map[string]interface{}{"hosts": hStrs}
}
if len(g.Vars) > 0 {
for i := range g.Vars {
vStrs = append(vStrs, g.Vars[i].MarshalAnsible())
}
vm = map[string]interface{}{"vars": vStrs}
}
if len(g.Hosts) > 0 && len(g.Vars) > 0 {
fmt.Println(1, 1)
return map[string]interface{}{g.Name: []map[string]interface{}{hm, vm}}
} else if len(g.Hosts) == 0 && len(g.Vars) > 0 {
fmt.Println(0, 1)
return map[string]interface{}{g.Name: vm}
} else if len(g.Hosts) > 0 && len(g.Vars) == 0 {
fmt.Println(1, 0)
return map[string]interface{}{g.Name: hm}
}
return map[string]interface{}{g.Name: ""}
}
type GroupMatrix struct {
ID int `sql:"not null;unique;AUTO_INCREMENT" json:"id"`
GroupID int
Groups []Group `gorm:"many2many:group_groupmatrixes;"`
}