| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- package google
- import (
- "fmt"
- "strings"
- "time"
- api "yunion.io/x/cloudmux/pkg/apis/compute"
- "yunion.io/x/cloudmux/pkg/cloudprovider"
- "yunion.io/x/pkg/errors"
- )
- type SSharedGlobalNetwork struct {
- GoogleTags
- client *SGoogleClient
- Network string
- Subnetworks []SXpnNetwork
- }
- func (network *SSharedGlobalNetwork) GetId() string {
- return getGlobalId(network.Network)
- }
- func (network *SSharedGlobalNetwork) GetGlobalId() string {
- return network.GetId()
- }
- func (network *SSharedGlobalNetwork) GetName() string {
- info := strings.Split(network.GetId(), "/")
- if len(info) == 6 {
- return fmt.Sprintf("%s(%s)", info[5], info[1])
- }
- return network.GetId()
- }
- func (network *SSharedGlobalNetwork) GetStatus() string {
- return api.GLOBAL_VPC_STATUS_AVAILABLE
- }
- func (network *SSharedGlobalNetwork) IsEmulated() bool {
- return true
- }
- func (network *SSharedGlobalNetwork) Refresh() error {
- return nil
- }
- func (network *SSharedGlobalNetwork) GetCreatedAt() time.Time {
- return time.Time{}
- }
- func (network *SSharedGlobalNetwork) GetDescription() string {
- return ""
- }
- func (network *SSharedGlobalNetwork) GetISecurityGroups() ([]cloudprovider.ICloudSecurityGroup, error) {
- return []cloudprovider.ICloudSecurityGroup{}, nil
- }
- func (network *SSharedGlobalNetwork) CreateISecurityGroup(opts *cloudprovider.SecurityGroupCreateInput) (cloudprovider.ICloudSecurityGroup, error) {
- return nil, cloudprovider.ErrNotSupported
- }
- func (network *SSharedGlobalNetwork) Delete() error {
- return cloudprovider.ErrNotSupported
- }
- func (client *SGoogleClient) GetSharedGlobalNetworks() ([]SSharedGlobalNetwork, error) {
- xhosts, err := client.GetXpnHosts()
- if err != nil {
- if e, ok := err.(*gError); ok && e.ErrorInfo.Code == 400 {
- return []SSharedGlobalNetwork{}, nil
- }
- return nil, errors.Wrapf(err, "GetXpnHosts")
- }
- ret := []SSharedGlobalNetwork{}
- networkMap := map[string][]SXpnNetwork{}
- for _, xhost := range xhosts {
- resources, err := client.GetXpnResources(xhost.Name)
- if err != nil {
- return nil, errors.Wrapf(err, "GetXpnResources(%s)", xhost.Name)
- }
- for _, resource := range resources {
- if strings.EqualFold(resource.Type, "project") && resource.Id == client.projectId {
- networks, err := client.GetXpnNetworks(xhost.Name)
- if err != nil {
- return nil, errors.Wrapf(err, "GetXpnNetworks(%s)", xhost.Name)
- }
- for i := range networks {
- _, ok := networkMap[networks[i].Network]
- if !ok {
- networkMap[networks[i].Network] = []SXpnNetwork{}
- }
- networkMap[networks[i].Network] = append(networkMap[networks[i].Network], networks[i])
- }
- }
- }
- }
- for network, subnetworks := range networkMap {
- ret = append(ret, SSharedGlobalNetwork{
- client: client,
- Network: network,
- Subnetworks: subnetworks,
- })
- }
- return ret, nil
- }
|