示例#1
0
func Get(args ...string) (string, error) {

	// 1 argument:  <entity>
	// 2 arguments: <entity> <ID>
	// 3 arguments: <entity> <ID> <children>

	if len(args) < 1 || len(args) > 3 {
		return "GET <entity> [ <ID> [ <children> ] ]  ", nil
	}

	entity := args[0]

	switch entity {
	case "enterprises":
		switch len(args) {
		case 1: // GET enterprises
			var orglist nuage_v3_2.EnterpriseSlice
			err := orglist.List(myconn)

			if err != nil {
				return "", err
			}

			// Yuck -- We need to to this hacky type cast since we can iterate through "[]nuage_v3_2.Enterprise"  but not "nuage_v3_2.EnterpriseSlice"
			var orgs []nuage_v3_2.Enterprise
			orgs = orglist

			// Iterate through the list of org's and JSON pretty-print them
			for i, v := range orgs {
				org, _ := json.MarshalIndent(v, "", "\t")
				fmt.Printf("\n\n ===> Org nr [%d]: Name [%s] <=== \n%#s\n", i, orgs[i].Name, string(org))
			}

			return "Enterprise list -- done", err

		case 2: // GET enterprises <ID>

			org := new(nuage_v3_2.Enterprise)
			org.ID = args[1]
			err := org.Get(myconn)
			if err != nil {
				return "", err
			}

			// JSON pretty-print the org
			jsonorg, _ := json.MarshalIndent(org, "", "\t")
			fmt.Printf("\n\n ===> Org: Name [%s] <=== \n%#s\n", org.Name, string(jsonorg))

			return "Enterprise Get ID -- done", err

		case 3:
			entityid := args[1]
			child := args[2]

			switch child {
			case "domaintemplates": // GET enterprises <ID> domaintemplates

				// Get list of domain templates for that org
				var dts nuage_v3_2.Domaintemplateslice
				err := dts.List(myconn, entityid)
				if err != nil {
					return "", err
				}
				// Yucky -- type cast from nuage_v3_2.Domaintemplateslice to []nuage_v3_2.Domaintemplate
				var dtl []nuage_v3_2.Domaintemplate
				dtl = dts
				// Iterate through the list of domain templates and JSON pretty-print them
				fmt.Printf("\n ######## Domain templates for Enterprise ID: [%s] ########\n", entityid)
				for i, v := range dtl {
					dt, _ := json.MarshalIndent(v, "", "\t")
					fmt.Printf("\n ===> Domain template nr [%d]: Name [%s] <=== \n%#s\n", i, dtl[i].Name, string(dt))
				}

				return "Domain template list -- done", err

			case "domains": // GET enterprises <ID> domains
				// Get list of domains for the Enterprise ID

				var ds nuage_v3_2.Domainslice
				err := ds.List(myconn, entityid)
				if err != nil {
					return "", err
				}
				// Yucky -- type cast from nuage_v3_2.Domainslice to []nuage_v3_2.Domain
				var dl []nuage_v3_2.Domain
				dl = ds
				// Iterate through the list of domains and JSON pretty-print them
				fmt.Printf("\n ######## Domains for Enterprise ID: [%s] ########\n", entityid)
				for i, v := range dl {
					domain, _ := json.MarshalIndent(v, "", "\t")
					fmt.Printf("\n ===> Domain nr [%d]: Name [%s] <=== \n%#s\n", i, dl[i].Name, string(domain))
				}

				return "Domain list -- done", err
			}
		}
	case "domaintemplates":
		switch len(args) {
		case 2: // GET domaintemplates <ID>
			dt := new(nuage_v3_2.Domaintemplate)
			dt.ID = args[1]
			err := dt.Get(myconn)

			if err != nil {
				return "", err
			}
			// JSON pretty-print the domain template
			jsondt, _ := json.MarshalIndent(dt, "", "\t")
			fmt.Printf("\n ===> Domain Template: Name [%s] <=== \n%#s\n", dt.Name, string(jsondt))
			return "Domain Template Get -- done", err
		case 3:
			dtid := args[1]
			child := args[2]
			switch child {
			case "zonetemplates": // GET domaintemplates <ID> zonetemplates
				var zts nuage_v3_2.Zonetemplateslice
				err := zts.List(myconn, dtid)
				if err != nil {
					return "", err
				}
				// Yucky -- type cast from nuage_v3_2.Zonetemplateslice to []nuage_v3_2.Zonetemplate
				var zta []nuage_v3_2.Zonetemplate
				zta = zts
				// Iterate through the list of zone templates and JSON pretty-print them
				fmt.Printf("\n ######## Zone templates for Domain template ID: [%s] ########\n", dtid)
				for i, v := range zta {
					zt, _ := json.MarshalIndent(v, "", "\t")
					fmt.Printf("\n ===> Zone template nr [%d]: Name [%s] <=== \n%#s\n", i, zta[i].Name, string(zt))
				}

				return "Zone template list -- done", err
			}

		}
	case "domains":
		switch len(args) {
		case 1: // GET domains
			// Get list of domains with "nil" as parent enterprise -- i.e. global list of all domains
			var ds nuage_v3_2.Domainslice
			err := ds.List(myconn, "")
			if err != nil {
				return "", err
			}
			// Yucky -- type cast from nuage_v3_2.Domainslice to []nuage_v3_2.Domain
			var dl []nuage_v3_2.Domain
			dl = ds
			for i, v := range dl {
				jsondomain, _ := json.MarshalIndent(v, "", "\t")
				fmt.Printf("\n ===> Domain nr [%d]: Name [%s] <=== \n%#s\n", i, dl[i].Name, string(jsondomain))
			}
			return "Domain list -- done", err
		case 2: // GET domains <ID>
			// Get a specific Domain ID
			domain := new(nuage_v3_2.Domain)
			domain.ID = args[1]
			err := domain.Get(myconn)
			if err != nil {
				return "", err
			}
			jsondomain, _ := json.MarshalIndent(domain, "", "\t")
			fmt.Printf("\n ===> Domain Name [%s] <=== \n%#s\n", domain.Name, string(jsondomain))
			return "Domain Get -- done", err
		case 3:
			switch args[2] {
			case "vports": // GET domains <ID> vports
				var vports []nuage_v3_2.VPort
				var err error
				domain := new(nuage_v3_2.Domain)
				domain.ID = args[1]
				vports, err = domain.VPortsList(myconn)
				if err != nil {
					return "", err
				}
				for i, v := range vports {
					jsonvport, _ := json.MarshalIndent(v, "", "\t")
					fmt.Printf("\n ===> VPort nr [%d]: Name [%s] <=== \n%#s\n", i, vports[i].Name, string(jsonvport))
				}
				return "Domain VPorts list -- done", err

			case "vminterfaces": // GET domains <ID> vminterfaces
				// var vmis []nuage_v3_2.VMInterface
				// var err error
				var domain nuage_v3_2.Domain
				domain.ID = args[1]
				vmis, err := (&domain).VMInterfacesList(myconn)
				if err != nil {
					return "", err
				}
				for i, v := range vmis {
					jsonvmi, _ := json.MarshalIndent(v, "", "\t")
					fmt.Printf("\n ===> VMInterface nr [%d]: Name [%s] <=== \n%#s\n", i, vmis[i].Name, string(jsonvmi))
				}
				return "Subnet VMInterfaces list -- done", err

			}
		}
	case "zonetemplates":
		if len(args) < 2 {
			return "Format:\n    GET zonetemplates <ID>", nil
		}

		switch len(args) {
		case 2: // GET zonetemplates <ID>
			zt := new(nuage_v3_2.Zonetemplate)
			zt.ID = args[1]
			err := zt.Get(myconn)

			if err != nil {
				return "", err
			}
			// JSON pretty-print the zone template
			jsonzt, _ := json.MarshalIndent(zt, "", "\t")
			fmt.Printf("\n ===> Zone Template: Name [%s] <=== \n%#s\n", zt.Name, string(jsonzt))
			return "Zone Template Get -- done", err
		}
	case "zones":
		switch len(args) {
		case 1: // GET zones
			// Get list of zones with "nil" as parent domain -- i.e. global list of all zones
			var zs nuage_v3_2.Zoneslice
			err := zs.List(myconn, "")
			if err != nil {
				return "", err
			}
			// Yucky -- type cast from nuage_v3_2.Zoneslice to []nuage_v3_2.Zone
			var zl []nuage_v3_2.Zone
			zl = zs
			for i, v := range zl {
				jsonzone, _ := json.MarshalIndent(v, "", "\t")
				fmt.Printf("\n ===> Zone nr [%d]: Name [%s] <=== \n%#s\n", i, zl[i].Name, string(jsonzone))
			}
			return "Zone list -- done", err
		case 2: // GET zones <ID>
			// Get a specific Zone ID
			zone := new(nuage_v3_2.Zone)
			zone.ID = args[1]
			err := zone.Get(myconn)
			if err != nil {
				return "", err
			}
			jsonzone, _ := json.MarshalIndent(zone, "", "\t")
			fmt.Printf("\n ===> Zone Name [%s] <=== \n%#s\n", zone.Name, string(jsonzone))
			return "Zone Get -- done", err
		}

	case "subnets":
		switch len(args) {
		case 1: // GET subnets
			// Get list of subnets with "nil" as parent domain -- i.e. global list of all subnets
			var ss nuage_v3_2.Subnetslice
			err := ss.List(myconn, "")
			if err != nil {
				return "", err
			}
			// Yucky -- type cast from nuage_v3_2.Subnetslice to []nuage_v3_2.Subnet
			var za []nuage_v3_2.Subnet
			za = ss
			for i, v := range za {
				jsonsubnet, _ := json.MarshalIndent(v, "", "\t")
				fmt.Printf("\n ===> Subnet nr [%d]: Name [%s] <=== \n%#s\n", i, za[i].Name, string(jsonsubnet))
			}
			return "Subnet list -- done", err
		case 2: // GET subnets <ID>
			// Get a specific Subnet ID
			subnet := new(nuage_v3_2.Subnet)
			subnet.ID = args[1]
			err := subnet.Get(myconn)
			if err != nil {
				return "", err
			}
			jsonsubnet, _ := json.MarshalIndent(subnet, "", "\t")
			fmt.Printf("\n ===> Subnet Name [%s] <=== \n%#s\n", subnet.Name, string(jsonsubnet))
			return "Subnet Get -- done", err

		case 3:
			switch args[2] {
			case "vports": // GET subnets <ID> vports
				var vports []nuage_v3_2.VPort
				var err error
				subnet := new(nuage_v3_2.Subnet)
				subnet.ID = args[1]
				vports, err = subnet.VPortsList(myconn)
				if err != nil {
					return "", err
				}
				for i, v := range vports {
					jsonvport, _ := json.MarshalIndent(v, "", "\t")
					fmt.Printf("\n ===> VPort nr [%d]: Name [%s] <=== \n%#s\n", i, vports[i].Name, string(jsonvport))
				}
				return "Subnet VPorts list -- done", err
			case "vminterfaces": // GET subnets <ID> vminterfaces
				var vmis []nuage_v3_2.VMInterface
				var err error
				var subnet nuage_v3_2.Subnet
				subnet.ID = args[1]
				vmis, err = (&subnet).VMInterfacesList(myconn)
				if err != nil {
					return "", err
				}
				for i, v := range vmis {
					jsonvmi, _ := json.MarshalIndent(v, "", "\t")
					fmt.Printf("\n ===> VMInterface nr [%d]: Name [%s] <=== \n%#s\n", i, vmis[i].Name, string(jsonvmi))
				}
				return "Subnet VMInterfaces list -- done", err

			}
		}

	case "vports": // GET vports <ID>
		if len(args) != 2 {
			return "Format:\n    GET vports <ID>", nil
		}
		vport := new(nuage_v3_2.VPort)
		vport.ID = args[1]
		err := vport.Get(myconn)
		if err != nil {
			return "", err
		}
		jsonvport, _ := json.MarshalIndent(vport, "", "\t")
		fmt.Printf("\n ===> VPort Name [%s] <=== \n%#s\n", vport.Name, string(jsonvport))
		return "VPort Get -- done", err

	case "vminterfaces":
		switch len(args) {
		case 1: // GET vminterfaces
			var vmis nuage_v3_2.VMInterfaceslice
			err := vmis.List(myconn)
			if err != nil {
				return "", err
			}
			// Yucky -- type cast from nuage_v3_2.VMInterfaceslice to []nuage_v3_2.VMInterface
			var vmia []nuage_v3_2.VMInterface
			vmia = vmis
			for i, v := range vmia {
				jsonvminterface, _ := json.MarshalIndent(v, "", "\t")
				fmt.Printf("\n ===> VMInterface nr [%d]: Name [%s] <=== \n%#s\n", i, vmia[i].Name, string(jsonvminterface))
			}
			return "VMinterfaces list -- done", err

		case 2: // GET vminterfaces <ID>
			var vminterface nuage_v3_2.VMInterface
			vminterface.ID = args[1]
			err := (&vminterface).Get(myconn)
			if err != nil {
				return "", err
			}
			jsonvminterface, _ := json.MarshalIndent(vminterface, "", "\t")
			fmt.Printf("\n ===> VMinterface Name [%s] <=== \n%#s\n", vminterface.Name, string(jsonvminterface))
			return "VMinterface Get -- done", err
		}

	case "vms":
		switch len(args) {
		case 1: // GET vms
			var vms nuage_v3_2.VirtualMachineslice
			err := vms.List(myconn)
			if err != nil {
				return "", err
			}
			// Yucky -- type cast from nuage_v3_2.VirtualMachineslice to []nuage_v3_2.VirtualMachine
			var vma []nuage_v3_2.VirtualMachine
			vma = vms
			for i, v := range vma {
				jsonvm, _ := json.MarshalIndent(v, "", "\t")
				fmt.Printf("\n ===> VirtualMachine nr [%d]: Name [%s] <=== \n%#s\n", i, vma[i].Name, string(jsonvm))
			}
			return "VirtualMachine list -- done", err

		case 2: // GET vms <ID>
			var vm nuage_v3_2.VirtualMachine
			vm.ID = args[1]
			err := (&vm).Get(myconn)
			if err != nil {
				return "", err
			}
			jsonvm, _ := json.MarshalIndent(vm, "", "\t")
			fmt.Printf("\n ===> VirtualMachine Name [%s] <=== \n%#s\n", vm.Name, string(jsonvm))
			return "Virtual Machine Get -- done", err
		}

	default:
		// Unknown entity request
		break
	}
	return "Don't know how to process Nuage API entity: " + strings.Join(args, " "), nil
}