gophercloud openstack networking 源码分析

1、network 部分

// Package networks contains functionality for working with Neutron network resources.

// A network is an isolated virtual lay-2 broadcast domain that is typically reserved for

// the tenant who created it (unless you configure the network to be shared). Tenants

// can create multiple networks until the thresholds per-tenant quota is reached

//

// In the v2.0 Networking API, the network is the main entity. Ports and subnets are

// always associated with a networ

// networking/v2/networks/requests.go

// Create accepts a CreateOpts struct and creates a new network using the values

// provided. This operation does not actually require a request body , i.e. the

// CreateOpts struct argument can be empty.

//

// The tenant ID that is containd in the URI is the tenant that creates the network.

// An admin user, however, has the option of specifying another tenant ID in the

// CreateOpts struct.

1、func Create(c *gophercloud.ServiceClient, opts CreateOptsBuilder) 

1、首先调用b, err := opts.ToNetworkCreateMap(),将CreateOpts结构转换为一个map

2、调用_, r.Err = c.Post(createURL(c), b, &r.Body, nil)

CreateOpts结构如下所示:

type CreateOpts struct {

  AdminStateUp    *bool

  Name         string

  Shared        *bool

  TenantID       string

}

2、router部分

// networking/v2/extensions/layer3/routers/requests.go

// Create accepts a CreateOpts struct and uses the values to create a new

// logical router. When it is created, the router does not have an inernal interface -

// it is not associated to any subnet.

//

// You can optionally specify an external gateway for a router using the

// GatewayInfo struct. The external gateway for the router must be plugged into

// an external network (it is external if its `router:external` field is set to true)

func Create(c *gophercloud.ServiceClient, opts CreateOptsBuilder) (r CreateResult)

// networking/v2/extensions/layer3/routers/requests.go

// AddInterface attaches a subnet to an internal router interface. You must specify

// either a SubnetID or PortID in the request body. If you specify both, the operation

// will fail and an error will be returned

//

// If you specify a SubnetID, the gateway IP address for that particular subnet is

// used to create the router interface. Alternatively, if you specify a PortID, the IP

// address associated with the port is used to create the router interface.

//

// If you reference a port that is associated with multiple IP addresses, or if the port

// is associated with zero IP addresses, the operation will fail and a 400 Bad Request

// error will be returned.

//

// If you reference a port already in use, the operation will fail and a 409 Conflict

// error will be returned.

//

// The PortID that is returned using Extract() on the result of this operation can

// either be the same PortID passed in or, on the other hand, the identifier of a new

// port created by this operation. After the operation completes, the device ID of the

// port is set to the router ID, and the device owner attribute is set to 

// `network:router_interface`.

func AddInterface(c *gophercloud.ServiceClient, id string, opts AddInterfaceOptsBuilder) (r InterfaceResult)

3、subnet部分

// Package subnets containsj functionality for working with Neutron subnet resources

// A subnet represents an IP address block that can be used to assign IP addresses 

// to virtual instances. Each subnet must have a CIDR and must be associated with a 

// network. IPs can either be selected from the whole subnet CIDR or from allocation

// pools specified by the user.

//

// A subnet can also have a gateway, a list of DNS name servers, and host routes.

// This information is pushed to instances whose interfaces are associated with the 

// subnet

// networking/v2/subnets/requests.go

// Create accepts a CreateOpts struct and creates a new subnet using the values

// provided. You must remember to provide a valid NetworkID, CIDR and IP Version.

func Create(c *gophercloud.ServiceClient, opts CreateOptsBuilder) (r CreateResult)

4、port部分

// Package ports contains functionality for working with Neutron port resources.

// A port represents a virtual switch port on a logical network switch. Virtual

// instances attach theri interfaces into ports. The logical port also defines the MAC

// address and the IP address(es) to be assigned to the interfaces plugged into them

// When IP addresses are associated to a port, this is also implies the port is

// associated with a subnet, as the IP address was taken from the allocation pool for

// a specific subnet.

原文地址:https://www.cnblogs.com/YaoDD/p/6439395.html