// OpenedPorts returns a map of network.PortRange to unit tag for all opened // port ranges on the machine for the subnet matching given subnetTag. func (m *Machine) OpenedPorts(subnetTag names.SubnetTag) (map[network.PortRange]names.UnitTag, error) { var results params.MachinePortsResults var subnetTagAsString string if subnetTag.Id() != "" { subnetTagAsString = subnetTag.String() } args := params.MachinePortsParams{ Params: []params.MachinePorts{ {MachineTag: m.tag.String(), SubnetTag: subnetTagAsString}, }, } err := m.st.facade.FacadeCall("GetMachinePorts", args, &results) if err != nil { return nil, err } if len(results.Results) != 1 { return nil, fmt.Errorf("expected 1 result, got %d", len(results.Results)) } result := results.Results[0] if result.Error != nil { return nil, result.Error } // Convert string tags to names.UnitTag before returning. endResult := make(map[network.PortRange]names.UnitTag) for _, ports := range result.Ports { unitTag, err := names.ParseUnitTag(ports.UnitTag) if err != nil { return nil, err } endResult[ports.PortRange.NetworkPortRange()] = unitTag } return endResult, nil }
// CreateSubnet creates a new subnet with the provider. func (api *API) CreateSubnet(subnet names.SubnetTag, space names.SpaceTag, zones []string, isPublic bool) error { var response params.ErrorResults params := params.CreateSubnetsParams{ Subnets: []params.CreateSubnetParams{{ SubnetTag: subnet.String(), SpaceTag: space.String(), Zones: zones, IsPublic: isPublic, }}, } err := api.facade.FacadeCall("CreateSubnets", params, &response) if err != nil { return errors.Trace(err) } return response.OneError() }
// AddSubnet adds an existing subnet to the environment. func (api *API) AddSubnet(subnet names.SubnetTag, providerId network.Id, space names.SpaceTag, zones []string) error { var response params.ErrorResults // Prefer ProviderId when set over CIDR. subnetTag := subnet.String() if providerId != "" { subnetTag = "" } params := params.AddSubnetsParams{ Subnets: []params.AddSubnetParams{{ SubnetTag: subnetTag, SubnetProviderId: string(providerId), SpaceTag: space.String(), Zones: zones, }}, } err := api.facade.FacadeCall("AddSubnets", params, &response) if err != nil { return errors.Trace(err) } return response.OneError() }