fog-xiaozhu 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +5 -0
  5. data/.rubocop_todo.yml +149 -0
  6. data/.ruby-gemset +1 -0
  7. data/.ruby-version +1 -0
  8. data/.travis.yml +4 -0
  9. data/CODE_OF_CONDUCT.md +13 -0
  10. data/Gemfile +4 -0
  11. data/LICENSE.txt +21 -0
  12. data/README.md +312 -0
  13. data/Rakefile +6 -0
  14. data/bin/console +14 -0
  15. data/bin/setup +7 -0
  16. data/fog-aliyun.gemspec +33 -0
  17. data/lib/fog/aliyun/compute.rb +424 -0
  18. data/lib/fog/aliyun/models/compute/eip_address.rb +57 -0
  19. data/lib/fog/aliyun/models/compute/eip_addresses.rb +28 -0
  20. data/lib/fog/aliyun/models/compute/image.rb +66 -0
  21. data/lib/fog/aliyun/models/compute/images.rb +25 -0
  22. data/lib/fog/aliyun/models/compute/route_entry.rb +26 -0
  23. data/lib/fog/aliyun/models/compute/route_entrys.rb +41 -0
  24. data/lib/fog/aliyun/models/compute/route_table.rb +30 -0
  25. data/lib/fog/aliyun/models/compute/route_tables.rb +27 -0
  26. data/lib/fog/aliyun/models/compute/security_group.rb +81 -0
  27. data/lib/fog/aliyun/models/compute/security_group_rule.rb +47 -0
  28. data/lib/fog/aliyun/models/compute/security_group_rules.rb +23 -0
  29. data/lib/fog/aliyun/models/compute/security_groups.rb +32 -0
  30. data/lib/fog/aliyun/models/compute/server.rb +70 -0
  31. data/lib/fog/aliyun/models/compute/servers.rb +42 -0
  32. data/lib/fog/aliyun/models/compute/snapshot.rb +52 -0
  33. data/lib/fog/aliyun/models/compute/snapshots.rb +38 -0
  34. data/lib/fog/aliyun/models/compute/volume.rb +101 -0
  35. data/lib/fog/aliyun/models/compute/volumes.rb +135 -0
  36. data/lib/fog/aliyun/models/compute/vpc.rb +77 -0
  37. data/lib/fog/aliyun/models/compute/vpcs.rb +80 -0
  38. data/lib/fog/aliyun/models/compute/vrouter.rb +35 -0
  39. data/lib/fog/aliyun/models/compute/vrouters.rb +61 -0
  40. data/lib/fog/aliyun/models/compute/vswitch.rb +70 -0
  41. data/lib/fog/aliyun/models/compute/vswitches.rb +80 -0
  42. data/lib/fog/aliyun/models/storage/directories.rb +39 -0
  43. data/lib/fog/aliyun/models/storage/directory.rb +48 -0
  44. data/lib/fog/aliyun/models/storage/file.rb +192 -0
  45. data/lib/fog/aliyun/models/storage/files.rb +193 -0
  46. data/lib/fog/aliyun/requests/compute/allocate_eip_address.rb +54 -0
  47. data/lib/fog/aliyun/requests/compute/allocate_public_ip_address.rb +39 -0
  48. data/lib/fog/aliyun/requests/compute/associate_eip_address.rb +49 -0
  49. data/lib/fog/aliyun/requests/compute/attach_disk.rb +79 -0
  50. data/lib/fog/aliyun/requests/compute/create_disk.rb +137 -0
  51. data/lib/fog/aliyun/requests/compute/create_image.rb +79 -0
  52. data/lib/fog/aliyun/requests/compute/create_security_group.rb +77 -0
  53. data/lib/fog/aliyun/requests/compute/create_security_group_egress_ip_rule.rb +63 -0
  54. data/lib/fog/aliyun/requests/compute/create_security_group_egress_sg_rule.rb +71 -0
  55. data/lib/fog/aliyun/requests/compute/create_security_group_ip_rule.rb +63 -0
  56. data/lib/fog/aliyun/requests/compute/create_security_group_sg_rule.rb +71 -0
  57. data/lib/fog/aliyun/requests/compute/create_server.rb +186 -0
  58. data/lib/fog/aliyun/requests/compute/create_snapshot.rb +46 -0
  59. data/lib/fog/aliyun/requests/compute/create_vpc.rb +46 -0
  60. data/lib/fog/aliyun/requests/compute/create_vpn_connection.rb +58 -0
  61. data/lib/fog/aliyun/requests/compute/create_vpn_customergateway.rb +48 -0
  62. data/lib/fog/aliyun/requests/compute/create_vswitch.rb +54 -0
  63. data/lib/fog/aliyun/requests/compute/delete_disk.rb +41 -0
  64. data/lib/fog/aliyun/requests/compute/delete_image.rb +31 -0
  65. data/lib/fog/aliyun/requests/compute/delete_security_group.rb +51 -0
  66. data/lib/fog/aliyun/requests/compute/delete_security_group_egress_ip_rule.rb +63 -0
  67. data/lib/fog/aliyun/requests/compute/delete_security_group_egress_sg_rule.rb +71 -0
  68. data/lib/fog/aliyun/requests/compute/delete_security_group_ip_rule.rb +63 -0
  69. data/lib/fog/aliyun/requests/compute/delete_security_group_sg_rule.rb +71 -0
  70. data/lib/fog/aliyun/requests/compute/delete_server.rb +48 -0
  71. data/lib/fog/aliyun/requests/compute/delete_snapshot.rb +31 -0
  72. data/lib/fog/aliyun/requests/compute/delete_vpc.rb +35 -0
  73. data/lib/fog/aliyun/requests/compute/delete_vpn_connection.rb +35 -0
  74. data/lib/fog/aliyun/requests/compute/delete_vpn_customergateway.rb +35 -0
  75. data/lib/fog/aliyun/requests/compute/delete_vswitch.rb +35 -0
  76. data/lib/fog/aliyun/requests/compute/detach_disk.rb +41 -0
  77. data/lib/fog/aliyun/requests/compute/join_security_group.rb +40 -0
  78. data/lib/fog/aliyun/requests/compute/leave_security_group.rb +40 -0
  79. data/lib/fog/aliyun/requests/compute/list_disks.rb +150 -0
  80. data/lib/fog/aliyun/requests/compute/list_eip_addresses.rb +55 -0
  81. data/lib/fog/aliyun/requests/compute/list_images.rb +82 -0
  82. data/lib/fog/aliyun/requests/compute/list_route_tables.rb +64 -0
  83. data/lib/fog/aliyun/requests/compute/list_security_group_rules.rb +73 -0
  84. data/lib/fog/aliyun/requests/compute/list_security_groups.rb +78 -0
  85. data/lib/fog/aliyun/requests/compute/list_server_types.rb +77 -0
  86. data/lib/fog/aliyun/requests/compute/list_servers.rb +71 -0
  87. data/lib/fog/aliyun/requests/compute/list_snapshots.rb +97 -0
  88. data/lib/fog/aliyun/requests/compute/list_vpcs.rb +47 -0
  89. data/lib/fog/aliyun/requests/compute/list_vpn_connections.rb +49 -0
  90. data/lib/fog/aliyun/requests/compute/list_vpn_customergateways.rb +43 -0
  91. data/lib/fog/aliyun/requests/compute/list_vpn_gateways.rb +49 -0
  92. data/lib/fog/aliyun/requests/compute/list_vrouters.rb +61 -0
  93. data/lib/fog/aliyun/requests/compute/list_vswitchs.rb +50 -0
  94. data/lib/fog/aliyun/requests/compute/list_zones.rb +44 -0
  95. data/lib/fog/aliyun/requests/compute/modify_vpc.rb +73 -0
  96. data/lib/fog/aliyun/requests/compute/modify_vswitch.rb +45 -0
  97. data/lib/fog/aliyun/requests/compute/reboot_server.rb +43 -0
  98. data/lib/fog/aliyun/requests/compute/release_eip_address.rb +29 -0
  99. data/lib/fog/aliyun/requests/compute/start_server.rb +41 -0
  100. data/lib/fog/aliyun/requests/compute/stop_server.rb +41 -0
  101. data/lib/fog/aliyun/requests/compute/unassociate_eip_address.rb +49 -0
  102. data/lib/fog/aliyun/requests/storage/copy_object.rb +39 -0
  103. data/lib/fog/aliyun/requests/storage/delete_bucket.rb +30 -0
  104. data/lib/fog/aliyun/requests/storage/delete_container.rb +35 -0
  105. data/lib/fog/aliyun/requests/storage/delete_object.rb +51 -0
  106. data/lib/fog/aliyun/requests/storage/get_bucket.rb +141 -0
  107. data/lib/fog/aliyun/requests/storage/get_container.rb +60 -0
  108. data/lib/fog/aliyun/requests/storage/get_containers.rb +64 -0
  109. data/lib/fog/aliyun/requests/storage/get_object.rb +45 -0
  110. data/lib/fog/aliyun/requests/storage/get_object_http_url.rb +43 -0
  111. data/lib/fog/aliyun/requests/storage/get_object_https_url.rb +43 -0
  112. data/lib/fog/aliyun/requests/storage/head_object.rb +34 -0
  113. data/lib/fog/aliyun/requests/storage/list_buckets.rb +40 -0
  114. data/lib/fog/aliyun/requests/storage/list_objects.rb +91 -0
  115. data/lib/fog/aliyun/requests/storage/put_bucket.rb +22 -0
  116. data/lib/fog/aliyun/requests/storage/put_container.rb +35 -0
  117. data/lib/fog/aliyun/requests/storage/put_object.rb +189 -0
  118. data/lib/fog/aliyun/storage.rb +233 -0
  119. data/lib/fog/aliyun/version.rb +5 -0
  120. data/lib/fog/aliyun.rb +19 -0
  121. data/lib/fog/bin/aliyun.rb +31 -0
  122. metadata +311 -0
@@ -0,0 +1,30 @@
1
+ require 'fog/core/model'
2
+ module Fog
3
+ module Compute
4
+ class Aliyun
5
+ class RouteTable < Fog::Model
6
+ # "RouteTables"=>{"RouteTable"=>[
7
+ # {"CreationTime"=>"2015-08-03T11:23:35Z", "RouteEntrys"=>{"RouteEntry"=>[
8
+ # {"Status"=>"Available", "Type"=>"System", "InstanceId"=>"", "RouteTableId"=>"vtb-2504onoxh", "DestinationCidrBlock"=>"172.16.0.0/24"},
9
+ # {"Status"=>"Available", "Type"=>"System", "InstanceId"=>"", "RouteTableId"=>"vtb-2504onoxh", "DestinationCidrBlock"=>"172.16.1.0/24"},
10
+ # {"Status"=>"Available", "Type"=>"System", "InstanceId"=>"", "RouteTableId"=>"vtb-2504onoxh", "DestinationCidrBlock"=>"172.16.2.0/24"},
11
+ # {"Status"=>"Available", "Type"=>"System", "InstanceId"=>"", "RouteTableId"=>"vtb-2504onoxh", "DestinationCidrBlock"=>"100.64.0.0/10"},
12
+ # {"Status"=>"Available", "Type"=>"System", "InstanceId"=>"", "RouteTableId"=>"vtb-2504onoxh", "DestinationCidrBlock"=>"10.0.0.0/8"}]},
13
+ # "RouteTableId"=>"vtb-2504onoxh", "RouteTableType"=>"System", "VRouterId"=>"vrt-25azmd2wm"}]}
14
+ identity :id, aliases: 'RouteTableId'
15
+ attribute :created_at, aliases: 'CreationTime'
16
+ attribute :type, aliases: 'RouteTableType'
17
+ attribute :v_router_id, aliases: 'VRouterId'
18
+ # collection Fog::Compute::Aliyun::RouteEntrys
19
+ def route_entrys
20
+ @route_entrys ||= begin
21
+ Fog::Compute::Aliyun::RouteEntrys.new(
22
+ route_table: self,
23
+ service: service
24
+ )
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,27 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/aliyun/models/compute/route_table'
3
+
4
+ module Fog
5
+ module Compute
6
+ class Aliyun
7
+ class RouteTables < Fog::Collection
8
+ attribute :v_router
9
+
10
+ model Fog::Compute::Aliyun::RouteTable
11
+
12
+ def all(options = {})
13
+ requires :v_router
14
+ data = Fog::JSON.decode(service.list_route_tables(v_router.id, options).body)['RouteTables']['RouteTable']
15
+ load(data)
16
+ end
17
+
18
+ def get(routeTableId)
19
+ requires :v_router
20
+ if routeTableId
21
+ self.class.new(service: service, v_router: v_router).all(routeTableId: routeTableId)[0]
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,81 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Compute
5
+ class Aliyun
6
+ class SecurityGroup < Fog::Model
7
+ identity :id, aliases: 'SecurityGroupId'
8
+ attribute :name, aliases: 'SecurityGroupName'
9
+ attribute :description, aliases: 'Description'
10
+ attribute :created_at, aliases: 'CreationTime'
11
+ attribute :vpc_id, aliases: 'VpcId'
12
+
13
+ def vpc
14
+ requires :vpc_id
15
+ service.vpcs.get(vpc_id)
16
+ end
17
+
18
+ def security_group_rules
19
+ requires :id
20
+ service.security_group_rules.get(id)
21
+ end
22
+
23
+ def save(options = {})
24
+ options[:vpcId] = vpc_id if vpc_id
25
+ options[:name] = name if name
26
+ options[:description] = description if description
27
+ Fog::JSON.decode(service.create_security_group(options).body)
28
+ true
29
+ end
30
+
31
+ def destroy
32
+ requires :id
33
+ service.delete_security_group(id)
34
+ true
35
+ end
36
+
37
+ def authorize_security_group_sg_rule(group_id, direction = 'ingress', options = {})
38
+ requires :id
39
+ if direction == 'egress'
40
+ service.create_security_group_egress_sg_rule(id, group_id, options)
41
+ else
42
+ service.create_security_group_sg_rule(id, group_id, options)
43
+ end
44
+ true
45
+ end
46
+
47
+ def authorize_security_group_ip_rule(cidr_ip, direction = 'ingress', options = {})
48
+ requires :id
49
+ nic_type = options.fetch(:nic_type, 'internet')
50
+ if direction == 'egress'
51
+ service.create_security_group_egress_ip_rule(id, cidr_ip, nic_type, options)
52
+ else
53
+ service.create_security_group_ip_rule(id, cidr_ip, nic_type, options)
54
+ end
55
+ true
56
+ end
57
+
58
+ def revoke_seurity_group_sg_rule(group_id, direction = 'ingress', options = {})
59
+ requires :id
60
+ if direction == 'egress'
61
+ service.delete_security_group_egress_sg_rule(id, group_id, options)
62
+ else
63
+ service.delete_security_group_sg_rule(id, group_id, options)
64
+ end
65
+ true
66
+ end
67
+
68
+ def revoke_security_group_ip_rule(cidr_ip, direction = 'ingress', options = {})
69
+ requires :id
70
+ nic_type = options.fetch(:nic_type, 'internet')
71
+ if direction == 'egress'
72
+ service.delete_security_group_egress_ip_rule(id, cidr_ip, nic_type, options)
73
+ else
74
+ service.delete_security_group_ip_rule(id, cidr_ip, nic_type, options)
75
+ end
76
+ true
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,47 @@
1
+ require 'fog/core/model'
2
+
3
+ module Fog
4
+ module Compute
5
+ class Aliyun
6
+ class SecurityGroupRule < Fog::Model
7
+ attribute :security_group_id, aliases: 'SecurityGroupId'
8
+ attribute :source_cidr_ip, aliases: 'SourceCidrIp'
9
+ attribute :source_owner, aliases: 'SourceGroupOwnerAccount'
10
+ attribute :source_group_id, aliases: 'SourceGroupId'
11
+ attribute :ip_protocol, aliases: 'IpProtocol'
12
+ attribute :dest_cidr_ip, aliases: 'DestCidrIp'
13
+ attribute :dest_owner, aliases: 'DestGroupOwnerAccount'
14
+ attribute :dest_group_id, aliases: 'DestGroupId'
15
+ attribute :nic_type, aliases: 'NicType'
16
+ attribute :policy, aliases: 'Policy'
17
+ attribute :port_range, aliases: 'PortRange'
18
+ attribute :direction, aliases: 'Direction'
19
+ attribute :priority, aliases: 'Priority'
20
+
21
+ def save
22
+ requires :security_group_id, :ip_protocol, :port_range, :direction
23
+ options = {}
24
+ options[:portRange] = port_range if port_range
25
+ options[:policy] = policy if policy
26
+ options[:priority] = priority if port_range
27
+ options[:protocol] = ip_protocol if ip_protocol
28
+ if direction == 'egress'
29
+ if dest_cidr_ip
30
+ service.create_security_group_egress_ip_rule(security_group_id, dest_cidr_ip, nic_type, options)
31
+ elsif dest_group_id
32
+ options[:destGroupOwnerAccount] = dest_owner if dest_owner
33
+ service.create_security_group_egress_sg_rule(security_group_id, dest_group_id, options)
34
+ end
35
+ else
36
+ if source_cidr_ip
37
+ service.create_security_group_ip_rule(security_group_id, source_cidr_ip, nic_type, options)
38
+ elsif source_group_id
39
+ options[:sourceGroupOwnerAccount] = source_owner if source_owner
40
+ service.create_security_group_sg_rule(security_group_id, source_group_id, options)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,23 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/aliyun/models/compute/security_group_rule'
3
+
4
+ module Fog
5
+ module Compute
6
+ class Aliyun
7
+ class SecurityGroupRules < Fog::Collection
8
+ model Fog::Compute::Aliyun::SecurityGroupRule
9
+ attribute :security_group_id
10
+
11
+ def get(security_group_id, options = {})
12
+ data = Fog::JSON.decode(service.list_security_group_rules(security_group_id, options).body)
13
+ self.security_group_id = data['SecurityGroupId']
14
+ permissions = data['Permissions']['Permission']
15
+ permissions.each do |permission|
16
+ permission['SecurityGroupId'] = self.security_group_id
17
+ end
18
+ load(permissions)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,32 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/aliyun/models/compute/security_group'
3
+
4
+ module Fog
5
+ module Compute
6
+ class Aliyun
7
+ class SecurityGroups < Fog::Collection
8
+ model Fog::Compute::Aliyun::SecurityGroup
9
+
10
+ def all(options = {})
11
+ data = Fog::JSON.decode(service.list_security_groups(options).body)['SecurityGroups']['SecurityGroup']
12
+ load(data)
13
+ # ['Images']['Image']
14
+ end
15
+
16
+ def get(security_group_id)
17
+ if security_group_id
18
+ data = self.class.new(service: service).all
19
+ result = nil
20
+ data.each do |i|
21
+ if i.id == security_group_id
22
+ result = i
23
+ break
24
+ end
25
+ end
26
+ result
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,70 @@
1
+ require 'fog/compute/models/server'
2
+
3
+ module Fog
4
+ module Compute
5
+ class Aliyun
6
+ class Server < Fog::Compute::Server
7
+ identity :id, aliases: 'InstanceId'
8
+ attribute :image_id, aliases: 'ImageId'
9
+ attribute :inner_ip, aliases: 'InnerIpAddress'
10
+ attribute :vlan_id, aliases: 'VlanId'
11
+ attribute :eip, aliases: 'EipAddress'
12
+ attribute :max_bandwidth_in, aliases: 'InternetMaxBandwidthIn'
13
+ attribute :zone_id, aliases: 'ZoneId'
14
+ attribute :internet_charge_type, aliases: 'InternetChargeType'
15
+ attribute :serial_number, aliases: 'SerialNumber'
16
+ attribute :io_optimized, aliases: 'IoOptimized'
17
+ attribute :max_bandwidth_out, aliases: 'InternetMaxBandwidthOut'
18
+ attribute :vpc_attributes, aliases: 'VpcAttributes'
19
+ attribute :device_available, aliases: 'DeviceAvailable'
20
+ attribute :private_ip, aliases: 'PrivateIpAddress'
21
+ attribute :security_group_ids, aliases: 'SecurityGroupIds'
22
+ attribute :name, aliases: 'InstanceName'
23
+ attribute :description, aliases: 'Description'
24
+ attribute :network_type, aliases: 'InstanceNetworkType'
25
+ attribute :public_ip, aliases: 'PublicIpAddress'
26
+ attribute :host_name, aliases: 'HostName'
27
+ attribute :type, aliases: 'InstanceType'
28
+ attribute :created_at, aliases: 'CreationTime'
29
+ attribute :state, aliases: 'Status'
30
+ attribute :cluster_id, aliases: 'ClusterId'
31
+ attribute :region_id, aliases: 'RegionId'
32
+ attribute :charge_type, aliases: 'InstanceChargeType'
33
+ attribute :operation_locks, aliases: 'OperationLocks'
34
+ attribute :expired_at, aliases: 'ExpiredTime'
35
+
36
+ def image
37
+ requires image_id
38
+ Fog::Compute::Aliyun::Image.new(service: service).all(imageId: image_id)[0]
39
+ end
40
+
41
+ def vpc
42
+ requires :vpc_id
43
+ $vpc = Fog::Compute::Aliyun::Vpcs.new(service: service).all('vpcId' => vpc_id)[0]
44
+ end
45
+
46
+ # {"ImageId"=>"ubuntu1404_32_20G_aliaegis_20150325.vhd", "InnerIpAddress"=>{"IpAddress"=>["10.171.90.171"]},
47
+ # "VlanId"=>"", "InstanceId"=>"i-25d1ry3jz",
48
+ # "EipAddress"=>{"IpAddress"=>"", "AllocationId"=>"", "InternetChargeType"=>""},
49
+ # "InternetMaxBandwidthIn"=>-1, "ZoneId"=>"cn-beijing-a", "InternetChargeType"=>"PayByTraffic",
50
+ # "SerialNumber"=>"9b332890-35e8-45c9-8e52-14e1156a4f58", "IoOptimized"=>false, "InternetMaxBandwidthOut"=>1,
51
+ # "VpcAttributes"=>{"NatIpAddress"=>"", "PrivateIpAddress"=>{"IpAddress"=>[]}, "VSwitchId"=>"", "VpcId"=>""},
52
+ # "DeviceAvailable"=>true, "SecurityGroupIds"=>{"SecurityGroupId"=>["sg-25rgacf5p"]}, "InstanceName"=>"iZ25d1ry3jzZ",
53
+ # "Description"=>"", "InstanceNetworkType"=>"classic", "PublicIpAddress"=>{"IpAddress"=>["123.57.73.19"]},
54
+ # "HostName"=>"iZ25d1ry3jzZ", "InstanceType"=>"ecs.t1.small", "CreationTime"=>"2015-10-13T14:57Z", "Status"=>"Stopped",
55
+ # "ClusterId"=>"", "RegionId"=>"cn-beijing", "InstanceChargeType"=>"PostPaid", "OperationLocks"=>{
56
+ # "LockReason"=>[{"LockReason"=>"financial"}]}, "ExpiredTime"=>"2015-10-14T20:53Z"}
57
+
58
+ # @!attribute [rw] personality
59
+ # @note This attribute is only used for server creation. This field will be nil on subsequent retrievals.
60
+ # @return [Hash] Hash containing data to inject into the file system of the cloud server instance during server creation.
61
+ # @example To inject fog.txt into file system
62
+ # :personality => [{ :path => '/root/fog.txt',
63
+ # :contents => Base64.encode64('Fog was here!')
64
+ # }]
65
+ # @see #create
66
+ # @see http://docs.openstack.org/api/openstack-compute/2/content/Server_Personality-d1e2543.html
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,42 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/aliyun/models/compute/server'
3
+
4
+ module Fog
5
+ module Compute
6
+ class Aliyun
7
+ class Servers < Fog::Collection
8
+ model Fog::Compute::Aliyun::Server
9
+
10
+ def all(options = {})
11
+ Fog::JSON.decode(service.list_servers(options).body)['Instances']['Instance']
12
+ end
13
+
14
+ # Creates a new server and populates ssh keys
15
+ # @return [Fog::Compute::OpenStack::Server]
16
+ # @raise [Fog::Compute::OpenStack::NotFound] - HTTP 404
17
+ # @raise [Fog::Compute::OpenStack::BadRequest] - HTTP 400
18
+ # @raise [Fog::Compute::OpenStack::InternalServerError] - HTTP 500
19
+ # @raise [Fog::Compute::OpenStack::ServiceError]
20
+ # @example
21
+ # service.servers.bootstrap :name => 'bootstrap-server',
22
+ # :flavor_ref => service.flavors.first.id,
23
+ # :image_ref => service.images.find {|img| img.name =~ /Ubuntu/}.id,
24
+ # :public_key_path => '~/.ssh/fog_rsa.pub',
25
+ # :private_key_path => '~/.ssh/fog_rsa'
26
+ #
27
+ # def bootstrap(new_attributes = {})
28
+ # server = create(new_attributes)
29
+ # server.wait_for { ready? }
30
+ # server.setup(:password => server.password)
31
+ # server
32
+ # end
33
+
34
+ def get(server_id)
35
+ if server_id
36
+ self.class.new(service: service).all(instanceId: server_id)[0]
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,52 @@
1
+ require 'fog/core/model'
2
+ module Fog
3
+ module Compute
4
+ class Aliyun
5
+ class Snapshot < Fog::Model
6
+ identity :id, aliases: 'SnapshotId'
7
+ attribute :name, aliases: 'SnapshotName'
8
+ attribute :description, aliases: 'Description'
9
+ attribute :progress, aliases: 'Progress'
10
+ attribute :volume_id, aliases: 'SourceDiskId'
11
+ attribute :volume_size, aliases: 'SourceDiskSize'
12
+ attribute :volume_type, aliases: 'SourceDiskType'
13
+ attribute :product_code, aliases: 'ProductCode'
14
+ attribute :created_at, aliases: 'CreationTime'
15
+ attribute :state, aliases: 'Status'
16
+ attribute :usage, aliases: 'Usage'
17
+ attribute :tags, aliases: 'Tags'
18
+
19
+ def destroy
20
+ requires :id
21
+ service.delete_snapshot(id)
22
+ true
23
+ end
24
+
25
+ def ready?
26
+ state == 'accomplished'
27
+ end
28
+
29
+ def save(options = {})
30
+ # raise Fog::Errors::Error.new('Resaving an existing object may create a duplicate') if persisted?
31
+ requires :volume_id
32
+ options[:name] = name if name
33
+ options[:description] = description if description
34
+ data = Fog::JSON.decode(service.create_snapshot(volume_id, options).body)
35
+ merge_attributes(data)
36
+ true
37
+ end
38
+
39
+ def volume
40
+ requires :volume_id
41
+ Fog::Compute::Aliyun::Volumes.new(service: service).all(diskIds: [volume_id])[0]
42
+ end
43
+
44
+ private
45
+
46
+ def volume=(new_volume)
47
+ self.volume_id = new_volume.id
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,38 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/aliyun/models/compute/snapshot'
3
+
4
+ module Fog
5
+ module Compute
6
+ class Aliyun
7
+ class Snapshots < Fog::Collection
8
+ # attribute :filters
9
+ model Fog::Compute::Aliyun::Snapshot
10
+
11
+ # def initialize(attributes)
12
+ # self.filters ||= {}
13
+ # super
14
+ # end
15
+
16
+ def all(filters_arg = {})
17
+ unless filters_arg.is_a?(Hash)
18
+ Fog::Logger.deprecation("all with #{filters_arg.class} param is deprecated, use all('snapshotIds' => []) instead [light_black](#{caller.first})[/]")
19
+ filters_arg = { 'snapshotIds' => [*filters_arg] }
20
+ end
21
+ volume_id = filters_arg[:volume_id]
22
+ volume_type = filters_arg[:volume_type]
23
+ filters_arg[:diskId] = volume_id if volume_id
24
+ filters_arg[:sourseDiskType] = volume_type if volume_type
25
+ data = Fog::JSON.decode(service.list_snapshots(filters_arg).body)['Snapshots']['Snapshot']
26
+ load(data)
27
+ end
28
+
29
+ def get(snapshot_id)
30
+ if snapshot_id
31
+ snapshotIds = Array.new(1, snapshot_id)
32
+ self.class.new(service: service).all(snapshotIds: snapshotIds)[0]
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,101 @@
1
+ require 'fog/core/model'
2
+ module Fog
3
+ module Compute
4
+ class Aliyun
5
+ class Volume < Fog::Model
6
+ # "ImageId": "",
7
+ # "InstanceId": "",
8
+ # "OperationLocks": {
9
+ # "OperationLock": []
10
+ # },
11
+ # "Portable": true,
12
+ # "ProductCode": "",
13
+ # "RegionId": "cn-qingdao",
14
+ # "Size": 5,
15
+ # "SourceSnapshotId": "",
16
+ # "Status": "Available",
17
+ # "Type": "data",
18
+
19
+ identity :id, aliases: 'DiskId'
20
+ attribute :region_id, aliases: 'RegionId'
21
+ attribute :zone_id, aliases: 'ZoneId'
22
+ attribute :name, aliases: 'DiskName'
23
+ attribute :description, aliases: 'Description'
24
+ attribute :type, aliases: 'Type'
25
+ attribute :category, aliases: 'Category'
26
+ attribute :size, aliases: 'Size'
27
+ attribute :image_id, aliases: 'ImageId'
28
+ attribute :snapshot_id, aliases: 'SourceSnapshotId'
29
+ attribute :product_code, aliases: 'ProductCode'
30
+ attribute :portable, aliases: 'Portable'
31
+ attribute :state, aliases: 'Status'
32
+ attribute :operation_locks, aliases: 'OperationLocks'
33
+ attribute :server_id, aliases: 'InstanceId'
34
+ attribute :device, aliases: 'Device'
35
+ attribute :delete_with_instance, aliases: 'DeleteWithInstance'
36
+ attribute :delete_auto_snapshot, aliases: 'DeleteAutoSnapshot'
37
+ attribute :enable_auto_snapshot, aliases: 'EnableAutoSnapshot'
38
+ attribute :created_at, aliases: 'CreationTime'
39
+ attribute :attached_at, aliases: 'AttachedTime'
40
+ attribute :detached_at, aliases: 'DetachedTime'
41
+ attribute :expired_at, aliases: 'ExpiredTime'
42
+ attribute :charge_type, aliases: 'DiskChargeType'
43
+ attribute :tags, aliases: 'Tags'
44
+
45
+ def destroy
46
+ requires :id
47
+
48
+ service.delete_disk(id)
49
+ true
50
+ end
51
+
52
+ def ready?
53
+ requires :state
54
+ state == 'Available'
55
+ end
56
+
57
+ def save(options = {})
58
+ # raise Fog::Errors::Error.new('Resaving an existing object may create a duplicate') if persisted?
59
+ # requires :availability_zone
60
+ requires_one :size, :snapshot_id
61
+ options[:name] = name if name
62
+ options[:description] = description if description
63
+ if snapshot_id
64
+ data = Fog::JSON.decode(service.create_disk_by_snapshot(snapshot_id, options).body)
65
+ merge_attributes(data)
66
+ elsif size
67
+ data = Fog::JSON.decode(service.create_disk(size, options).body)
68
+ merge_attributes(data)
69
+ end
70
+
71
+ true
72
+ end
73
+
74
+ def image
75
+ requires :image_id
76
+ Fog::Compute::Aliyun::Images.new(service: service).all(imageId: image_id)[0]
77
+ end
78
+
79
+ def snapshots
80
+ requires :id
81
+ Fog::Compute::Aliyun::Snapshots.new(service: service).all(volume_id: id)
82
+ end
83
+
84
+ def source
85
+ requires :snapshot_id
86
+ Fog::Compute::Aliyun::Snapshots.new(service: service).all(snapshotIds: [snapshot_id])[0]
87
+ end
88
+
89
+ private
90
+
91
+ def source=(new_source)
92
+ self.snapshot_id = new_source.id
93
+ end
94
+
95
+ def image=(new_image)
96
+ self.image_id = new_image.id
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end