mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
fix(region): support public ipv6 addr sync (#19420)
This commit is contained in:
@@ -88,7 +88,7 @@ require (
|
||||
k8s.io/client-go v0.19.3
|
||||
k8s.io/cluster-bootstrap v0.19.3
|
||||
moul.io/http2curl/v2 v2.3.0
|
||||
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20240131125247-71c9e0baa777
|
||||
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20240202081639-6a67ceb49f35
|
||||
yunion.io/x/executor v0.0.0-20230705125604-c5ac3141db32
|
||||
yunion.io/x/jsonutils v1.0.1-0.20230613121553-0f3b41e2ef19
|
||||
yunion.io/x/log v1.0.1-0.20230411060016-feb3f46ab361
|
||||
|
||||
@@ -1201,8 +1201,8 @@ sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK
|
||||
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
|
||||
sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
|
||||
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
|
||||
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20240131125247-71c9e0baa777 h1:/5eC7wrBuySoO2R2a9RU48mP1bwBoEo7Mdha1OcKN6c=
|
||||
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20240131125247-71c9e0baa777/go.mod h1:aj1gR9PPb6eqqKOwvANe26CoZFY8ydmXy0fuvgKYXH0=
|
||||
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20240202081639-6a67ceb49f35 h1:pgyOGaIkGBhgBNMNAhRFHFn9oDS2iq4vBUJAelQfBiQ=
|
||||
yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20240202081639-6a67ceb49f35/go.mod h1:dsUESXIbXJ+/ywbNClhldOrbPOiBi2udrgOnB/ffoWk=
|
||||
yunion.io/x/executor v0.0.0-20230705125604-c5ac3141db32 h1:v7POYkQwo1XzOxBoIoRVr/k0V9Y5JyjpshlIFa9raug=
|
||||
yunion.io/x/executor v0.0.0-20230705125604-c5ac3141db32/go.mod h1:Uxuou9WQIeJXNpy7t2fPLL0BYLvLiMvGQwY7Qc6aSws=
|
||||
yunion.io/x/jsonutils v0.0.0-20190625054549-a964e1e8a051/go.mod h1:4N0/RVzsYL3kH3WE/H1BjUQdFiWu50JGCFQuuy+Z634=
|
||||
|
||||
Vendored
+1
-1
@@ -1465,7 +1465,7 @@ sigs.k8s.io/structured-merge-diff/v4/value
|
||||
# sigs.k8s.io/yaml v1.2.0
|
||||
## explicit; go 1.12
|
||||
sigs.k8s.io/yaml
|
||||
# yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20240131125247-71c9e0baa777
|
||||
# yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20240202081639-6a67ceb49f35
|
||||
## explicit; go 1.18
|
||||
yunion.io/x/cloudmux/pkg/apis
|
||||
yunion.io/x/cloudmux/pkg/apis/billing
|
||||
|
||||
+6
@@ -142,6 +142,7 @@ func (self *SRegion) GetInstances(zoneId string, ids []string) ([]SInstance, err
|
||||
params := make(map[string]string)
|
||||
params["RegionId"] = self.RegionId
|
||||
params["MaxResults"] = "100"
|
||||
params["AdditionalAttributes.1"] = "NETWORK_PRIMARY_ENI_IP"
|
||||
|
||||
if len(zoneId) > 0 {
|
||||
params["ZoneId"] = zoneId
|
||||
@@ -276,6 +277,11 @@ func (self *SInstance) GetINics() ([]cloudprovider.ICloudNic, error) {
|
||||
ipAddr: networkInterface.PrimaryIpAddress,
|
||||
macAddr: networkInterface.MacAddress,
|
||||
}
|
||||
for _, ipv6 := range networkInterface.Ipv6Sets.Ipv6Set {
|
||||
if len(ipv6.Ipv6Address) > 0 {
|
||||
nic.ip6Addr = ipv6.Ipv6Address
|
||||
}
|
||||
}
|
||||
nics = append(nics, &nic)
|
||||
}
|
||||
for _, classicIp := range self.InnerIpAddress.IpAddress {
|
||||
|
||||
+5
@@ -31,6 +31,7 @@ type SInstanceNic struct {
|
||||
instance *SInstance
|
||||
id string
|
||||
ipAddr string
|
||||
ip6Addr string
|
||||
macAddr string
|
||||
|
||||
classic bool
|
||||
@@ -53,6 +54,10 @@ func (self *SInstanceNic) GetIP() string {
|
||||
return self.ipAddr
|
||||
}
|
||||
|
||||
func (self *SInstanceNic) GetIP6() string {
|
||||
return self.ip6Addr
|
||||
}
|
||||
|
||||
func (self *SInstanceNic) GetMAC() string {
|
||||
if len(self.macAddr) > 0 {
|
||||
return self.macAddr
|
||||
|
||||
+5
@@ -72,6 +72,11 @@ type SNetworkInterface struct {
|
||||
NetworkInterfaceId string
|
||||
PrimaryIpAddress string
|
||||
PrivateIpAddress string
|
||||
Ipv6Sets struct {
|
||||
Ipv6Set []struct {
|
||||
Ipv6Address string
|
||||
}
|
||||
}
|
||||
|
||||
Attachment struct {
|
||||
InstanceId string
|
||||
|
||||
+16
-11
@@ -50,17 +50,18 @@ type SVpc struct {
|
||||
|
||||
routeTables []cloudprovider.ICloudRouteTable
|
||||
|
||||
CidrBlock string
|
||||
CreationTime time.Time
|
||||
Description string
|
||||
IsDefault bool
|
||||
RegionId string
|
||||
Status string
|
||||
UserCidrs SUserCIDRs
|
||||
VRouterId string
|
||||
VSwitchIds SVSwitchIds
|
||||
VpcId string
|
||||
VpcName string
|
||||
CidrBlock string
|
||||
Ipv6CidrBlock string
|
||||
CreationTime time.Time
|
||||
Description string
|
||||
IsDefault bool
|
||||
RegionId string
|
||||
Status string
|
||||
UserCidrs SUserCIDRs
|
||||
VRouterId string
|
||||
VSwitchIds SVSwitchIds
|
||||
VpcId string
|
||||
VpcName string
|
||||
}
|
||||
|
||||
func (self *SVpc) GetId() string {
|
||||
@@ -90,6 +91,10 @@ func (self *SVpc) GetCidrBlock() string {
|
||||
return self.CidrBlock
|
||||
}
|
||||
|
||||
func (self *SVpc) GetCidrBlock6() string {
|
||||
return self.Ipv6CidrBlock
|
||||
}
|
||||
|
||||
func (self *SVpc) GetStatus() string {
|
||||
return strings.ToLower(self.Status)
|
||||
}
|
||||
|
||||
+51
-7
@@ -50,6 +50,7 @@ type SVSwitch struct {
|
||||
|
||||
CidrBlock string
|
||||
Ipv6CidrBlock string
|
||||
EnabledIpv6 bool
|
||||
CreationTime time.Time
|
||||
Description string
|
||||
IsDefault bool
|
||||
@@ -79,27 +80,70 @@ func (self *SVSwitch) GetGlobalId() string {
|
||||
return self.VSwitchId
|
||||
}
|
||||
|
||||
func (self *SVSwitch) IsEmulated() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (self *SVSwitch) GetStatus() string {
|
||||
return strings.ToLower(self.Status)
|
||||
}
|
||||
|
||||
func (self *SVSwitch) Refresh() error {
|
||||
log.Debugf("vsiwtch refresh %s", self.VSwitchId)
|
||||
new, err := self.wire.zone.region.GetVSwitchAttributes(self.VSwitchId)
|
||||
net, err := self.wire.zone.region.GetVSwitchAttributes(self.VSwitchId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return jsonutils.Update(self, new)
|
||||
return jsonutils.Update(self, net)
|
||||
}
|
||||
|
||||
func (self *SVSwitch) GetIWire() cloudprovider.ICloudWire {
|
||||
return self.wire
|
||||
}
|
||||
|
||||
func (net *SVSwitch) GetIp6Start() string {
|
||||
if len(net.Ipv6CidrBlock) > 0 {
|
||||
prefix, err := netutils.NewIPV6Prefix(net.Ipv6CidrBlock)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
return prefix.Address.NetAddr(prefix.MaskLen).StepUp().String()
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (net *SVSwitch) GetIp6End() string {
|
||||
if len(net.Ipv6CidrBlock) > 0 {
|
||||
prefix, err := netutils.NewIPV6Prefix(net.Ipv6CidrBlock)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
end := prefix.Address.NetAddr(prefix.MaskLen).BroadcastAddr(prefix.MaskLen)
|
||||
for i := 0; i < 15; i++ {
|
||||
end = end.StepDown()
|
||||
}
|
||||
return end.String()
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (net *SVSwitch) GetIp6Mask() uint8 {
|
||||
if len(net.Ipv6CidrBlock) > 0 {
|
||||
prefix, err := netutils.NewIPV6Prefix(net.Ipv6CidrBlock)
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
return prefix.MaskLen
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (net *SVSwitch) GetGateway6() string {
|
||||
if len(net.Ipv6CidrBlock) > 0 {
|
||||
prefix, err := netutils.NewIPV6Prefix(net.Ipv6CidrBlock)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
return prefix.Address.NetAddr(prefix.MaskLen).StepUp().String()
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (self *SVSwitch) GetIpStart() string {
|
||||
pref, _ := netutils.NewIPV4Prefix(self.CidrBlock)
|
||||
startIp := pref.Address.NetAddr(pref.MaskLen) // 0
|
||||
|
||||
+6
@@ -319,6 +319,12 @@ func (self *SInstance) GetINics() ([]cloudprovider.ICloudNic, error) {
|
||||
ipAddr: networkInterface.PrivateIpAddress,
|
||||
macAddr: networkInterface.MacAddress,
|
||||
}
|
||||
for _, ip6 := range networkInterface.IPv6AddressesSet {
|
||||
if len(ip6.IPv6Address) > 0 {
|
||||
nic.ip6Addr = ip6.IPv6Address
|
||||
break
|
||||
}
|
||||
}
|
||||
nics = append(nics, &nic)
|
||||
}
|
||||
return nics, nil
|
||||
|
||||
+5
@@ -25,6 +25,7 @@ type SInstanceNic struct {
|
||||
|
||||
id string
|
||||
ipAddr string
|
||||
ip6Addr string
|
||||
macAddr string
|
||||
|
||||
cloudprovider.DummyICloudNic
|
||||
@@ -38,6 +39,10 @@ func (self *SInstanceNic) GetIP() string {
|
||||
return self.ipAddr
|
||||
}
|
||||
|
||||
func (self *SInstanceNic) GetIP6() string {
|
||||
return self.ip6Addr
|
||||
}
|
||||
|
||||
func (self *SInstanceNic) GetMAC() string {
|
||||
return self.macAddr
|
||||
}
|
||||
|
||||
+70
@@ -41,6 +41,10 @@ type SNetwork struct {
|
||||
SubnetId string `xml:"subnetId"`
|
||||
VpcId string `xml:"vpcId"`
|
||||
AvailabilityZone string `xml:"availabilityZone"`
|
||||
|
||||
IPv6CidrBlockAssociationSet []struct {
|
||||
IPv6CidrBlock string `xml:"ipv6CidrBlock"`
|
||||
} `xml:"ipv6CidrBlockAssociationSet>item"`
|
||||
}
|
||||
|
||||
func (self *SNetwork) GetId() string {
|
||||
@@ -97,6 +101,72 @@ func (self *SNetwork) GetIWire() cloudprovider.ICloudWire {
|
||||
return self.wire
|
||||
}
|
||||
|
||||
func (net *SNetwork) GetIp6Start() string {
|
||||
for _, ipv6 := range net.IPv6CidrBlockAssociationSet {
|
||||
if len(ipv6.IPv6CidrBlock) == 0 {
|
||||
continue
|
||||
}
|
||||
prefix, err := netutils.NewIPV6Prefix(ipv6.IPv6CidrBlock)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
return prefix.Address.NetAddr(prefix.MaskLen).
|
||||
StepUp(). // 1
|
||||
StepUp(). // 2
|
||||
StepUp(). // 3
|
||||
StepUp(). // 4
|
||||
String()
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (net *SNetwork) GetIp6End() string {
|
||||
for _, ipv6 := range net.IPv6CidrBlockAssociationSet {
|
||||
if len(ipv6.IPv6CidrBlock) == 0 {
|
||||
continue
|
||||
}
|
||||
prefix, err := netutils.NewIPV6Prefix(ipv6.IPv6CidrBlock)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
end := prefix.Address.NetAddr(prefix.MaskLen).BroadcastAddr(prefix.MaskLen)
|
||||
return end.
|
||||
StepDown(). // fffe
|
||||
String()
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (net *SNetwork) GetIp6Mask() uint8 {
|
||||
for _, ipv6 := range net.IPv6CidrBlockAssociationSet {
|
||||
if len(ipv6.IPv6CidrBlock) == 0 {
|
||||
continue
|
||||
}
|
||||
prefix, err := netutils.NewIPV6Prefix(ipv6.IPv6CidrBlock)
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
return prefix.MaskLen
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (net *SNetwork) GetGateway6() string {
|
||||
for _, ipv6 := range net.IPv6CidrBlockAssociationSet {
|
||||
if len(ipv6.IPv6CidrBlock) == 0 {
|
||||
continue
|
||||
}
|
||||
prefix, err := netutils.NewIPV6Prefix(ipv6.IPv6CidrBlock)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
return prefix.Address.NetAddr(prefix.MaskLen).
|
||||
StepUp(). // 1
|
||||
String()
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// 每个子网 CIDR 块中的前四个 IP 地址和最后一个 IP 地址无法使用
|
||||
func (self *SNetwork) GetIpStart() string {
|
||||
pref, _ := netutils.NewIPV4Prefix(self.CidrBlock)
|
||||
|
||||
+5
-1
@@ -65,7 +65,11 @@ type SNetworkInterface struct {
|
||||
GroupSet []SGroupSet `xml:"groupSet>item"`
|
||||
Attachment SAttachment `xml:"attachment"`
|
||||
PrivateIpAddressesSet []SPrivateIpAddress `xml:"privateIpAddressesSet>item"`
|
||||
InterfaceType string `xml:"interfaceType"`
|
||||
IPv6AddressesSet []struct {
|
||||
IPv6Address string `xml:"ipv6Address"`
|
||||
IsPrimaryIpv6 bool `xml:"isPrimaryIpv6"`
|
||||
} `xml:"ipv6AddressesSet>item"`
|
||||
InterfaceType string `xml:"interfaceType"`
|
||||
}
|
||||
|
||||
func (self *SRegion) GetNetworkInterface(id string) (*SNetworkInterface, error) {
|
||||
|
||||
+13
@@ -47,6 +47,9 @@ type SVpc struct {
|
||||
State string `xml:"state"`
|
||||
} `xml:"cidrBlockState"`
|
||||
} `xml:"cidrBlockAssociationSet>item"`
|
||||
IPv6CidrBlockAssociationSet []struct {
|
||||
IPv6CidrBlock string `xml:"ipv6CidrBlock"`
|
||||
} `xml:"ipv6CidrBlockAssociationSet>item"`
|
||||
IsDefault bool `xml:"isDefault"`
|
||||
Status string `xml:"state"`
|
||||
InstanceTenancy string `xml:"instanceTenancy"`
|
||||
@@ -103,6 +106,16 @@ func (self *SVpc) GetCidrBlock() string {
|
||||
return strings.Join(cidr, ",")
|
||||
}
|
||||
|
||||
func (self *SVpc) GetCidrBlock6() string {
|
||||
ret := []string{}
|
||||
for _, cidr := range self.IPv6CidrBlockAssociationSet {
|
||||
if len(cidr.IPv6CidrBlock) > 0 {
|
||||
ret = append(ret, cidr.IPv6CidrBlock)
|
||||
}
|
||||
}
|
||||
return strings.Join(ret, ",")
|
||||
}
|
||||
|
||||
func (self *SVpc) GetIWires() ([]cloudprovider.ICloudWire, error) {
|
||||
zones, err := self.region.GetZones("")
|
||||
if err != nil {
|
||||
|
||||
+12
@@ -398,8 +398,20 @@ func (self *SInstance) GetINics() ([]cloudprovider.ICloudNic, error) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for _, ipAddresses := range self.Addresses {
|
||||
for _, ipAddress := range ipAddresses {
|
||||
if ipAddress.OSEXTIPSType == "fixed" && ipAddress.Version == "6" {
|
||||
if _, ok := ret[ipAddress.OSEXTIPSMACMACAddr]; ok {
|
||||
ret[ipAddress.OSEXTIPSMACMACAddr].ip6Addr = ipAddress.Addr
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
nics := make([]cloudprovider.ICloudNic, 0)
|
||||
for mac := range ret {
|
||||
log.Errorf("mac: %s ip: %s ipv6: %s", ret[mac].macAddr, ret[mac].ipAddr, ret[mac].ip6Addr)
|
||||
nics = append(nics, ret[mac])
|
||||
}
|
||||
return nics, nil
|
||||
|
||||
+5
@@ -25,6 +25,7 @@ import (
|
||||
type SInstanceNic struct {
|
||||
instance *SInstance
|
||||
ipAddr string
|
||||
ip6Addr string
|
||||
macAddr string
|
||||
|
||||
subAddrs []string
|
||||
@@ -39,6 +40,10 @@ func (self *SInstanceNic) GetIP() string {
|
||||
return self.ipAddr
|
||||
}
|
||||
|
||||
func (self *SInstanceNic) GetIP6() string {
|
||||
return self.ip6Addr
|
||||
}
|
||||
|
||||
func (self *SInstanceNic) GetSubAddress() ([]string, error) {
|
||||
return self.subAddrs, nil
|
||||
}
|
||||
|
||||
+40
@@ -40,9 +40,11 @@ type SNetwork struct {
|
||||
|
||||
AvailabilityZone string `json:"availability_zone"`
|
||||
CIDR string `json:"cidr"`
|
||||
CIDRV6 string `json:"cidr_v6"`
|
||||
DHCPEnable bool `json:"dhcp_enable"`
|
||||
DNSList []string `json:"dnsList"`
|
||||
GatewayIP string `json:"gateway_ip"`
|
||||
GatewayIPv6 string `json:"gateway_ip_v6"`
|
||||
ID string `json:"id"`
|
||||
Ipv6Enable bool `json:"ipv6_enable"`
|
||||
Name string `json:"name"`
|
||||
@@ -94,6 +96,44 @@ func (self *SNetwork) GetIWire() cloudprovider.ICloudWire {
|
||||
return self.wire
|
||||
}
|
||||
|
||||
func (net *SNetwork) GetIp6Start() string {
|
||||
if len(net.CIDRV6) > 0 {
|
||||
prefix, err := netutils.NewIPV6Prefix(net.CIDRV6)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
return prefix.Address.NetAddr(prefix.MaskLen).StepUp().StepUp().String()
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (net *SNetwork) GetIp6End() string {
|
||||
if len(net.CIDRV6) > 0 {
|
||||
prefix, err := netutils.NewIPV6Prefix(net.CIDRV6)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
end := prefix.Address.NetAddr(prefix.MaskLen).BroadcastAddr(prefix.MaskLen)
|
||||
return end.StepDown().StepDown().StepDown().StepDown().StepDown().String()
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (net *SNetwork) GetIp6Mask() uint8 {
|
||||
if len(net.CIDRV6) > 0 {
|
||||
prefix, err := netutils.NewIPV6Prefix(net.CIDRV6)
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
return prefix.MaskLen
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (net *SNetwork) GetGateway6() string {
|
||||
return net.GatewayIPv6
|
||||
}
|
||||
|
||||
func (self *SNetwork) GetIpStart() string {
|
||||
pref, _ := netutils.NewIPV4Prefix(self.CIDR)
|
||||
startIp := pref.Address.NetAddr(pref.MaskLen) // 0
|
||||
|
||||
+2
-2
@@ -26,10 +26,10 @@ func (net *SNetworkBase) GetIp6End() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (self *SNetworkBase) GetIp6Mask() uint8 {
|
||||
func (net *SNetworkBase) GetIp6Mask() uint8 {
|
||||
return 0
|
||||
}
|
||||
|
||||
func (self *SNetworkBase) GetGateway6() string {
|
||||
func (net *SNetworkBase) GetGateway6() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
+7
@@ -131,6 +131,7 @@ type SInstance struct {
|
||||
SecurityGroupIds []string // 实例所属安全组。该参数可以通过调用 DescribeSecurityGroups 的返回值中的sgId字段来获取。
|
||||
LoginSettings LoginSettings //实例登录设置。目前只返回实例所关联的密钥。
|
||||
InstanceState string // 实例状态。取值范围:PENDING:表示创建中 LAUNCH_FAILED:表示创建失败 RUNNING:表示运行中 STOPPED:表示关机 STARTING:表示开机中 STOPPING:表示关机中 REBOOTING:表示重启中 SHUTDOWN:表示停止待销毁 TERMINATING:表示销毁中。
|
||||
IPv6Addresses []string
|
||||
Tags []Tag
|
||||
}
|
||||
|
||||
@@ -302,6 +303,12 @@ func (self *SInstance) GetINics() ([]cloudprovider.ICloudNic, error) {
|
||||
nic.ipAddr = addr.PrivateIpAddress
|
||||
}
|
||||
}
|
||||
for _, addr := range networkInterface.Ipv6AddressSet {
|
||||
if len(addr.Address) > 0 {
|
||||
nic.ip6Addr = addr.Address
|
||||
break
|
||||
}
|
||||
}
|
||||
ret = append(ret, nic)
|
||||
}
|
||||
return ret, nil
|
||||
|
||||
+5
@@ -24,6 +24,7 @@ type SInstanceNic struct {
|
||||
|
||||
id string
|
||||
ipAddr string
|
||||
ip6Addr string
|
||||
macAddr string
|
||||
classic bool
|
||||
|
||||
@@ -38,6 +39,10 @@ func (self *SInstanceNic) GetIP() string {
|
||||
return self.ipAddr
|
||||
}
|
||||
|
||||
func (self *SInstanceNic) GetIP6() string {
|
||||
return self.ip6Addr
|
||||
}
|
||||
|
||||
func (self *SInstanceNic) GetMAC() string {
|
||||
if len(self.macAddr) == 0 {
|
||||
ip, _ := netutils.NewIPV4Addr(self.GetIP())
|
||||
|
||||
+45
-4
@@ -35,6 +35,7 @@ type SNetwork struct {
|
||||
wire *SWire
|
||||
|
||||
CidrBlock string
|
||||
Ipv6CidrBlock string
|
||||
Zone string
|
||||
SubnetId string
|
||||
VpcId string
|
||||
@@ -61,10 +62,6 @@ func (self *SNetwork) GetGlobalId() string {
|
||||
return self.SubnetId
|
||||
}
|
||||
|
||||
func (self *SNetwork) IsEmulated() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (self *SNetwork) GetStatus() string {
|
||||
return api.NETWORK_STATUS_AVAILABLE
|
||||
}
|
||||
@@ -115,6 +112,50 @@ func (self *SNetwork) SetTags(tags map[string]string, replace bool) error {
|
||||
return self.wire.vpc.region.SetResourceTags("vpc", "subnet", []string{self.SubnetId}, tags, replace)
|
||||
}
|
||||
|
||||
func (net *SNetwork) GetIp6Start() string {
|
||||
if len(net.Ipv6CidrBlock) > 0 {
|
||||
prefix, err := netutils.NewIPV6Prefix(net.Ipv6CidrBlock)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
return prefix.Address.NetAddr(prefix.MaskLen).StepUp().String()
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (net *SNetwork) GetIp6End() string {
|
||||
if len(net.Ipv6CidrBlock) > 0 {
|
||||
prefix, err := netutils.NewIPV6Prefix(net.Ipv6CidrBlock)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
return prefix.Address.NetAddr(prefix.MaskLen).BroadcastAddr(prefix.MaskLen).String()
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (net *SNetwork) GetIp6Mask() uint8 {
|
||||
if len(net.Ipv6CidrBlock) > 0 {
|
||||
prefix, err := netutils.NewIPV6Prefix(net.Ipv6CidrBlock)
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
return prefix.MaskLen
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (net *SNetwork) GetGateway6() string {
|
||||
if len(net.Ipv6CidrBlock) > 0 {
|
||||
prefix, err := netutils.NewIPV6Prefix(net.Ipv6CidrBlock)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
return prefix.Address.NetAddr(prefix.MaskLen).StepUp().String()
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (self *SNetwork) GetGateway() string {
|
||||
pref, _ := netutils.NewIPV4Prefix(self.CidrBlock)
|
||||
endIp := pref.Address.BroadcastAddr(pref.MaskLen) // 255
|
||||
|
||||
+4
@@ -76,6 +76,10 @@ type SNetworkInterface struct {
|
||||
Attachment SNetworkInterfaceAttachment
|
||||
Zone string
|
||||
PrivateIpAddressSet []SPrivateIpAddress
|
||||
Ipv6AddressSet []struct {
|
||||
Address string
|
||||
State string
|
||||
}
|
||||
}
|
||||
|
||||
func (nic *SNetworkInterface) GetName() string {
|
||||
|
||||
+5
-4
@@ -34,6 +34,7 @@ type SVpc struct {
|
||||
iwires []cloudprovider.ICloudWire
|
||||
|
||||
CidrBlock string
|
||||
Ipv6CidrBlock string
|
||||
CreatedTime time.Time
|
||||
DhcpOptionsId string
|
||||
DnsServerSet []string
|
||||
@@ -59,10 +60,6 @@ func (self *SVpc) GetGlobalId() string {
|
||||
return self.VpcId
|
||||
}
|
||||
|
||||
func (self *SVpc) IsEmulated() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (self *SVpc) GetIsDefault() bool {
|
||||
return self.IsDefault
|
||||
}
|
||||
@@ -71,6 +68,10 @@ func (self *SVpc) GetCidrBlock() string {
|
||||
return self.CidrBlock
|
||||
}
|
||||
|
||||
func (self *SVpc) GetCidrBlock6() string {
|
||||
return self.Ipv6CidrBlock
|
||||
}
|
||||
|
||||
func (self *SVpc) GetStatus() string {
|
||||
return api.VPC_STATUS_AVAILABLE
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user