@@ -27,7 +27,6 @@ func (d *Driver) NewClient() (*cvm.Client, error) {
2727 return cvm .NewClient (d .Credential , region , cpf )
2828}
2929
30- // GetResource returns all the resources in the store for a provider.
3130func (d * Driver ) GetResource (ctx context.Context ) ([]schema.Host , error ) {
3231 list := schema .NewResources ().Hosts
3332 logger .Info ("Start enumerating CVM ..." )
@@ -48,45 +47,57 @@ func (d *Driver) GetResource(ctx context.Context) ([]schema.Host, error) {
4847 }
4948 flag := false
5049 prevLength := 0
50+ count := 0
5151 for _ , r := range regions {
5252 d .Region = r
5353 client , _ := d .NewClient ()
5454 request := cvm .NewDescribeInstancesRequest ()
55- response , err := client .DescribeInstances (request )
56- if err != nil {
57- logger .Error ("Enumerate CVM failed." )
58- return list , err
59- }
60-
61- for _ , instance := range response .Response .InstanceSet {
62- var ipv4 , privateIPv4 string
63- if len (instance .PublicIpAddresses ) > 0 {
64- ipv4 = * instance .PublicIpAddresses [0 ]
65- }
66- if len (instance .PrivateIpAddresses ) > 0 {
67- privateIPv4 = * instance .PrivateIpAddresses [0 ]
55+ request .Limit = common .Int64Ptr (100 )
56+ var offset int64 = 0
57+ for {
58+ request .Offset = common .Int64Ptr (offset )
59+ response , err := client .DescribeInstances (request )
60+ if err != nil {
61+ logger .Error ("Enumerate CVM failed." )
62+ return list , err
6863 }
69- host := schema.Host {
70- HostName : * instance .InstanceName ,
71- ID : * instance .InstanceId ,
72- PublicIPv4 : ipv4 ,
73- PrivateIpv4 : privateIPv4 ,
74- Public : ipv4 != "" ,
75- Region : r ,
64+
65+ for _ , instance := range response .Response .InstanceSet {
66+ var ipv4 , privateIPv4 string
67+ if len (instance .PublicIpAddresses ) > 0 {
68+ ipv4 = * instance .PublicIpAddresses [0 ]
69+ }
70+ if len (instance .PrivateIpAddresses ) > 0 {
71+ privateIPv4 = * instance .PrivateIpAddresses [0 ]
72+ }
73+ host := schema.Host {
74+ HostName : * instance .InstanceName ,
75+ ID : * instance .InstanceId ,
76+ PublicIPv4 : ipv4 ,
77+ PrivateIpv4 : privateIPv4 ,
78+ Public : ipv4 != "" ,
79+ Region : r ,
80+ }
81+ os_name := strings .Split (* instance .OsName , " " )[0 ]
82+ if os_name == "Windows" {
83+ host .OSType = "WINDOWS"
84+ } else {
85+ host .OSType = "LINUX_UNIX"
86+ }
87+ list = append (list , host )
7688 }
77- os_name := strings .Split (* instance .OsName , " " )[0 ]
78- if os_name == "Windows" {
79- host .OSType = "WINDOWS"
80- } else {
81- host .OSType = "LINUX_UNIX"
89+
90+ if len (response .Response .InstanceSet ) < 100 {
91+ break
8292 }
83- list = append ( list , host )
93+ offset += 100
8494 }
8595 select {
8696 case <- ctx .Done ():
8797 goto done
8898 default :
89- prevLength , flag = processbar .RegionPrint (r , len (response .Response .InstanceSet ), prevLength , flag )
99+ prevLength , flag = processbar .RegionPrint (r , len (list )- count , prevLength , flag )
100+ count = len (list )
90101 }
91102 }
92103done:
0 commit comments