当前位置: 首页>>代码示例>>Golang>>正文


Golang cluster.MasterPostReq函数代码示例

本文整理汇总了Golang中github.com/contiv/netplugin/netplugin/cluster.MasterPostReq函数的典型用法代码示例。如果您正苦于以下问题:Golang MasterPostReq函数的具体用法?Golang MasterPostReq怎么用?Golang MasterPostReq使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。


在下文中一共展示了MasterPostReq函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。

示例1: requestAddress

// requestAddress
func requestAddress() func(http.ResponseWriter, *http.Request) {
	return func(w http.ResponseWriter, r *http.Request) {
		var (
			content []byte
			err     error
			areq    = api.RequestAddressRequest{}
			decoder = json.NewDecoder(r.Body)
		)

		logEvent("requestAddress")

		// Decode the JSON message
		err = decoder.Decode(&areq)
		if err != nil {
			httpError(w, "Could not read and parse requestAddress request", err)
			return
		}

		log.Infof("Received RequestAddressRequest: %+v", areq)

		// Build an alloc request to be sent to master
		allocReq := master.AddressAllocRequest{
			NetworkID:            areq.PoolID,
			PreferredIPv4Address: areq.Address,
		}

		subnetLen := strings.Split(areq.PoolID, "/")[1]

		var addr string
		if areq.Address != "" {
			addr = areq.Address + "/" + subnetLen
		} else {
			// Make a REST call to master
			var allocResp master.AddressAllocResponse
			err = cluster.MasterPostReq("/plugin/allocAddress", &allocReq, &allocResp)
			if err != nil {
				httpError(w, "master failed to allocate address", err)
				return
			}

			addr = allocResp.IPv4Address
		}

		// build response
		aresp := api.RequestAddressResponse{
			Address: addr,
		}

		log.Infof("Sending RequestAddressResponse: %+v", aresp)

		// build json
		content, err = json.Marshal(aresp)
		if err != nil {
			httpError(w, "Could not generate requestAddress response", err)
			return
		}

		w.Write(content)
	}
}
开发者ID:rtrentin73,项目名称:netplugin,代码行数:61,代码来源:ipamDriver.go

示例2: createEP

// createEP creates the specified EP in contiv
func createEP(req *epSpec) (*epAttr, error) {

	// if the ep already exists, treat as error for now.
	netID := req.Network + "." + req.Tenant
	ep, err := netdGetEndpoint(netID + "-" + req.EndpointID)
	if err == nil {
		return nil, fmt.Errorf("EP %s already exists", req.EndpointID)
	}

	// Build endpoint request
	mreq := master.CreateEndpointRequest{
		TenantName:   req.Tenant,
		NetworkName:  req.Network,
		ServiceName:  req.Group,
		EndpointID:   req.EndpointID,
		EPCommonName: req.Name,
		ConfigEP: intent.ConfigEP{
			Container:   req.EndpointID,
			Host:        pluginHost,
			ServiceName: req.Group,
		},
	}

	var mresp master.CreateEndpointResponse
	err = cluster.MasterPostReq("/plugin/createEndpoint", &mreq, &mresp)
	if err != nil {
		epCleanUp(req)
		return nil, err
	}

	log.Infof("Got endpoint create resp from master: %+v", mresp)

	// Ask netplugin to create the endpoint
	err = netPlugin.CreateEndpoint(netID + "-" + req.EndpointID)
	if err != nil {
		log.Errorf("Endpoint creation failed. Error: %s", err)
		epCleanUp(req)
		return nil, err
	}

	ep, err = netdGetEndpoint(netID + "-" + req.EndpointID)
	if err != nil {
		epCleanUp(req)
		return nil, err
	}

	log.Debug(ep)
	// need to get the subnetlen from nw state.
	nw, err := netdGetNetwork(netID)
	if err != nil {
		return nil, err
	}

	epResponse := epAttr{}
	epResponse.PortName = ep.PortName
	epResponse.IPAddress = ep.IPAddress + "/" + strconv.Itoa(int(nw.SubnetLen))
	epResponse.Gateway = nw.Gateway

	return &epResponse, nil
}
开发者ID:jojimt,项目名称:netplugin,代码行数:61,代码来源:driver.go

示例3: deleteEndpoint

// deleteEndpoint deletes an endpoint using netplugin api
func (its *integTestSuite) deleteEndpoint(tenantName, netName, epgName string, epCfg *mastercfg.CfgEndpointState) error {
	// Build endpoint delete request
	delreq := master.DeleteEndpointRequest{
		TenantName:  tenantName,
		NetworkName: netName,
		ServiceName: epgName,
		EndpointID:  epCfg.EndpointID,
	}

	var delResp master.DeleteEndpointResponse
	err := cluster.MasterPostReq("/plugin/deleteEndpoint", &delreq, &delResp)
	if err != nil {
		log.Errorf("master failed to delete endpoint. Err: %v", err)
		return err
	}

	// delete the endpoint
	err = its.npcluster.PluginAgent.Plugin().DeleteEndpoint(epCfg.ID)
	if err != nil {
		log.Errorf("Error deleting endpoint %s. Err: %v", epCfg.ID, err)
		return err
	}

	return nil
}
开发者ID:jojimt,项目名称:netplugin,代码行数:26,代码来源:utils_test.go

示例4: deleteMasterEndPoint

func (cniReq *cniServer) deleteMasterEndPoint() error {

	// delete from master
	delReq := master.DeleteEndpointRequest{
		TenantName:  cniReq.endPointLabels[cniapi.LabelTenantName],
		NetworkName: cniReq.endPointLabels[cniapi.LabelNetworkName],
		ServiceName: cniReq.endPointLabels[cniapi.LabelNetworkGroup],
		EndpointID:  cniReq.pluginArgs.CniContainerid,
	}

	delResp := master.DeleteEndpointResponse{}
	if err := cluster.MasterPostReq("/plugin/deleteEndpoint", &delReq, &delResp); err != nil {
		cniLog.Errorf("failed to delete endpoint %s from master %s ", cniReq.endpointID, err.Error())
		return err
	}
	return nil
}
开发者ID:jojimt,项目名称:netplugin,代码行数:17,代码来源:cnidriver.go

示例5: processInfraNwCreate

// Process Infra Nw Create
// Auto allocate an endpoint for this node
func processInfraNwCreate(netPlugin *plugin.NetPlugin, nwCfg *mastercfg.CfgNetworkState, opts cliOpts) (err error) {
	pluginHost := opts.hostLabel

	// Build endpoint request
	mreq := master.CreateEndpointRequest{
		TenantName:  nwCfg.Tenant,
		NetworkName: nwCfg.NetworkName,
		EndpointID:  pluginHost,
		ConfigEP: intent.ConfigEP{
			Container: pluginHost,
			Host:      pluginHost,
		},
	}

	var mresp master.CreateEndpointResponse
	err = cluster.MasterPostReq("/plugin/createEndpoint", &mreq, &mresp)
	if err != nil {
		log.Errorf("master failed to create endpoint %s", err)
		return err
	}

	log.Infof("Got endpoint create resp from master: %+v", mresp)

	// Take lock to ensure netPlugin processes only one cmd at a time
	netPlugin.Lock()
	defer func() { netPlugin.Unlock() }()

	// Ask netplugin to create the endpoint
	netID := nwCfg.NetworkName + "." + nwCfg.Tenant
	err = netPlugin.CreateEndpoint(netID + "-" + pluginHost)
	if err != nil {
		log.Errorf("Endpoint creation failed. Error: %s", err)
		return err
	}

	// Assign IP to interface
	ipCIDR := fmt.Sprintf("%s/%d", mresp.EndpointConfig.IPAddress, nwCfg.SubnetLen)
	err = netutils.SetInterfaceIP(nwCfg.NetworkName, ipCIDR)
	if err != nil {
		log.Errorf("Could not assign ip: %s", err)
		return err
	}

	return nil
}
开发者ID:karamsivia,项目名称:netplugin,代码行数:47,代码来源:netd.go

示例6: allocAddress

// allocAddress gets an address from the master
func (its *integTestSuite) allocAddress(addrPool, networkID, prefAddress string) (string, error) {
	// Build an alloc request to be sent to master
	allocReq := master.AddressAllocRequest{
		AddressPool:          addrPool,
		NetworkID:            networkID,
		PreferredIPv4Address: prefAddress,
	}

	// Make a REST call to master
	var allocResp master.AddressAllocResponse
	err := cluster.MasterPostReq("/plugin/allocAddress", &allocReq, &allocResp)
	if err != nil {
		log.Errorf("master failed to allocate address. Err: %v", err)
		return "", err
	}

	return strings.Split(allocResp.IPv4Address, "/")[0], nil
}
开发者ID:jojimt,项目名称:netplugin,代码行数:19,代码来源:utils_test.go

示例7: epCleanUp

// epCleanUp deletes the ep from netplugin and netmaster
func epCleanUp(req *epSpec) error {
	// first delete from netplugin
	// ignore any errors as this is best effort
	netID := req.Network + "." + req.Tenant
	err1 := netPlugin.DeleteEndpoint(netID + "-" + req.EndpointID)

	// now delete from master
	delReq := master.DeleteEndpointRequest{
		TenantName:  req.Tenant,
		NetworkName: req.Network,
		ServiceName: req.Group,
		EndpointID:  req.EndpointID,
	}

	var delResp master.DeleteEndpointResponse
	err2 := cluster.MasterPostReq("/plugin/deleteEndpoint", &delReq, &delResp)

	if err1 != nil {
		return err1
	}

	return err2
}
开发者ID:abhinandanpb,项目名称:netplugin,代码行数:24,代码来源:driver.go

示例8: processInfraNwDelete

// Process Infra Nw Delete
// Delete the auto allocated endpoint
func processInfraNwDelete(netPlugin *plugin.NetPlugin, nwCfg *mastercfg.CfgNetworkState, opts cliOpts) (err error) {
	pluginHost := opts.hostLabel

	// Build endpoint request
	mreq := master.DeleteEndpointRequest{
		TenantName:  nwCfg.Tenant,
		NetworkName: nwCfg.NetworkName,
		EndpointID:  pluginHost,
	}

	var mresp master.DeleteEndpointResponse
	err = cluster.MasterPostReq("/plugin/deleteEndpoint", &mreq, &mresp)
	if err != nil {
		log.Errorf("master failed to delete endpoint %s", err)
		return err
	}

	log.Infof("Got endpoint create resp from master: %+v", mresp)

	// Network delete will take care of infra nw EP delete in plugin

	return
}
开发者ID:karamsivia,项目名称:netplugin,代码行数:25,代码来源:netd.go

示例9: createEndpoint

// createEndpoint creates an endpoint using netplugin api
func (its *integTestSuite) createEndpoint(tenantName, netName, epgName, v4Addr, v6Addr string) (*mastercfg.CfgEndpointState, error) {
	its.uniqEPID++
	epID := fmt.Sprintf("%s-%s-%s-%d", tenantName, netName, epgName, its.uniqEPID)
	// Build endpoint request
	mreq := master.CreateEndpointRequest{
		TenantName:  tenantName,
		NetworkName: netName,
		ServiceName: epgName,
		EndpointID:  epID,
		ConfigEP: intent.ConfigEP{
			Container:   epID,
			Host:        its.npcluster.HostLabel,
			IPAddress:   v4Addr,
			IPv6Address: v6Addr,
			ServiceName: epgName,
		},
	}

	var mresp master.CreateEndpointResponse
	err := cluster.MasterPostReq("/plugin/createEndpoint", &mreq, &mresp)
	if err != nil {
		log.Errorf("master failed to create endpoint. Err: %v", err)
		return nil, err
	}

	log.Infof("Got endpoint create resp from master: %+v", mresp)
	netID := netName + "." + tenantName

	// Ask netplugin to create the endpoint
	err = its.npcluster.PluginAgent.Plugin().CreateEndpoint(netID + "-" + epID)
	if err != nil {
		log.Errorf("Endpoint creation failed. Error: %s", err)
		return nil, err
	}

	return &mresp.EndpointConfig, nil
}
开发者ID:jojimt,项目名称:netplugin,代码行数:38,代码来源:utils_test.go

示例10: handleDockerEvents

/***
Copyright 2014 Cisco Systems Inc. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

package agent

import (
	"strings"

	log "github.com/Sirupsen/logrus"
	"github.com/contiv/netplugin/mgmtfn/dockplugin"
	"github.com/contiv/netplugin/netmaster/master"
	"github.com/contiv/netplugin/netplugin/cluster"
	"github.com/docker/engine-api/client"
	"github.com/docker/engine-api/types"
	"github.com/samalba/dockerclient"
	"golang.org/x/net/context"
)

// Handles docker events monitored by dockerclient. Currently we only handle
// container start and die event*/
func handleDockerEvents(event *dockerclient.Event, ec chan error, args ...interface{}) {

	log.Debugf("Received Docker event: {%#v}\n", *event)
	endpointUpdReq := &master.UpdateEndpointRequest{}
	switch event.Status {
	case "start":
		defaultHeaders := map[string]string{"User-Agent": "engine-api-cli-1.0"}
		cli, err := client.NewClient("unix:///var/run/docker.sock", "v1.21", nil, defaultHeaders)
		if err != nil {
			panic(err)
		}

		containerInfo, err := cli.ContainerInspect(context.Background(), event.ID)

		if err != nil {
			log.Errorf("Container Inspect failed :%s", err)
			return
		}

		if event.ID != "" {
			labelMap := getLabelsFromContainerInspect(&containerInfo)
			containerTenant := getTenantFromContainerInspect(&containerInfo)
			networkName, ipAddress, err := getEpNetworkInfoFromContainerInspect(&containerInfo)
			if err != nil {
				log.Errorf("Error getting container network info for %v.Err:%s", event.ID, err)
			}
			endpoint := getEndpointFromContainerInspect(&containerInfo)

			if ipAddress != "" {
				//Create provider info
				endpointUpdReq.IPAddress = ipAddress
				endpointUpdReq.ContainerID = event.ID
				endpointUpdReq.Tenant = containerTenant
				endpointUpdReq.Network = networkName
				endpointUpdReq.Event = "start"
				endpointUpdReq.EndpointID = endpoint
				endpointUpdReq.EPCommonName = containerInfo.Name
				endpointUpdReq.Labels = make(map[string]string)

				for k, v := range labelMap {
					endpointUpdReq.Labels[k] = v
				}
			}

			var epUpdResp master.UpdateEndpointResponse

			log.Infof("Sending Endpoint update request to master: {%+v}", endpointUpdReq)

			err = cluster.MasterPostReq("/plugin/updateEndpoint", endpointUpdReq, &epUpdResp)
			if err != nil {
				log.Errorf("Event: 'start' , Http error posting endpoint update, Error:%s", err)
			}
		} else {
			log.Errorf("Unable to fetch container labels for container %s ", event.ID)
		}
	case "die":
		endpointUpdReq.ContainerID = event.ID
		endpointUpdReq.Event = "die"
		var epUpdResp master.UpdateEndpointResponse
		log.Infof("Sending Endpoint update request to master: {%+v} on container delete", endpointUpdReq)
		err := cluster.MasterPostReq("/plugin/updateEndpoint", endpointUpdReq, &epUpdResp)
		if err != nil {
			log.Errorf("Event:'die' Http error posting endpoint update, Error:%s", err)
		}
	}
}
开发者ID:jojimt,项目名称:netplugin,代码行数:98,代码来源:docker_event.go

示例11: requestAddress

// requestAddress
func requestAddress(w http.ResponseWriter, r *http.Request) {
	var (
		content []byte
		err     error
		areq    = api.RequestAddressRequest{}
		decoder = json.NewDecoder(r.Body)
	)

	logEvent("requestAddress")

	// Decode the JSON message
	err = decoder.Decode(&areq)
	if err != nil {
		httpError(w, "Could not read and parse requestAddress request", err)
		return
	}

	log.Infof("Received RequestAddressRequest: %+v", areq)

	networkID := ""
	addrPool := areq.PoolID
	subnetLen := strings.Split(areq.PoolID, "/")[1]

	// check if pool id contains address pool or network id
	// HACK alert: This is very fragile. Simplify this when we stop supporting docker 1.9
	if strings.Contains(areq.PoolID, "|") {
		addrPool = strings.Split(areq.PoolID, "|")[1]
		networkID = strings.Split(areq.PoolID, "|")[0]
	}

	// Build an alloc request to be sent to master
	allocReq := master.AddressAllocRequest{
		AddressPool:          addrPool,
		NetworkID:            networkID,
		PreferredIPv4Address: areq.Address,
	}

	var addr string

	// check if this request is for gateway
	reqType, ok := areq.Options["RequestAddressType"]
	if ok && reqType == netlabel.Gateway {
		if areq.Address != "" {
			addr = areq.Address + "/" + subnetLen
		} else {
			// simply return a dummy address
			addr = addrPool
		}
	} else if areq.Address != "" {
		// This is a special case for docker 1.9 gateway request which does not
		// come with 'RequestAddressType' label
		// FIXME: Remove this hack when we stop supporting docker 1.9
		addr = areq.Address + "/" + subnetLen
	} else {
		// Make a REST call to master
		var allocResp master.AddressAllocResponse
		err = cluster.MasterPostReq("/plugin/allocAddress", &allocReq, &allocResp)
		if err != nil {
			httpError(w, "master failed to allocate address", err)
			return
		}

		addr = allocResp.IPv4Address
	}

	// build response
	aresp := api.RequestAddressResponse{
		Address: addr,
	}

	log.Infof("Sending RequestAddressResponse: %+v", aresp)

	// build json
	content, err = json.Marshal(aresp)
	if err != nil {
		httpError(w, "Could not generate requestAddress response", err)
		return
	}

	w.Write(content)
}
开发者ID:jojimt,项目名称:netplugin,代码行数:82,代码来源:ipamDriver.go

示例12: createEndpoint

func createEndpoint(hostname string) func(http.ResponseWriter, *http.Request) {
	return func(w http.ResponseWriter, r *http.Request) {
		logEvent("create endpoint")

		content, err := ioutil.ReadAll(r.Body)
		if err != nil {
			httpError(w, "Could not read endpoint create request", err)
			return
		}

		cereq := api.CreateEndpointRequest{}
		if err := json.Unmarshal(content, &cereq); err != nil {
			httpError(w, "Could not read endpoint create request", err)
			return
		}

		log.Infof("CreateEndpointRequest: %+v. Interface: %+v", cereq, cereq.Interface)

		tenantName, netName, serviceName, err := GetDockerNetworkName(cereq.NetworkID)
		if err != nil {
			log.Errorf("Error getting network name for UUID: %s. Err: %v", cereq.NetworkID, err)
			httpError(w, "Could not get network name", err)
			return
		}

		// Build endpoint request
		mreq := master.CreateEndpointRequest{
			TenantName:  tenantName,
			NetworkName: netName,
			ServiceName: serviceName,
			EndpointID:  cereq.EndpointID,
			ConfigEP: intent.ConfigEP{
				Container:   cereq.EndpointID,
				Host:        hostname,
				IPAddress:   strings.Split(cereq.Interface.Address, "/")[0],
				ServiceName: serviceName,
			},
		}

		var mresp master.CreateEndpointResponse
		err = cluster.MasterPostReq("/plugin/createEndpoint", &mreq, &mresp)
		if err != nil {
			httpError(w, "master failed to create endpoint", err)
			return
		}

		log.Infof("Got endpoint create resp from master: %+v", mresp)
		netID := netName + "." + tenantName

		// Ask netplugin to create the endpoint
		err = netPlugin.CreateEndpoint(netID + "-" + cereq.EndpointID)
		if err != nil {
			log.Errorf("Endpoint creation failed. Error: %s", err)
			httpError(w, "Could not create endpoint", err)
			return
		}

		ep, err := netdGetEndpoint(netID + "-" + cereq.EndpointID)
		if err != nil {
			httpError(w, "Could not find created endpoint", err)
			return
		}

		log.Debug(ep)

		epResponse := api.CreateEndpointResponse{
			Interface: &api.EndpointInterface{},
		}

		// Add the service information using Service plugin
		if serviceName != "" {
			log.Infof("Calling AddService with: ID: %s, Name: %s, Network: %s, Tenant: %s, IP: %s", cereq.EndpointID[len(cereq.EndpointID)-12:], serviceName, netName, tenantName, ep.IPAddress)
			dnsBridge.AddService(cereq.EndpointID[len(cereq.EndpointID)-12:], serviceName, netName, tenantName, ep.IPAddress)
		}

		log.Infof("Sending CreateEndpointResponse: {%+v}, IP Addr: %v", epResponse, ep.IPAddress)

		content, err = json.Marshal(epResponse)
		if err != nil {
			httpError(w, "Could not generate create endpoint response", err)
			return
		}

		w.Write(content)
	}
}
开发者ID:ChengTiesheng,项目名称:netplugin,代码行数:86,代码来源:netDriver.go

示例13: deleteEndpoint

func deleteEndpoint(hostname string) func(http.ResponseWriter, *http.Request) {
	return func(w http.ResponseWriter, r *http.Request) {
		logEvent("delete endpoint")

		content, err := ioutil.ReadAll(r.Body)
		if err != nil {
			httpError(w, "Could not read delete endpoint request", err)
			return
		}

		der := api.DeleteEndpointRequest{}
		if err := json.Unmarshal(content, &der); err != nil {
			httpError(w, "Could not read delete endpoint request", err)
			return
		}

		log.Infof("Received DeleteEndpointRequest: %+v", der)

		tenantName, netName, serviceName, err := GetDockerNetworkName(der.NetworkID)
		if err != nil {
			log.Errorf("Error getting network name for UUID: %s. Err: %v", der.NetworkID, err)
			httpError(w, "Could not get network name", err)
			return
		}

		// Build endpoint delete request
		delreq := master.DeleteEndpointRequest{
			TenantName:  tenantName,
			NetworkName: netName,
			ServiceName: serviceName,
			EndpointID:  der.EndpointID,
		}

		var delResp master.DeleteEndpointResponse
		err = cluster.MasterPostReq("/plugin/deleteEndpoint", &delreq, &delResp)
		if err != nil {
			httpError(w, "master failed to delete endpoint", err)
			return
		}

		// delete the endpoint
		netID := netName + "." + tenantName
		err = netPlugin.DeleteEndpoint(netID + "-" + delreq.EndpointID)
		if err != nil {
			log.Errorf("Error deleting endpoint %s. Err: %v", delreq.EndpointID, err)
			httpError(w, "failed to delete endpoint", err)
			return
		}

		ep, err := netdGetEndpoint(netID + "-" + delreq.EndpointID)
		if err != nil {
			httpError(w, "Could not find endpoint", err)
			return
		}

		// Remove the DNS entry for the service
		if serviceName != "" {
			log.Infof("Calling RemoveService with: ID: %s, Name: %s, Network: %s, Tenant: %s, IP: %s", delreq.EndpointID[len(delreq.EndpointID)-12:], serviceName, netName, tenantName, ep.IPAddress)
			dnsBridge.RemoveService(delreq.EndpointID[len(delreq.EndpointID)-12:], serviceName, netName, tenantName, ep.IPAddress)
		}

		// build response
		content, err = json.Marshal(api.DeleteEndpointResponse{})
		if err != nil {
			httpError(w, "Could not generate delete endpoint response", err)
			return
		}

		w.Write(content)
	}
}
开发者ID:ChengTiesheng,项目名称:netplugin,代码行数:71,代码来源:netDriver.go

示例14: handleDockerEvents

/*Handles docker events monitored by dockerclient. Currently we only handle
  container start and die event*/
func handleDockerEvents(event *dockerclient.Event, ec chan error, args ...interface{}) {

	log.Printf("Received Docker event: {%#v}\n", *event)
	providerUpdReq := &master.SvcProvUpdateRequest{}
	switch event.Status {
	case "start":
		defaultHeaders := map[string]string{"User-Agent": "engine-api-cli-1.0"}
		cli, err := client.NewClient("unix:///var/run/docker.sock", "v1.21", nil, defaultHeaders)
		if err != nil {
			panic(err)
		}
		containerInfo, err := cli.ContainerInspect(context.Background(), event.ID)
		if err != nil {
			log.Errorf("Container Inspect failed :%s", err)
			return
		}
		if event.ID != "" {
			labelMap := getLabelsFromContainerInspect(&containerInfo)

			containerTenant := getTenantFromContainerInspect(&containerInfo)
			network, ipAddress := getEpNetworkInfoFromContainerInspect(&containerInfo)
			container := getContainerFromContainerInspect(&containerInfo)
			if ipAddress != "" {
				//Create provider info
				networkname := strings.Split(network, "/")[0]
				providerUpdReq.IPAddress = ipAddress
				providerUpdReq.ContainerID = event.ID
				providerUpdReq.Tenant = containerTenant
				providerUpdReq.Network = networkname
				providerUpdReq.Event = "start"
				providerUpdReq.Container = container
				providerUpdReq.Labels = make(map[string]string)

				for k, v := range labelMap {
					providerUpdReq.Labels[k] = v
				}
			}
			if len(labelMap) == 0 {
				//Ignore container without labels
				return
			}
			var svcProvResp master.SvcProvUpdateResponse

			log.Infof("Sending Provider create request to master: {%+v}", providerUpdReq)

			err := cluster.MasterPostReq("/plugin/svcProviderUpdate", providerUpdReq, &svcProvResp)
			if err != nil {
				log.Errorf("Event: 'start' , Http error posting service provider update, Error:%s", err)
			}
		} else {
			log.Errorf("Unable to fetch container labels for container %s ", event.ID)
		}
	case "die":
		providerUpdReq.ContainerID = event.ID
		providerUpdReq.Event = "die"
		var svcProvResp master.SvcProvUpdateResponse
		log.Infof("Sending Provider delete request to master: {%+v}", providerUpdReq)
		err := cluster.MasterPostReq("/plugin/svcProviderUpdate", providerUpdReq, &svcProvResp)
		if err != nil {
			log.Errorf("Event:'die' Http error posting service provider update, Error:%s", err)
		}
	}
}
开发者ID:karamsivia,项目名称:netplugin,代码行数:65,代码来源:netd.go

示例15: createCniEndPoint

func (cniReq *cniServer) createCniEndPoint() error {
	var err error
	ovsEpDriver := &drivers.OvsOperEndpointState{}
	ovsEpDriver.StateDriver = stateDriver

	nwState := &mastercfg.CfgNetworkState{}
	nwState.StateDriver = stateDriver

	// build endpoint request
	epReq := master.CreateEndpointRequest{
		TenantName:  cniReq.endPointLabels[cniapi.LabelTenantName],
		NetworkName: cniReq.endPointLabels[cniapi.LabelNetworkName],
		ServiceName: cniReq.endPointLabels[cniapi.LabelNetworkGroup],
		EndpointID:  cniReq.pluginArgs.CniContainerid,
		ConfigEP: intent.ConfigEP{
			Container:   cniReq.pluginArgs.CniContainerid,
			Host:        hostName,
			ServiceName: cniReq.endPointLabels[cniapi.LabelNetworkGroup],
		},
	}

	cniLog.Infof("endpoint-req: epid:%s cont-id:%s ", epReq.EndpointID, epReq.ConfigEP.Container)

	epResp := master.CreateEndpointResponse{}
	if err = cluster.MasterPostReq("/plugin/createEndpoint", &epReq, &epResp); err != nil {
		cniLog.Errorf("failed to create endpoint in master: %s", err.Error())
		return err
	}

	cniLog.Infof("endpoint created  %+v", epResp)

	// create endpoint in netplugin
	if err = netPlugin.CreateEndpoint(cniReq.endpointID); err != nil {
		cniLog.Errorf("failed to create endpoint in netplugin: %s", err.Error())
		goto cleanupMaster
	}

	// read end point
	if err = ovsEpDriver.Read(cniReq.endpointID); err != nil {
		cniLog.Errorf("failed to read endpoint: %s", err.Error())
		goto cleanupNetplugin
	}

	if err = nwState.Read(cniReq.networkID); err != nil {
		cniLog.Errorf("failed to read network config : %s", err.Error())
		goto cleanupNetplugin
	}

	cniLog.Debugf("read new network config +%v", nwState)

	if err = cniReq.configureNetNs(ovsEpDriver, &epResp, nwState); err != nil {
		goto cleanupNetplugin
	}

	// host access
	if strings.HasSuffix(cniReq.pluginArgs.CniIfname, "0") {
		if err = cniReq.createHostBrIntf(ovsEpDriver); err != nil {
			cniLog.Errorf("failed to configure host-br %s", err.Error())
			goto cleanupNetns
		}
	}

	return nil

	// unwind the setup, ignore errors
cleanupNetns:
	cniReq.unlinkNetNs()
cleanupNetplugin:
	cniReq.deleteNetpluginEndPoint()
cleanupMaster:
	cniReq.deleteMasterEndPoint()

	return err
}
开发者ID:jojimt,项目名称:netplugin,代码行数:74,代码来源:cnidriver.go


注:本文中的github.com/contiv/netplugin/netplugin/cluster.MasterPostReq函数示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。