func (c *Controller) CreateContainer(name string, interfaces []ContainerInterface) error {
	// Parse the provided interfaces
	macInterfaces, err := parseInterfaces(interfaces)
	if err != nil {
		return err
	}

	// Get all the subnets
	subnets, err := c.getSubnets()
	if err != nil {
		return err
	}

	// Create the device and first interface
	device, err := c.machine.CreateDevice(gomaasapi.CreateMachineDeviceArgs{
		Hostname:      name,
		InterfaceName: interfaces[0].Name,
		MACAddress:    interfaces[0].MACAddress,
		VLAN:          subnets[interfaces[0].Subnets[0].Name].VLAN(),
	})
	if err != nil {
		return err
	}

	// Wipe the container entry if anything fails
	success := false
	defer func() {
		if success == true {
			return
		}

		c.DeleteContainer(name)
	}()

	// Create the rest of the interfaces
	for _, iface := range interfaces[1:] {
		_, err := device.CreateInterface(gomaasapi.CreateInterfaceArgs{
			Name:       iface.Name,
			MACAddress: iface.MACAddress,
			VLAN:       subnets[iface.Subnets[0].Name].VLAN(),
		})
		if err != nil {
			return err
		}
	}

	// Get a fresh copy of the device
	device, err = c.getDevice(name)
	if err != nil {
		return err
	}

	// Setup the interfaces
	for _, entry := range device.InterfaceSet() {
		// Get our record
		iface, ok := macInterfaces[entry.MACAddress()]
		if !ok {
			return fmt.Errorf("MAAS created an interface with a bad MAC: %s", entry.MACAddress())
		}

		// Add the subnets
		for _, subnet := range iface.Subnets {
			err := entry.LinkSubnet(gomaasapi.LinkSubnetArgs{
				Mode:      gomaasapi.LinkModeStatic,
				Subnet:    subnets[subnet.Name],
				IPAddress: subnet.Address,
			})
			if err != nil {
				return err
			}
		}
	}

	success = true
	return nil
}
func (c *Controller) CreateContainer(name string, interfaces []ContainerInterface) error {
	
	macInterfaces, err := parseInterfaces(interfaces)
	if err != nil {
		return err
	}

	
	subnets, err := c.getSubnets()
	if err != nil {
		return err
	}

	
	device, err := c.machine.CreateDevice(gomaasapi.CreateMachineDeviceArgs{
		Hostname:      name,
		InterfaceName: interfaces[0].Name,
		MACAddress:    interfaces[0].MACAddress,
		VLAN:          subnets[interfaces[0].Subnets[0].Name].VLAN(),
	})
	if err != nil {
		return err
	}

	
	success := false
	defer func() {
		if success == true {
			return
		}

		c.DeleteContainer(name)
	}()

	
	for _, iface := range interfaces[1:] {
		_, err := device.CreateInterface(gomaasapi.CreateInterfaceArgs{
			Name:       iface.Name,
			MACAddress: iface.MACAddress,
			VLAN:       subnets[iface.Subnets[0].Name].VLAN(),
		})
		if err != nil {
			return err
		}
	}

	
	device, err = c.getDevice(name)
	if err != nil {
		return err
	}

	
	for _, entry := range device.InterfaceSet() {
		
		iface, ok := macInterfaces[entry.MACAddress()]
		if !ok {
			return fmt.Errorf("MAAS created an interface with a bad MAC: %s", entry.MACAddress())
		}

		
		for _, subnet := range iface.Subnets {
			err := entry.LinkSubnet(gomaasapi.LinkSubnetArgs{
				Mode:      gomaasapi.LinkModeStatic,
				Subnet:    subnets[subnet.Name],
				IPAddress: subnet.Address,
			})
			if err != nil {
				return err
			}
		}
	}

	success = true
	return nil
}
func ( c * Controller ) CreateContainer ( name string , interfaces [ ] ContainerInterface ) error { // Parse the provided interfaces macInterfaces , err := parseInterfaces ( interfaces ) if err != nil { return err } // Get all the subnets subnets , err := c . getSubnets ( ) if err != nil { return err } // Create the device and first interface device , err := c . machine . CreateDevice ( gomaasapi . CreateMachineDeviceArgs { Hostname : name , InterfaceName : interfaces [ 0 ] . Name , MACAddress : interfaces [ 0 ] . MACAddress , VLAN : subnets [ interfaces [ 0 ] . Subnets [ 0 ] . Name ] . VLAN ( ) , } ) if err != nil { return err } // Wipe the container entry if anything fails success := false defer func ( ) { if success == true { return } c . DeleteContainer ( name ) } ( ) // Create the rest of the interfaces for _ , iface := range interfaces [ 1 : ] { _ , err := device . CreateInterface ( gomaasapi . CreateInterfaceArgs { Name : iface . Name , MACAddress : iface . MACAddress , VLAN : subnets [ iface . Subnets [ 0 ] . Name ] . VLAN ( ) , } ) if err != nil { return err } } // Get a fresh copy of the device device , err = c . getDevice ( name ) if err != nil { return err } // Setup the interfaces for _ , entry := range device . InterfaceSet ( ) { // Get our record iface , ok := macInterfaces [ entry . MACAddress ( ) ] if ! ok { return fmt . Errorf ( " " , entry . MACAddress ( ) ) } // Add the subnets for _ , subnet := range iface . Subnets { err := entry . LinkSubnet ( gomaasapi . LinkSubnetArgs { Mode : gomaasapi . LinkModeStatic , Subnet : subnets [ subnet . Name ] , IPAddress : subnet . Address , } ) if err != nil { return err } } } success = true return nil }
// CreateContainer defines a new MAAS device for the controller
CreateContainer defines a new MAAS device for the controller