func (api *MachinerAPI) setOneMachineNetworkConfig(m *state.Machine, networkConfig []params.NetworkConfig) error { devicesArgs, devicesAddrs := networkingcommon.NetworkConfigsToStateArgs(networkConfig) logger.Debugf("setting devices: %+v", devicesArgs) if err := m.SetParentLinkLayerDevicesBeforeTheirChildren(devicesArgs); err != nil { return errors.Trace(err) } logger.Debugf("setting addresses: %+v", devicesAddrs) if err := m.SetDevicesAddressesIdempotently(devicesAddrs); err != nil { return errors.Trace(err) } logger.Debugf("updated machine %q network config", m.Id()) return nil }
// SetInstanceInfo sets the provider specific machine id, nonce, // metadata and network info for each given machine. Once set, the // instance id cannot be changed. func (p *ProvisionerAPI) SetInstanceInfo(args params.InstancesInfo) (params.ErrorResults, error) { result := params.ErrorResults{ Results: make([]params.ErrorResult, len(args.Machines)), } canAccess, err := p.getAuthFunc() if err != nil { return result, err } setInstanceInfo := func(arg params.InstanceInfo) error { tag, err := names.ParseMachineTag(arg.Tag) if err != nil { return common.ErrPerm } machine, err := p.getMachine(canAccess, tag) if err != nil { return err } volumes, err := storagecommon.VolumesToState(arg.Volumes) if err != nil { return err } volumeAttachments, err := storagecommon.VolumeAttachmentInfosToState(arg.VolumeAttachments) if err != nil { return err } devicesArgs, devicesAddrs := networkingcommon.NetworkConfigsToStateArgs(arg.NetworkConfig) err = machine.SetInstanceInfo( arg.InstanceId, arg.Nonce, arg.Characteristics, devicesArgs, devicesAddrs, volumes, volumeAttachments, ) if err != nil { return errors.Annotatef(err, "cannot record provisioning info for %q", arg.InstanceId) } return nil } for i, arg := range args.Machines { err := setInstanceInfo(arg) result.Results[i].Error = common.ServerError(err) } return result, nil }
func (s *TypesSuite) TestNetworkConfigsToStateArgs(c *gc.C) { devicesArgs, devicesAddrs := networkingcommon.NetworkConfigsToStateArgs(expectedSortedMergedNetworkConfigs) c.Check(devicesArgs, jc.DeepEquals, expectedLinkLayerDeviceArgsWithMergedNetworkConfig) c.Check(devicesAddrs, jc.DeepEquals, expectedLinkLayerDeviceAdressesWithMergedNetworkConfig) }