check point commit to ensure things are saved in more than one place. this commit contains the first integration of the docker build artifacts as well as the first integration of an automation test environment for MAAS based on virtual box
Change-Id: I236f12392501b4ed589aba2b748ba0c45e148f2e
diff --git a/automation/node.go b/automation/node.go
new file mode 100644
index 0000000..d364fe0
--- /dev/null
+++ b/automation/node.go
@@ -0,0 +1,116 @@
+package main
+
+import (
+ "fmt"
+
+ maas "github.com/juju/gomaasapi"
+)
+
+// MaasNodeStatus MAAS lifecycle status for nodes
+type MaasNodeStatus int
+
+// MAAS Node Statuses
+const (
+ Invalid MaasNodeStatus = -1
+ New MaasNodeStatus = 0
+ Commissioning MaasNodeStatus = 1
+ FailedCommissioning MaasNodeStatus = 2
+ Missing MaasNodeStatus = 3
+ Ready MaasNodeStatus = 4
+ Reserved MaasNodeStatus = 5
+ Deployed MaasNodeStatus = 6
+ Retired MaasNodeStatus = 7
+ Broken MaasNodeStatus = 8
+ Deploying MaasNodeStatus = 9
+ Allocated MaasNodeStatus = 10
+ FailedDeployment MaasNodeStatus = 11
+ Releasing MaasNodeStatus = 12
+ FailedReleasing MaasNodeStatus = 13
+ DiskErasing MaasNodeStatus = 14
+ FailedDiskErasing MaasNodeStatus = 15
+)
+
+var names = []string{"New", "Commissioning", "FailedCommissioning", "Missing", "Ready", "Reserved",
+ "Deployed", "Retired", "Broken", "Deploying", "Allocated", "FailedDeployment",
+ "Releasing", "FailedReleasing", "DiskErasing", "FailedDiskErasing"}
+
+func (v MaasNodeStatus) String() string {
+ return names[v]
+}
+
+// FromString lookup the constant value for a given node state name
+func FromString(name string) (MaasNodeStatus, error) {
+ for i, v := range names {
+ if v == name {
+ return MaasNodeStatus(i), nil
+ }
+ }
+ return -1, fmt.Errorf("Unknown MAAS node state name, '%s'", name)
+}
+
+// MaasNode convenience wrapper for an MAAS node on top of a generic MAAS object
+type MaasNode struct {
+ maas.MAASObject
+}
+
+// GetString get attribute value as string
+func (n *MaasNode) GetString(key string) (string, error) {
+ return n.GetMap()[key].GetString()
+}
+
+// GetFloat64 get attribute value as float64
+func (n *MaasNode) GetFloat64(key string) (float64, error) {
+ return n.GetMap()[key].GetFloat64()
+}
+
+// ID get the system id of the node
+func (n *MaasNode) ID() string {
+ id, _ := n.GetString("system_id")
+ return id
+}
+
+func (n *MaasNode) PowerState() string {
+ state, _ := n.GetString("power_state")
+ return state
+}
+
+// Hostname get the hostname
+func (n *MaasNode) Hostname() string {
+ hn, _ := n.GetString("hostname")
+ return hn
+}
+
+// MACs get the MAC Addresses
+func (n *MaasNode) MACs() []string {
+ macsObj, _ := n.GetMap()["macaddress_set"]
+ macs, _ := macsObj.GetArray()
+ if len(macs) == 0 {
+ return []string{}
+ }
+ result := make([]string, len(macs))
+ for i, mac := range macs {
+ obj, _ := mac.GetMap()
+ addr, _ := obj["mac_address"]
+ s, _ := addr.GetString()
+ result[i] = s
+ }
+
+ return result
+}
+
+// Zone get the zone
+func (n *MaasNode) Zone() string {
+ zone := n.GetMap()["zone"]
+ attrs, _ := zone.GetMap()
+ v, _ := attrs["name"].GetString()
+ return v
+}
+
+// GetInteger get attribute value as integer
+func (n *MaasNode) GetInteger(key string) (int, error) {
+ v, err := n.GetMap()[key].GetFloat64()
+ if err != nil {
+ return 0, err
+ }
+ return int(v), nil
+}