You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by an...@apache.org on 2017/04/11 00:23:55 UTC
[01/11] libcloud git commit: 1&1 Compute Driver
Repository: libcloud
Updated Branches:
refs/heads/trunk 30715a44c -> bcdf8b594
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/list_load_balancer.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/list_load_balancer.json b/libcloud/test/compute/fixtures/oneandone/list_load_balancer.json
new file mode 100644
index 0000000..93a542a
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/list_load_balancer.json
@@ -0,0 +1,78 @@
+[
+ {
+ "id": "B23F1B4F84E983B4FEDD5459E877058A",
+ "name": "My load balancer",
+ "state": "CONFIGURING",
+ "creation_date": "2015-03-03T11:12:00+00:00",
+ "description": "My load balancer description",
+ "ip": "10.5.138.52",
+ "health_check_test": "TCP",
+ "health_check_interval": 40,
+ "health_check_path": null,
+ "health_check_path_parser": null,
+ "persistence": true,
+ "persistence_time": 1200,
+ "method": "ROUND_ROBIN",
+ "datacenter": {
+ "id": "D0F6D8C8ED29D3036F94C27BBB7BAD36",
+ "location": "USA",
+ "country_code": "US"
+ },
+ "rules": [
+ {
+ "id": "D7A0A7C445D844848EBB439C28B46183",
+ "protocol": "TCP",
+ "port_balancer": 22,
+ "port_server": 22,
+ "source": "0.0.0.0"
+ },
+ {
+ "id": "9AE836CDE379EEB361287F07B3300F84",
+ "protocol": "TCP",
+ "port_balancer": 85,
+ "port_server": 85,
+ "source": "0.0.0.0"
+ }
+ ],
+ "server_ips": [],
+ "cloudpanel_id": "LB99AA4_1"
+ },
+ {
+ "id": "B23F1B4F84E983B4FEDD5459E877058B",
+ "name": "My Load Balancer II",
+ "state": "CONFIGURING",
+ "creation_date": "2015-03-03T11:12:00+00:00",
+ "description": "My load balancer II description",
+ "ip": "10.5.138.53",
+ "health_check_test": "TCP",
+ "health_check_interval": 40,
+ "health_check_path": null,
+ "health_check_path_parser": null,
+ "persistence": true,
+ "persistence_time": 1200,
+ "method": "ROUND_ROBIN",
+ "region": {
+ "id": "D0F6D8C8ED29D3036F94C27BBB7BAD36",
+ "location": "USA",
+ "country_code": "US"
+ },
+ "rules": [
+ {
+ "id": "D7A0A7C445D844848EBB439C28B46184",
+ "protocol": "TCP",
+ "port_balancer": 22,
+ "port_server": 22,
+ "source": "0.0.0.0"
+ },
+ {
+ "id": "9AE836CDE379EEB361287F07B3300F85",
+ "protocol": "TCP",
+ "port_balancer": 9999,
+ "port_server": 9999,
+ "source": "0.0.0.0"
+ }
+ ],
+ "server_ips": [],
+ "cloudpanel_id": "LB99AA4_1"
+ }
+]
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/list_monitoring_policies.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/list_monitoring_policies.json b/libcloud/test/compute/fixtures/oneandone/list_monitoring_policies.json
new file mode 100644
index 0000000..7d3c75b
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/list_monitoring_policies.json
@@ -0,0 +1,152 @@
+[
+ {
+ "id": "0F9A1604FC80EB625FC6AEE7394893BE",
+ "name": "Default Policy",
+ "description": "Default Policy Description",
+ "default": 1,
+ "state": "ACTIVE",
+ "creation_date": "2014-10-29T07:52:46+00:00",
+ "email": "",
+ "agent": false,
+ "servers": [
+ {
+ "id": "E83777750130E1111AA89623B9557CAF",
+ "name": "My Server 1"
+ },
+ {
+ "id": "CB22C6E0428239348A6B70BAE0D67E66",
+ "name": "My Server 2"
+ },
+ {
+ "id": "6AAA2BD60813F419DEC8D69C6E4F6477",
+ "name": "My Server 3"
+ }
+ ],
+ "thresholds": {
+ "cpu": {
+ "warning": {
+ "value": 90,
+ "alert": false
+ },
+ "critical": {
+ "value": 95,
+ "alert": false
+ }
+ },
+ "ram": {
+ "warning": {
+ "value": 90,
+ "alert": false
+ },
+ "critical": {
+ "value": 95,
+ "alert": false
+ }
+ },
+ "transfer": {
+ "warning": {
+ "value": 1000,
+ "alert": false
+ },
+ "critical": {
+ "value": 2000,
+ "alert": false
+ }
+ },
+ "internal_ping": {
+ "warning": {
+ "value": 50,
+ "alert": false
+ },
+ "critical": {
+ "value": 100,
+ "alert": false
+ }
+ }
+ },
+ "ports": [],
+ "processes": [],
+ "cloudpanel_id": "mo99AA4_1"
+ },
+ {
+ "id": "C81F17AF6F6F6717372B79A882B25E92",
+ "name": "My monitoring policy",
+ "description": null,
+ "default": 0,
+ "state": "ACTIVE",
+ "creation_date": "2015-02-26T07:23:42+00:00",
+ "email": "",
+ "agent": true,
+ "servers": [],
+ "thresholds": {
+ "cpu": {
+ "warning": {
+ "value": 90,
+ "alert": false
+ },
+ "critical": {
+ "value": 95,
+ "alert": false
+ }
+ },
+ "ram": {
+ "warning": {
+ "value": 90,
+ "alert": false
+ },
+ "critical": {
+ "value": 95,
+ "alert": false
+ }
+ },
+ "disk": {
+ "warning": {
+ "value": 80,
+ "alert": false
+ },
+ "critical": {
+ "value": 90,
+ "alert": false
+ }
+ },
+ "transfer": {
+ "warning": {
+ "value": 1000,
+ "alert": false
+ },
+ "critical": {
+ "value": 2000,
+ "alert": false
+ }
+ },
+ "internal_ping": {
+ "warning": {
+ "value": 50,
+ "alert": false
+ },
+ "critical": {
+ "value": 100,
+ "alert": false
+ }
+ }
+ },
+ "ports": [
+ {
+ "id": "5F67F2706335AF34FFCDF71E5AF08B2B",
+ "protocol": "TCP",
+ "port": "22",
+ "alert_when": false,
+ "alert": true
+ }
+ ],
+ "processes": [
+ {
+ "id": "13CF2BEADA60230C6241C81C248F3C4B",
+ "process": "test",
+ "alert_when": false,
+ "alert": true
+ }
+ ],
+ "cloudpanel_id": "mo99AA4_2"
+ }
+]
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/list_public_ips.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/list_public_ips.json b/libcloud/test/compute/fixtures/oneandone/list_public_ips.json
new file mode 100644
index 0000000..6d4260e
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/list_public_ips.json
@@ -0,0 +1,59 @@
+[
+ {
+ "id": "569FA2EC06DD48C9E8635F3384A018DB",
+ "ip": "10.5.138.52",
+ "type": "IPV4",
+ "datacenter": {
+ "id": "D0F6D8C8ED29D3036F94C27BBB7BAD36",
+ "location": "USA",
+ "country_code": "US"
+ },
+ "assigned_to": {
+ "id": "B23F1B4F84E983B4FEDD5459E877058A",
+ "name": "My load balancer",
+ "type": "LOAD_BALANCER"
+ },
+ "reverse_dns": null,
+ "is_dhcp": false,
+ "state": "ACTIVE",
+ "creation_date": "2015-03-03T11:12:10+00:00"
+ },
+ {
+ "id": "6F033A13C3EFCE0FB60783280A118D63",
+ "ip": "10.5.133.191",
+ "type": "IPV4",
+ "datacenter": {
+ "id": "D0F6D8C8ED29D3036F94C27BBB7BAD36",
+ "location": "USA",
+ "country_code": "US"
+ },
+ "assigned_to": {
+ "id": "BDAF0EC6A36E9E554B80B7E7365821F5",
+ "name": "My Server 1",
+ "type": "SERVER"
+ },
+ "reverse_dns": null,
+ "is_dhcp": true,
+ "state": "ACTIVE",
+ "creation_date": "2015-05-04T07:21:37+00:00"
+ },
+ {
+ "id": "39C73A57B33DAF2F9FA1EBEA4C301FCF",
+ "ip": "10.5.138.81",
+ "type": "IPV4",
+ "datacenter": {
+ "id": "D0F6D8C8ED29D3036F94C27BBB7BAD36",
+ "location": "USA",
+ "country_code": "US"
+ },
+ "assigned_to": {
+ "id": "B23F1B4F84E983B4FEDD5459E877058A",
+ "name": "My load balancer",
+ "type": "LOAD_BALANCER"
+ },
+ "reverse_dns": null,
+ "is_dhcp": false,
+ "state": "ACTIVE",
+ "creation_date": "2015-03-03T11:13:16+00:00"
+ }
+]
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/list_servers.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/list_servers.json b/libcloud/test/compute/fixtures/oneandone/list_servers.json
new file mode 100644
index 0000000..f9e05b2
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/list_servers.json
@@ -0,0 +1,197 @@
+[
+ {
+ "id":"8A7D5122BDC173B6E52223878CEF2748",
+ "name":"Docs Content Ubuntu 16.04-1",
+ "description":"",
+ "status":{
+ "state":"POWERED_ON",
+ "percent":null
+ },
+ "datacenter":{
+ "id":"908DC2072407C94C8054610AD5A53B8C",
+ "country_code":"US",
+ "location":"United States of America"
+ },
+ "creation_date":"2016-10-03T16:44:34+00:00",
+ "image":{
+ "id":"4DBFA2D31B1A303A9CE0E4ECF8838FDE",
+ "name":"ubuntu1604-64std"
+ },
+ "hardware":{
+ "fixed_instance_size_id":"65929629F35BBFBA63022008F773F3EB",
+ "vcore":1,
+ "cores_per_processor":1,
+ "ram":1,
+ "hdds":[
+ {
+ "id":"F92B0519D2F9A7EFA961F956C4B381B4",
+ "size":40,
+ "is_main":true
+ }
+ ]
+ },
+ "ips":[
+ {
+ "id":"9774FB2A6DCC45733B115A98FCD59CC6",
+ "ip":"50.21.182.126"
+ }
+ ],
+ "alerts":null
+ },
+ {
+ "id":"E7D36EC025C73796035BF4F171379025",
+ "name":"Docs Content Test Server: CentOS 7-1",
+ "description":"",
+ "status":{
+ "state":"POWERED_ON",
+ "percent":null
+ },
+ "datacenter":{
+ "id":"908DC2072407C94C8054610AD5A53B8C",
+ "country_code":"US",
+ "location":"United States of America"
+ },
+ "creation_date":"2016-05-05T17:39:50+00:00",
+ "image":{
+ "id":"B5F778B85C041347BCDCFC3172AB3F3C",
+ "name":"centos7-64std"
+ },
+ "hardware":{
+ "fixed_instance_size_id":"65929629F35BBFBA63022008F773F3EB",
+ "vcore":1,
+ "cores_per_processor":1,
+ "ram":1,
+ "hdds":[
+ {
+ "id":"CDB278D95A92CB4C379A9CAAD6759F02",
+ "size":40,
+ "is_main":true
+ }
+ ]
+ },
+ "ips":[
+ {
+ "id":"FDBE99EDD57F8596CBF71B6B64BD0A92",
+ "ip":"62.151.179.99"
+ }
+ ],
+ "alerts":null
+ },
+ {
+ "id":"DDDC4CCA34AAB08132FA1E40F9FEAC25",
+ "name":"App Dev Server 5",
+ "description":"",
+ "status":{
+ "state":"POWERED_ON",
+ "percent":null
+ },
+ "datacenter":{
+ "id":"908DC2072407C94C8054610AD5A53B8C",
+ "country_code":"US",
+ "location":"United States of America"
+ },
+ "creation_date":"2016-03-04T21:29:00+00:00",
+ "image":{
+ "id":"96D5CEB497043FD54E834DEC4B8FF70A",
+ "name":"centos7-64cpanel"
+ },
+ "hardware":{
+ "fixed_instance_size_id":"65929629F35BBFBA63022008F773F3EB",
+ "vcore":1,
+ "cores_per_processor":1,
+ "ram":1,
+ "hdds":[
+ {
+ "id":"5E23F849DD3D6A47615D8EE441FE74CC",
+ "size":40,
+ "is_main":true
+ }
+ ]
+ },
+ "ips":[
+ {
+ "id":"E193E9D2213088B3CCE8AD69646CEF18",
+ "ip":"70.35.206.196"
+ }
+ ],
+ "alerts":null
+ },
+ {
+ "id":"D5C5C1D01249DE9B88BE3DAE973AA090",
+ "name":"Docs Test Server: CentOS 7-2",
+ "description":"",
+ "status":{
+ "state":"POWERED_ON",
+ "percent":null
+ },
+ "datacenter":{
+ "id":"908DC2072407C94C8054610AD5A53B8C",
+ "country_code":"US",
+ "location":"United States of America"
+ },
+ "creation_date":"2016-10-24T18:13:41+00:00",
+ "image":{
+ "id":"B5F778B85C041347BCDCFC3172AB3F3C",
+ "name":"centos7-64std"
+ },
+ "hardware":{
+ "fixed_instance_size_id":"3D4C49EAEDD42FBC23DB58FE3DEF464F",
+ "vcore":1,
+ "cores_per_processor":1,
+ "ram":0.5,
+ "hdds":[
+ {
+ "id":"35F875003212E7F083728E4072A188B0",
+ "size":30,
+ "is_main":true
+ }
+ ]
+ },
+ "ips":[
+ {
+ "id":"1C79CF2066A5AEEACCB97A68FF41DD00",
+ "ip":"74.208.88.88"
+ }
+ ],
+ "alerts":null
+ },
+ {
+ "id":"FB1765588A90364835782061CE48BA8E",
+ "name":"Docs Content Test Server Ubuntu 16.04-2",
+ "description":"",
+ "status":{
+ "state":"POWERED_ON",
+ "percent":null
+ },
+ "datacenter":{
+ "id":"908DC2072407C94C8054610AD5A53B8C",
+ "country_code":"US",
+ "location":"United States of America"
+ },
+ "creation_date":"2016-11-28T21:45:50+00:00",
+ "image":{
+ "id":"4DBFA2D31B1A303A9CE0E4ECF8838FDE",
+ "name":"ubuntu1604-64std"
+ },
+ "hardware":{
+ "fixed_instance_size_id":"65929629F35BBFBA63022008F773F3EB",
+ "vcore":1,
+ "cores_per_processor":1,
+ "ram":1,
+ "hdds":[
+ {
+ "id":"B45F054C54B5AAE9C45253C6D0A47E74",
+ "size":40,
+ "is_main":true
+ }
+ ]
+ },
+ "ips":[
+ {
+ "id":"7D8EA6722183DA82AEDFA09AECE243C4",
+ "ip":"70.35.206.233"
+ }
+ ],
+ "alerts":null
+ }
+]
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/list_shared_storages.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/list_shared_storages.json b/libcloud/test/compute/fixtures/oneandone/list_shared_storages.json
new file mode 100644
index 0000000..fd059a4
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/list_shared_storages.json
@@ -0,0 +1,64 @@
+[
+ {
+ "id": "6AD2F180B7B666539EF75A02FE227084",
+ "size": 200,
+ "state": "ACTIVE",
+ "description": "My shared storage test description",
+ "datacenter": {
+ "id": "D0F6D8C8ED29D3036F94C27BBB7BAD36",
+ "location": "USA",
+ "country_code": "US"
+ },
+ "cloudpanel_id": "vid35780",
+ "size_used": "0.00",
+ "cifs_path": "vid50995.nas1.lanvid50995",
+ "nfs_path": "vid50995.nas1.lan/:vid50995",
+ "name": "My shared storage test",
+ "creation_date": "2015-05-06T08:33:25+00:00",
+ "servers": [
+ {
+ "id": "638ED28205B1AFD7ADEF569C725DD85F",
+ "name": "My server 1",
+ "rights": "RW"
+ }
+ ]
+ },
+ {
+ "id": "4406CE4723BB441C7956E25C51CE8C1B",
+ "size": 50,
+ "state": "ACTIVE",
+ "description": "My shared storage description",
+ "datacenter": {
+ "id": "D0F6D8C8ED29D3036F94C27BBB7BAD36",
+ "location": "USA",
+ "country_code": "US"
+ },
+ "cloudpanel_id": "vid30534",
+ "size_used": "0.00",
+ "cifs_path": "vid50995.nas1.lanvid50995",
+ "nfs_path": "vid50995.nas1.lan/:vid50995",
+ "name": "My shared storage",
+ "creation_date": "2015-03-17T11:57:48+00:00",
+ "servers": [
+ ]
+ },
+ {
+ "id": "1A5418172DD3BD39F8010A6633F1018A",
+ "size": 250,
+ "state": "ACTIVE",
+ "description": null,
+ "cloudpanel_id": "vid19857",
+ "datacenter": {
+ "id": "D0F6D8C8ED29D3036F94C27BBB7BAD36",
+ "location": "USA",
+ "country_code": "US"
+ },
+ "size_used": "0.00",
+ "cifs_path": "vid50995.nas1.lanvid50995",
+ "nfs_path": "vid50995.nas1.lan/:vid50995",
+ "name": "My shared storage 2",
+ "creation_date": "2015-05-05T09:36:31+00:00",
+ "servers": [
+ ]
+ }
+]
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/load_balancer.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/load_balancer.json b/libcloud/test/compute/fixtures/oneandone/load_balancer.json
new file mode 100644
index 0000000..c3d2e68
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/load_balancer.json
@@ -0,0 +1,38 @@
+{
+ "id": "BD8318616581A9C3C53F94402503230F",
+ "name": "My load balancer",
+ "state": "CONFIGURING",
+ "creation_date": "2015-05-04T07:26:24+00:00",
+ "description": "My load balancer description",
+ "ip": null,
+ "health_check_test": "TCP",
+ "health_check_interval": 40,
+ "health_check_path": null,
+ "health_check_path_parser": null,
+ "persistence": true,
+ "persistence_time": 1200,
+ "method": "ROUND_ROBIN",
+ "datacenter": {
+ "id": "D0F6D8C8ED29D3036F94C27BBB7BAD36",
+ "location": "USA",
+ "country_code": "US"
+ },
+ "rules": [
+ {
+ "id": "BCFAF421227674B2B324F779C1163ECB",
+ "protocol": "TCP",
+ "port_balancer": 80,
+ "port_server": 80,
+ "source": "0.0.0.0"
+ },
+ {
+ "id": "7390C04142800E006FF1B0132FFD8F9A",
+ "protocol": "TCP",
+ "port_balancer": 9999,
+ "port_server": 8888,
+ "source": "0.0.0.0"
+ }
+ ],
+ "server_ips": [],
+ "cloudpanel_id": "LB99AA4_1"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/load_balancer_rule.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/load_balancer_rule.json b/libcloud/test/compute/fixtures/oneandone/load_balancer_rule.json
new file mode 100644
index 0000000..a5c3d37
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/load_balancer_rule.json
@@ -0,0 +1,7 @@
+{
+ "id": "BCFAF421227674B2B324F779C1163ECB",
+ "protocol": "TCP",
+ "port_balancer": 80,
+ "port_server": 80,
+ "source": "0.0.0.0"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/load_balancer_rules.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/load_balancer_rules.json b/libcloud/test/compute/fixtures/oneandone/load_balancer_rules.json
new file mode 100644
index 0000000..0f20841
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/load_balancer_rules.json
@@ -0,0 +1,16 @@
+[
+ {
+ "id": "BCFAF421227674B2B324F779C1163ECB",
+ "protocol": "TCP",
+ "port_balancer": 80,
+ "port_server": 80,
+ "source": "0.0.0.0"
+ },
+ {
+ "id": "7390C04142800E006FF1B0132FFD8F9A",
+ "protocol": "TCP",
+ "port_balancer": 9999,
+ "port_server": 8888,
+ "source": "0.0.0.0"
+ }
+]
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/load_balancer_server_ip.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/load_balancer_server_ip.json b/libcloud/test/compute/fixtures/oneandone/load_balancer_server_ip.json
new file mode 100644
index 0000000..fdc4a2a
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/load_balancer_server_ip.json
@@ -0,0 +1,5 @@
+{
+ "id": "7C88E50FBC500A3D9D7F94E414255D6B",
+ "ip": "123.46.79.100",
+ "server_name": "My server 1"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/load_balancer_server_ips.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/load_balancer_server_ips.json b/libcloud/test/compute/fixtures/oneandone/load_balancer_server_ips.json
new file mode 100644
index 0000000..21c945b
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/load_balancer_server_ips.json
@@ -0,0 +1,6 @@
+{
+ "server_ips": [
+ "7C88E50FBC500A3D9D7F94E414255D6B",
+ "7288E50FBC500A3D9D7F94E414255D6B"
+ ]
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/monitoring_policy.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/monitoring_policy.json b/libcloud/test/compute/fixtures/oneandone/monitoring_policy.json
new file mode 100644
index 0000000..510c3c7
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/monitoring_policy.json
@@ -0,0 +1,73 @@
+{
+ "name": "Monitoring Policy",
+ "description": "Monitoring Policy Description",
+ "email": "test@test.com",
+ "agent": false,
+ "thresholds": {
+ "disk": {
+ "warning": {
+ "value": 80,
+ "alert": false
+ },
+ "critical": {
+ "value": 90,
+ "alert": false
+ }
+ },
+ "transfer": {
+ "warning": {
+ "value": 1000,
+ "alert": false
+ },
+ "critical": {
+ "value": 2000,
+ "alert": false
+ }
+ },
+ "ram": {
+ "warning": {
+ "value": 90,
+ "alert": false
+ },
+ "critical": {
+ "value": 95,
+ "alert": false
+ }
+ },
+ "internal_ping": {
+ "warning": {
+ "value": 50,
+ "alert": false
+ },
+ "critical": {
+ "value": 100,
+ "alert": true
+ }
+ },
+ "cpu": {
+ "warning": {
+ "value": 90,
+ "alert": false
+ },
+ "critical": {
+ "value": 95,
+ "alert": false
+ }
+ }
+ },
+ "ports": [
+ {
+ "alert_if": "NOT_RESPONDING",
+ "email_notification": true,
+ "protocol": "TCP",
+ "port": 443
+ }
+ ],
+ "processes": [
+ {
+ "process": "httpdeamon",
+ "alert_if": "NOT_RUNNING",
+ "email_notification": false
+ }
+ ]
+}
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/monitoring_policy_port.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/monitoring_policy_port.json b/libcloud/test/compute/fixtures/oneandone/monitoring_policy_port.json
new file mode 100644
index 0000000..909d587
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/monitoring_policy_port.json
@@ -0,0 +1,7 @@
+{
+ "id": "663D21E232530D79E4E584104C400EE4",
+ "protocol": "TCP",
+ "port": 22,
+ "alert_if": "RESPONDING",
+ "email_notifications": true
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/monitoring_policy_ports.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/monitoring_policy_ports.json b/libcloud/test/compute/fixtures/oneandone/monitoring_policy_ports.json
new file mode 100644
index 0000000..a3f1f89
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/monitoring_policy_ports.json
@@ -0,0 +1,16 @@
+[
+ {
+ "id": "663D21E232530D79E4E584104C400EE4",
+ "protocol": "TCP",
+ "port": 22,
+ "alert_if": "RESPONDING",
+ "email_notifications": true
+ },
+ {
+ "id": "663D21E232530D79E4E584104C400AAA",
+ "protocol": "TCP",
+ "port": 80,
+ "alert_if": "NOT_RESPONDING",
+ "email_notifications": true
+ }
+]
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/monitoring_policy_process.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/monitoring_policy_process.json b/libcloud/test/compute/fixtures/oneandone/monitoring_policy_process.json
new file mode 100644
index 0000000..9f49bfa
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/monitoring_policy_process.json
@@ -0,0 +1,6 @@
+{
+ "id": "663D21E232530D79E4E584104C400EE4",
+ "process": "iexplorer",
+ "alert_if": "NOT_RUNNING",
+ "email_notifications": true
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/monitoring_policy_processes.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/monitoring_policy_processes.json b/libcloud/test/compute/fixtures/oneandone/monitoring_policy_processes.json
new file mode 100644
index 0000000..a79b2f5
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/monitoring_policy_processes.json
@@ -0,0 +1,14 @@
+[
+ {
+ "id": "663D21E232530D79E4E584104C400EE4",
+ "process": "iexplorer",
+ "alert_if": "NOT_RUNNING",
+ "email_notifications": true
+ },
+ {
+ "id": "663D21E232530D79E4E584104C400EE4",
+ "process": "winword",
+ "alert_if": "NOT_RUNNING",
+ "email_notifications": true
+ }
+]
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/monitoring_policy_servers.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/monitoring_policy_servers.json b/libcloud/test/compute/fixtures/oneandone/monitoring_policy_servers.json
new file mode 100644
index 0000000..19dea3c
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/monitoring_policy_servers.json
@@ -0,0 +1,10 @@
+[
+ {
+ "id": "C72CF0A681B0CCE7EC624DD194D585C6",
+ "name": "My server 1"
+ },
+ {
+ "id": "4ECD9D188EB457317B2CF8F07885E7B4",
+ "name": "My server 2"
+ }
+]
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/public_ip.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/public_ip.json b/libcloud/test/compute/fixtures/oneandone/public_ip.json
new file mode 100644
index 0000000..4bb51b0
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/public_ip.json
@@ -0,0 +1,15 @@
+{
+ "id": "44972922D045B9648118AA80FF2A51C9",
+ "ip": "10.4.140.155",
+ "type": "IPV4",
+ "datacenter": {
+ "id": "D0F6D8C8ED29D3036F94C27BBB7BAD36",
+ "location": "USA",
+ "country_code": "US"
+ },
+ "assigned_to": null,
+ "reverse_dns": "example.com",
+ "is_dhcp": false,
+ "state": "ACTIVE",
+ "creation_date": "2015-05-06T08:17:33+00:00"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/server_hardware.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/server_hardware.json b/libcloud/test/compute/fixtures/oneandone/server_hardware.json
new file mode 100644
index 0000000..899e757
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/server_hardware.json
@@ -0,0 +1,13 @@
+{
+ "fixed_instance_size_id": 0,
+ "vcore": 1,
+ "cores_per_processor": 1,
+ "ram": 2,
+ "hdds": [
+ {
+ "id": "8C626C1A7005D0D1F527143C413D461E",
+ "size": 40,
+ "is_main": true
+ }
+ ]
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/server_ip.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/server_ip.json b/libcloud/test/compute/fixtures/oneandone/server_ip.json
new file mode 100644
index 0000000..7cef3fc
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/server_ip.json
@@ -0,0 +1,8 @@
+{
+ "id": "01D4A802798AB77AA72DA2D05E1379E1",
+ "ip": "10.5.135.140",
+ "type": "IPV4",
+ "reverse_dns": null,
+ "firewall_policy": null,
+ "load_balancers": []
+}
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/server_ips.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/server_ips.json b/libcloud/test/compute/fixtures/oneandone/server_ips.json
new file mode 100644
index 0000000..6d4f6e5
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/server_ips.json
@@ -0,0 +1,10 @@
+[
+ {
+ "id": "01D4A802798AB77AA72DA2D05E1379E1",
+ "ip": "10.5.135.140",
+ "type": "IPV4",
+ "reverse_dns": null,
+ "firewall_policy": null,
+ "load_balancers": []
+ }
+]
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/shared_storage.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/shared_storage.json b/libcloud/test/compute/fixtures/oneandone/shared_storage.json
new file mode 100644
index 0000000..566b240
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/shared_storage.json
@@ -0,0 +1,24 @@
+{
+ "id": "6AD2F180B7B666539EF75A02FE227084",
+ "size": 200,
+ "state": "ACTIVE",
+ "description": "My shared storage test description",
+ "datacenter": {
+ "id": "D0F6D8C8ED29D3036F94C27BBB7BAD36",
+ "location": "USA",
+ "country_code": "US"
+ },
+ "cloudpanel_id": "vid35780",
+ "size_used": "0.00",
+ "cifs_path": "vid50995.nas1.lanvid50995",
+ "nfs_path": "vid50995.nas1.lan/:vid50995",
+ "name": "My shared storage test",
+ "creation_date": "2015-05-06T08:33:25+00:00",
+ "servers": [
+ {
+ "id": "638ED28205B1AFD7ADEF569C725DD85F",
+ "name": "My server 1",
+ "rights": "RW"
+ }
+ ]
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/ttt.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/ttt.json b/libcloud/test/compute/fixtures/oneandone/ttt.json
new file mode 100644
index 0000000..fd75651
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/ttt.json
@@ -0,0 +1,73 @@
+{
+ "name": "MonitoringPolicy_674",
+ "description": "MonitoringPolicy_674 description",
+ "email": "test-go-sdk@oneandone.com",
+ "agent": true,
+ "thresholds": {
+ "cpu": {
+ "warning": {
+ "value": 90,
+ "alert": false
+ },
+ "critical": {
+ "value": 95,
+ "alert": false
+ }
+ },
+ "ram": {
+ "warning": {
+ "value": 90,
+ "alert": false
+ },
+ "critical": {
+ "value": 95,
+ "alert": false
+ }
+ },
+ "disk": {
+ "warning": {
+ "value": 80,
+ "alert": false
+ },
+ "critical": {
+ "value": 90,
+ "alert": false
+ }
+ },
+ "transfer": {
+ "warning": {
+ "value": 1000,
+ "alert": false
+ },
+ "critical": {
+ "value": 2000,
+ "alert": false
+ }
+ },
+ "internal_ping": {
+ "warning": {
+ "value": 50,
+ "alert": false
+ },
+ "critical": {
+ "value": 100,
+ "alert": true
+ }
+ }
+ },
+ "ports": [
+ {
+ "protocol": "TCP",
+ "port": 443,
+ "alert_if": "NOT_RESPONDING",
+ "email_notification": true
+ }
+ ],
+ "processes": [
+ {
+ "process": "httpdeamon",
+ "alert_if": "NOT_RUNNING",
+ "email_notification": false
+ }
+ ]
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/test_oneandone.py
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/test_oneandone.py b/libcloud/test/compute/test_oneandone.py
new file mode 100644
index 0000000..7de5e38
--- /dev/null
+++ b/libcloud/test/compute/test_oneandone.py
@@ -0,0 +1,1281 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+import sys
+
+from libcloud.compute.base import NodeImage, NodeAuthPassword, NodeLocation
+from libcloud.utils.py3 import httplib
+from libcloud.test import unittest, MockHttp
+from libcloud.test.file_fixtures import ComputeFileFixtures
+from libcloud.compute.types import Provider, NodeState
+from libcloud.test.secrets import ONEANDONE_PARAMS
+from libcloud.compute.providers import get_driver
+
+
+class OneAndOneTests(unittest.TestCase):
+ def setUp(self):
+ oneAndOne = get_driver(Provider.ONEANDONE)
+ oneAndOne.connectionCls.conn_class = OneAndOneMockHttp
+ self.driver = oneAndOne(ONEANDONE_PARAMS)
+
+ '''
+ Function tests for listing items
+ '''
+
+ def test_list_sizes(self):
+ sizes = self.driver.list_sizes()
+ self.assertEqual(len(sizes), 4)
+
+ def test_list_locations(self):
+ sizes = self.driver.list_locations()
+ self.assertEqual(len(sizes), 4)
+
+ def test_list_images(self):
+ appliances = self.driver.list_images("IMAGE")
+ self.assertEqual(len(appliances), 102)
+
+ def test_get_image(self):
+ appliance = self.driver.get_image('img_1')
+ self.assertNotEqual(appliance, None)
+
+ def test_list_nodes(self):
+ nodes = self.driver.list_nodes()
+ self.assertEqual(len(nodes), 5)
+
+ counter = 0
+
+ for node in nodes:
+ if counter == 0:
+ self.assertEqual(node.id, '8A7D5122BDC173B6E52223878CEF2748')
+ self.assertEqual(node.name, 'Docs Content Ubuntu 16.04-1')
+ self.assertEqual(node.state, NodeState.RUNNING)
+ self.assertEqual(node.public_ips, ['50.21.182.126'])
+ self.assertEqual(node.private_ips, [])
+ if counter == 1:
+ self.assertEqual(node.id, 'E7D36EC025C73796035BF4F171379025')
+ self.assertEqual(node.name,
+ 'Docs Content Test Server: CentOS 7-1')
+ self.assertEqual(node.state, NodeState.RUNNING)
+ self.assertEqual(node.public_ips, ['62.151.179.99'])
+ self.assertEqual(node.private_ips, [])
+ if counter == 2:
+ self.assertEqual(node.id, 'DDDC4CCA34AAB08132FA1E40F9FEAC25')
+ self.assertEqual(node.name, 'App Dev Server 5')
+ self.assertEqual(node.state, NodeState.RUNNING)
+ self.assertEqual(node.public_ips, ['70.35.206.196'])
+ self.assertEqual(node.private_ips, [])
+ if counter == 3:
+ self.assertEqual(node.id, 'D5C5C1D01249DE9B88BE3DAE973AA090')
+ self.assertEqual(node.name, 'Docs Test Server: CentOS 7-2')
+ self.assertEqual(node.state, NodeState.RUNNING)
+ self.assertEqual(node.public_ips, ['74.208.88.88'])
+ self.assertEqual(node.private_ips, [])
+ if counter == 4:
+ self.assertEqual(node.id, 'FB1765588A90364835782061CE48BA8E')
+ self.assertEqual(node.name,
+ 'Docs Content Test Server Ubuntu 16.04-2')
+ self.assertEqual(node.state, NodeState.RUNNING)
+ self.assertEqual(node.public_ips, ['70.35.206.233'])
+ self.assertEqual(node.private_ips, [])
+ counter += 1
+
+ def test_create_node(self):
+ node = self.driver.create_node(name="name",
+ image=NodeImage(
+ id="image_id",
+ name=None,
+ driver=self.driver),
+ ex_fixed_instance_size_id="instance_id",
+ location=NodeLocation(
+ "datacenter_id",
+ name="name",
+ country="GB",
+ driver=self.driver),
+ auth=NodeAuthPassword("password"),
+ ex_ip="1.1.1.1",
+ ex_monitoring_policy_id="mp_id",
+ ex_firewall_policy_id="fw_id",
+ ex_loadbalancer_id="lb_id",
+ ex_description="description",
+ ex_power_on="SHUTDOWN")
+
+ self.assertEqual(node.id, "E7D36EC025C73796035BF4F171379025")
+ self.assertEqual(node.name, "Docs Content Test Server: CentOS 7-1")
+ self.assertEqual(node.extra["description"], "My server description")
+
+ self.assertEqual(node.extra["status"]["percent"], None)
+ self.assertEqual(node.extra["status"]["state"], "POWERED_ON")
+
+ self.assertEqual(node.extra["image"]["id"],
+ "B5F778B85C041347BCDCFC3172AB3F3C")
+ self.assertEqual(node.extra["image"]["name"], "centos7-64std")
+
+ self.assertEqual(node.extra["datacenter"]["id"],
+ "908DC2072407C94C8054610AD5A53B8C")
+ self.assertEqual(node.extra["datacenter"]["country_code"], "US")
+ self.assertEqual(node.extra["datacenter"]["location"],
+ "United States of America")
+
+ self.assertEqual(node.extra["hardware"]["fixed_instance_size_id"],
+ "65929629F35BBFBA63022008F773F3EB")
+ self.assertEqual(node.extra["hardware"]["vcore"], 1)
+ self.assertEqual(node.extra["hardware"]["hdds"][0]["id"],
+ "CDB278D95A92CB4C379A9CAAD6759F02")
+ self.assertEqual(node.extra["hardware"]["hdds"][0]["size"], 40)
+ self.assertEqual(node.extra["hardware"]["hdds"][0]["is_main"], True)
+ self.assertEqual(node.extra["hardware"]["cores_per_processor"], 1)
+ self.assertEqual(node.extra["hardware"]["vcore"], 1)
+ self.assertEqual(node.extra["hardware"]["ram"], 1)
+
+ self.assertEqual(node.extra["ips"][0]["id"],
+ "FDBE99EDD57F8596CBF71B6B64BD0A92")
+ self.assertEqual(node.extra["ips"][0]["ip"], "62.151.179.99")
+
+ self.assertEqual(node.extra["monitoring_policy"], None)
+ self.assertEqual(node.extra["alerts"], [])
+ self.assertEqual(node.extra["snapshot"], None)
+ self.assertEqual(node.extra["dvd"], None)
+ self.assertEqual(node.extra["private_networks"], None)
+
+ def test_ex_list_datacenters(self):
+ datacenters = self.driver.ex_list_datacenters()
+
+ self.assertEqual(len(datacenters), 4)
+
+ def test_ex_shutdown_server(self):
+ server = self.driver.ex_shutdown_server("srv_1")
+ self.assertNotEqual(server, None)
+
+ def test_reboot_node(self):
+ node = self.driver.ex_get_server("srv_1")
+ node = self.driver.reboot_node(node)
+ self.assertNotEqual(node, None)
+
+ def test_ex_get_server(self):
+ server = self.driver.ex_get_server("srv_1")
+ self.assertNotEqual(server, None)
+
+ def test_destroy_node(self):
+ server = self.driver.ex_get_server("srv_1")
+
+ node = self.driver.destroy_node(server)
+ self.assertNotEqual(node, None)
+
+ def test_get_server_hardware(self):
+ hardware = self.driver.ex_get_server_hardware("srv_1")
+ self.assertNotEqual(hardware, None)
+ self.assertEqual(hardware['vcore'], 1)
+ self.assertEqual(hardware['cores_per_processor'], 1)
+ self.assertEqual(hardware['ram'], 2)
+ self.assertEqual(hardware['fixed_instance_size_id'], 0)
+ self.assertNotEqual(hardware['hdds'], None)
+ self.assertEqual(hardware['hdds'][0]['id'],
+ '8C626C1A7005D0D1F527143C413D461E')
+ self.assertEqual(hardware['hdds'][0]['is_main'], True)
+ self.assertEqual(hardware['hdds'][0]['size'], 40)
+
+ def test_rename_server(self):
+ server = self.driver.ex_rename_server("srv_1", "name")
+ self.assertNotEqual(server, None)
+
+ def test_ex_modify_server_hardware(self):
+ node = self.driver.ex_modify_server_hardware("srv_1", vcore=1)
+ self.assertNotEqual(node, None)
+
+ def test_add_hdd(self):
+ node = self.driver.ex_add_hdd("srv_1", 1, True)
+ self.assertNotEqual(node, None)
+
+ def test_modify_hdd(self):
+ node = self.driver.ex_modify_server_hardware("srv_1", "hdd_id", 50)
+ self.assertNotEqual(node, None)
+
+ def test_remove_hdd(self):
+ node = self.driver.ex_remove_hdd("srv_1", "hdd_id")
+ self.assertNotEqual(node, None)
+
+ def test_ex_get_server_image(self):
+ image = self.driver.ex_get_server_image("srv_1")
+ self.assertNotEqual(image, None)
+ self.assertEqual(image['id'], "76EBF29C1250167C8754B2B3D1C05F68")
+ self.assertEqual(image['name'], "centos7-64std")
+
+ def test_ex_reinstall_server_image(self):
+ node = self.driver.ex_reinstall_server_image("srv_1", "img_id",
+ "password")
+ self.assertNotEqual(node, None)
+
+ def test_ex_list_server_ips(self):
+ ips = self.driver.ex_list_server_ips("srv_1")
+ self.assertEqual(len(ips), 1)
+
+ def test_ex_get_server_ip(self):
+ ip = self.driver.ex_get_server_ip("srv_1", "ip_id")
+ self.assertNotEqual(ip, None)
+
+ def test_ex_assign_server(self):
+ node = self.driver.ex_assign_server_ip("srv_1", "IPV$")
+ self.assertNotEqual(node, None)
+
+ def test_ex_remove_server_ip(self):
+ node = self.driver.ex_remove_server_ip("srv_1", "ip_id", keep_ip=True)
+ self.assertNotEqual(node, None)
+
+ def test_ex_create_firewall_policy(self):
+ rules = [
+ {
+ "protocol": "TCP",
+ "port_from": 80,
+ "port_to": 80,
+ "source": "0.0.0.0"
+ },
+ {
+ "protocol": "TCP",
+ "port_from": 443,
+ "port_to": 443,
+ "source": "0.0.0.0"
+ }
+ ]
+ firewall = self.driver \
+ .ex_create_firewall_policy("name", rules,
+ description="desc")
+
+ self.assertNotEqual(firewall, None)
+
+ def test_ex_list_firewall_policies(self):
+ firewall = self.driver.ex_list_firewall_policies()
+ self.assertNotEqual(firewall, None)
+ self.assertEqual(len(firewall), 2)
+
+ def test_ex_get_firewall_policy(self):
+ firewall = self.driver.ex_get_firewall_policy("fw_id")
+ self.assertNotEqual(firewall, None)
+
+ def test_ex_delete_firewall_policy(self):
+ firewall = self.driver.ex_delete_firewall_policy("fw_id")
+ self.assertNotEqual(firewall, None)
+
+ def test_ex_get_server_firewall_policies(self):
+ firewall = self.driver \
+ .ex_get_server_firewall_policies("srv_id", "ip_id")
+ self.assertNotEqual(firewall, None)
+
+ def test_ex_remove_server_firewall_policies(self):
+ node = self.driver \
+ .ex_remove_server_firewall_policy("srv_id", "ip_id")
+ self.assertNotEqual(node, None)
+
+ def test_ex_add_server_firewall_policy(self):
+ node = self.driver \
+ .ex_add_server_firewall_policy("srv_id", "ip_id", "fw_id")
+ self.assertNotEqual(node, None)
+
+ def test_ex_list_shared_storages(self):
+ storages = self.driver.ex_list_shared_storages()
+ self.assertEquals(len(storages), 3)
+
+ def test_ex_get_shared_storage(self):
+ storage = self.driver.ex_get_shared_storage('storage_1')
+
+ self.assertNotEqual(storage, None)
+ self.assertEqual(storage['id'], "6AD2F180B7B666539EF75A02FE227084")
+ self.assertEqual(storage['size'], 200)
+ self.assertEqual(storage['state'], 'ACTIVE')
+ self.assertEqual(storage['description'],
+ 'My shared storage test description')
+ self.assertEqual(storage['datacenter']['id'],
+ 'D0F6D8C8ED29D3036F94C27BBB7BAD36')
+ self.assertEqual(storage['datacenter']['location'], 'USA')
+ self.assertEqual(storage['datacenter']['country_code'], 'US')
+ self.assertEqual(storage['cloudpanel_id'], 'vid35780')
+ self.assertEqual(storage['size_used'], '0.00')
+ self.assertEqual(storage["cifs_path"], "vid50995.nas1.lanvid50995")
+ self.assertEqual(storage["nfs_path"], "vid50995.nas1.lan/:vid50995")
+ self.assertEqual(storage["name"], "My shared storage test")
+ self.assertEqual(storage["creation_date"], "2015-05-06T08:33:25+00:00")
+ self.assertEqual(storage['servers'][0]['id'],
+ '638ED28205B1AFD7ADEF569C725DD85F')
+ self.assertEqual(storage['servers'][0]["name"], "My server 1")
+ self.assertEqual(storage['servers'][0]["rights"], "RW")
+
+ def test_ex_create_shared_storage(self):
+ storage = self.driver.ex_create_shared_storage(
+ name='TEST', size=2, datacenter_id='dc_id')
+ self.assertNotEqual(storage, None)
+
+ def test_ex_delete_shared_storage(self):
+ storage = self.driver.ex_delete_shared_storage('storage_1')
+ self.assertNotEqual(storage, None)
+
+ def test_ex_attach_server_to_shared_storage(self):
+ storage = self.driver.ex_attach_server_to_shared_storage(
+ 'storage_1', 'srv_1', 'RW')
+ self.assertNotEqual(storage, None)
+
+ def test_ex_get_shared_storage_server(self):
+ storage = self.driver.ex_get_shared_storage_server(
+ 'storage_1', 'srv_1')
+ self.assertNotEqual(storage, None)
+
+ def test_ex_detach_server_from_shared_storage(self):
+ storage = self.driver.ex_detach_server_from_shared_storage(
+ 'storage_1', 'srv_1')
+ self.assertNotEqual(storage, None)
+
+ def test_ex_create_load_balancers(self):
+ rules = [
+ {
+ "protocol": "TCP",
+ "port_balancer": 80,
+ "port_server": 80,
+ "source": "0.0.0.0"
+ },
+ {
+ "protocol": "TCP",
+ "port_balancer": 9999,
+ "port_server": 8888,
+ "source": "0.0.0.0"
+ }
+ ]
+ load_balancer = self.driver. \
+ ex_create_load_balancer(name='name',
+ method='ROUNDROBIN',
+ rules=rules,
+ persistence=True,
+ persistence_time=1)
+
+ self.assertNotEqual(load_balancer, None)
+
+ def test_ex_list_load_balancers(self):
+ load_balancers = self.driver.ex_list_load_balancers()
+ self.assertEqual(len(load_balancers), 2)
+
+ def test_update_load_balancer(self):
+ load_balancer = self.driver. \
+ ex_update_load_balancer("lb_1", name='new name')
+ self.assertNotEqual(load_balancer, None)
+
+ def test_ex_add_servers_to_load_balancer(self):
+ load_balancer = self.driver. \
+ ex_add_servers_to_load_balancer('lb_1', server_ips=["1.1.1.1"])
+ self.assertNotEqual(load_balancer, None)
+
+ def test_ex_remove_server_from_load_balancer(self):
+ load_balancer = self.driver. \
+ ex_remove_server_from_load_balancer('lb_1', server_ip="srv_1")
+ self.assertNotEqual(load_balancer, None)
+
+ def test_ex_add_load_balancer_rule(self):
+ load_balancer = self.driver. \
+ ex_add_load_balancer_rule('lb_1', protocol='TCP', port_balancer=82,
+ port_server=81, source='0.0.0.0')
+ self.assertNotEqual(load_balancer, None)
+
+ def test_ex_remove_load_balancer_rule(self):
+ load_balancer = self.driver. \
+ ex_remove_load_balancer_rule('lb_1', 'rule_1')
+ self.assertNotEqual(load_balancer, None)
+
+ def test_ex_get_load_balancer(self):
+ load_balancer = self.driver. \
+ ex_get_load_balancer('lb_1')
+ self.assertNotEqual(load_balancer, None)
+
+ def test_ex_get_load_balancer_server_ip(self):
+ server_ip = self.driver. \
+ ex_get_load_balancer_server_ip('lb_1', 'srv_1')
+ self.assertNotEqual(server_ip, None)
+
+ def test_ex_list_load_balancer_rules(self):
+ rules = self.driver. \
+ ex_list_load_balancer_rules('lb_1')
+ self.assertNotEqual(rules, None)
+ self.assertEqual(len(rules), 2)
+
+ def test_ex_get_load_balancer_rule(self):
+ rule = self.driver. \
+ ex_get_load_balancer_rule('lb_1', 'rule_1')
+ self.assertNotEqual(rule, None)
+
+ def test_ex_delete_load_balancer(self):
+ load_balancer = self.driver. \
+ ex_delete_load_balancer('lb_1')
+ self.assertNotEqual(load_balancer, None)
+
+ def test_ex_list_public_ips(self):
+ ips = self.driver.ex_list_public_ips()
+ self.assertNotEqual(ips, None)
+ self.assertEqual(len(ips), 3)
+
+ def test_ex_create_public_ip(self):
+ ip = self.driver.ex_create_public_ip('IPv4')
+ self.assertNotEqual(ip, None)
+
+ def test_ex_get_public_ip(self):
+ ip = self.driver.ex_get_public_ip('ip_1')
+ self.assertNotEqual(ip, None)
+
+ def test_ex_delete_public_ip(self):
+ ip = self.driver.ex_delete_public_ip('ip_1')
+ self.assertNotEqual(ip, None)
+
+ def test_ex_update_public_ip(self):
+ ip = self.driver.ex_update_public_ip('ip_1', "reverse.dns")
+ self.assertNotEqual(ip, None)
+
+ def test_ex_create_monitoring_policy(self):
+ thresholds = {
+ "cpu": {
+ "warning": {
+ "value": 90,
+ "alert": False
+ },
+ "critical": {
+ "value": 95,
+ "alert": False
+ }
+ },
+ "ram": {
+ "warning": {
+ "value": 90,
+ "alert": False
+ },
+ "critical": {
+ "value": 95,
+ "alert": False
+ }
+ },
+ "disk": {
+ "warning": {
+ "value": 80,
+ "alert": False
+ },
+ "critical": {
+ "value": 90,
+ "alert": False
+ }
+ },
+ "transfer": {
+ "warning": {
+ "value": 1000,
+ "alert": False
+ },
+ "critical": {
+ "value": 2000,
+ "alert": False
+ }
+ },
+ "internal_ping": {
+ "warning": {
+ "value": 50,
+ "alert": False
+ },
+ "critical": {
+ "value": 100,
+ "alert": False
+ }
+ }
+ }
+
+ ports = [
+ {
+ "protocol": "TCP",
+ "port": "22",
+ "alert_if": "RESPONDING",
+ "email_notification": True
+ }
+ ]
+
+ processes = [
+ {
+ "process": "test",
+ "alert_if": "NOT_RUNNING",
+ "email_notification": True
+ }
+ ]
+
+ policy = self.driver. \
+ ex_create_monitoring_policy(name='test_name',
+ thresholds=thresholds,
+ ports=ports,
+ processes=processes,
+ description='description',
+ email='test@domain.com',
+ agent=True)
+ self.assertNotEqual(policy, None)
+
+ def test_ex_list_monitoring_policies(self):
+ policies = self.driver.ex_list_monitoring_policies()
+ self.assertNotEqual(policies, None)
+ self.assertEqual(len(policies), 2)
+
+ def test_ex_get_monitoring_policy(self):
+ policy = self.driver.ex_get_monitoring_policy('pol_1')
+ self.assertNotEqual(policy, None)
+
+ def test_ex_update_monitoring_policy(self):
+ thresholds = {
+ "cpu": {
+ "warning": {
+ "value": 90,
+ "alert": False
+ },
+ "critical": {
+ "value": 95,
+ "alert": False
+ }
+ },
+ "ram": {
+ "warning": {
+ "value": 90,
+ "alert": False
+ },
+ "critical": {
+ "value": 95,
+ "alert": False
+ }
+ },
+ "disk": {
+ "warning": {
+ "value": 80,
+ "alert": False
+ },
+ "critical": {
+ "value": 90,
+ "alert": False
+ }
+ },
+ "transfer": {
+ "warning": {
+ "value": 1000,
+ "alert": False
+ },
+ "critical": {
+ "value": 2000,
+ "alert": False
+ }
+ },
+ "internal_ping": {
+ "warning": {
+ "value": 50,
+ "alert": False
+ },
+ "critical": {
+ "value": 100,
+ "alert": False
+ }
+ }
+ }
+
+ policy = self.driver. \
+ ex_update_monitoring_policy('pol_1', email='test@domain.com',
+ thresholds=thresholds,
+ name='new name',
+ description='new description')
+ self.assertNotEqual(policy, None)
+
+ def test_ex_get_monitoring_policy_ports(self):
+ ports = self.driver. \
+ ex_get_monitoring_policy_ports('pol_1')
+ self.assertNotEqual(ports, None)
+ self.assertEqual(len(ports), 2)
+
+ def test_ex_get_monitoring_policy_port(self):
+ port = self.driver. \
+ ex_get_monitoring_policy_port('pol_1', 'port_1')
+ self.assertNotEqual(port, None)
+
+ def test_ex_remove_monitoring_policy_port(self):
+ port = self.driver. \
+ ex_remove_monitoring_policy_port('pol_1', 'port_1')
+ self.assertNotEqual(port, None)
+
+ def test_ex_add_monitoring_policy_ports(self):
+ new_ports = [
+ {
+ "protocol": "TCP",
+ "port": "80",
+ "alert_if": "RESPONDING",
+ "email_notification": True
+ }
+ ]
+ ports = self.driver. \
+ ex_add_monitoring_policy_ports('pol_1', new_ports)
+ self.assertNotEqual(ports, None)
+ self.assertEqual(len(ports), 2)
+
+ def test_ex_get_monitoring_policy_processes(self):
+ processes = self.driver. \
+ ex_get_monitoring_policy_processes('pol_1')
+ self.assertNotEqual(processes, None)
+
+ def test_ex_get_monitoring_policy_process(self):
+ process = self.driver. \
+ ex_get_monitoring_policy_process('pol_1', 'proc_1')
+ self.assertNotEqual(process, None)
+
+ def test_ex_remove_monitoring_policy_process(self):
+ policy = self.driver. \
+ ex_remove_monitoring_policy_process('pol_1', 'proc_1')
+ self.assertNotEqual(policy, None)
+
+ def test_ex_add_monitoring_policy_processes(self):
+ processes = {
+ "processes": [
+ {
+ "process": "taskmmgr",
+ "alert_if": "RUNNING",
+ "email_notification": True
+ }
+ ]
+ }
+ processes = self.driver. \
+ ex_add_monitoring_policy_processes(policy_id='pol_1',
+ processes=processes)
+ self.assertNotEqual(processes, None)
+ self.assertEqual(len(processes), 2)
+
+ def test_ex_list_monitoring_policy_servers(self):
+ servers = self.driver.ex_list_monitoring_policy_servers('pol_1')
+ self.assertNotEqual(servers, None)
+ self.assertEqual(len(servers), 2)
+
+ def test_ex_add_servers_to_monitoring_policy(self):
+ servers = self.driver. \
+ ex_add_servers_to_monitoring_policy('pol_1', 'serv_1')
+ self.assertNotEqual(servers, None)
+ self.assertEqual(len(servers), 2)
+
+ def test_ex_remove_server_from_monitoring_policy(self):
+ policy = self.driver. \
+ ex_remove_server_from_monitoring_policy('pol_1', 'serv_1')
+ self.assertNotEqual(policy, None)
+
+
+class OneAndOneMockHttp(MockHttp):
+ fixtures = ComputeFileFixtures('oneandone')
+
+ '''
+ Operation on Server Appliances
+
+ GET - Fetches Server Appliances
+ '''
+
+ def _v1_server_appliances(self, method, url, body, headers):
+ body = self.fixtures.load('list_images.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_server_appliances_img_1(self, method, url, body, headers):
+ body = self.fixtures.load('get_image.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_servers(self, method, url, body, headers):
+ if method == "GET":
+ body = self.fixtures.load('list_servers.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+ if method == "POST":
+ body = self.fixtures.load('create_node.json')
+ return (
+ httplib.ACCEPTED,
+ body,
+ {},
+ httplib.responses[httplib.ACCEPTED]
+ )
+
+ def _v1_create_node(self, method, url, body_headers):
+
+ body = self.fixtures.load('list_servers.json')
+
+ return (
+ httplib.ACCEPTED,
+ {},
+ body,
+ httplib.responses[httplib.ACCEPTED]
+ )
+
+ def _v1_datacenters(
+ self, method, url, body, headers
+ ):
+ if method == 'GET':
+ body = self.fixtures.load('ex_list_datacenters.json')
+ return (
+ httplib.OK,
+ body,
+ {'content-type': 'application/json'},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_servers_srv_1(
+ self, method, url, body, headers
+ ):
+ pass
+
+ if method == 'PUT':
+ body = self.fixtures.load('describe_server.json')
+ return (
+ httplib.OK,
+ body,
+ {'content-type': 'application/json'},
+ httplib.responses[httplib.OK]
+ )
+ if method == 'GET':
+ body = self.fixtures.load('describe_server.json')
+ return (
+ httplib.OK,
+ body,
+ {'content-type': 'application/json'},
+ httplib.responses[httplib.OK]
+ )
+ if method == 'DELETE':
+ body = self.fixtures.load('describe_server.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_servers_srv_1_status_action(self, method, url, body_headers, id):
+ body = self.fixtures.load('describe_server.json')
+
+ return (
+ httplib.ACCEPTED,
+ body,
+ {},
+ httplib.responses[httplib.ACCEPTED]
+ )
+
+ def _v1_servers_srv_1_hardware(
+ self, method, url, body, headers
+ ):
+ if method == 'GET':
+ body = self.fixtures.load('server_hardware.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+ if method == 'PUT':
+ body = self.fixtures.load('describe_server.json')
+ return (
+ httplib.ACCEPTED,
+ body,
+ {},
+ httplib.responses[httplib.ACCEPTED]
+ )
+
+ def _v1_servers_srv_1_hardware_hdds(
+ self, method, url, body, headers
+ ):
+ if method == 'POST':
+ body = self.fixtures.load('describe_server.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+ if method == 'PUT':
+ body = self.fixtures.load('describe_server.json')
+ return (
+ httplib.ACCEPTED,
+ body,
+ {},
+ httplib.responses[httplib.ACCEPTED]
+ )
+
+ def _v1_servers_srv_1_hardware_hdds_hdd_id(
+ self, method, url, body, headers
+ ):
+ if method == 'DELETE':
+ body = self.fixtures.load('describe_server.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+ if method == 'PUT':
+ body = self.fixtures.load('describe_server.json')
+ return (
+ httplib.ACCEPTED,
+ body,
+ {},
+ httplib.responses[httplib.ACCEPTED]
+ )
+
+ def _v1_servers_srv_1_image(
+ self, method, url, body, headers
+ ):
+ if method == 'GET':
+ body = self.fixtures.load('get_server_image.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+ if method == 'PUT':
+ body = self.fixtures.load('describe_server.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_servers_srv_1_ips(
+ self, method, url, body, headers
+ ):
+
+ if method == 'GET':
+ body = self.fixtures.load('server_ips.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+ if method == 'POST':
+ body = self.fixtures.load('describe_server.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_servers_srv_1_ips_ip_id(
+ self, method, url, body, headers
+ ):
+ if method == 'GET':
+ body = self.fixtures.load('server_ip.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+ if method == 'DELETE':
+ body = self.fixtures.load('describe_server.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_firewall_policies(
+ self, method, url, body, headers
+ ):
+
+ if method == 'POST':
+ body = self.fixtures.load('describe_firewall_policy.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ if method == 'GET':
+ body = self.fixtures.load('list_firewall_policies.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_firewall_policy_fw_id(
+ self, method, url, body, headers
+ ):
+ if method == 'GET':
+ body = self.fixtures.load('describe_firewall_policy.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ if method == 'DELETE':
+ body = self.fixtures.load('describe_firewall_policy.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_servers_srv_id_ips_ip_id_firewall_policy(
+ self, method, url, body, header
+ ):
+ if method == 'GET':
+ body = self.fixtures.load('describe_id_firewall_policy.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+ if method == 'DELETE':
+ body = self.fixtures.load('describe_server.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+ if method == 'POST':
+ body = self.fixtures.load('describe_server.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_shared_storages(
+ self, method, url, body, header
+ ):
+ if method == 'GET' or method == 'POST':
+ body = self.fixtures.load('list_shared_storages.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_shared_storages_storage_1(
+ self, method, url, body, header
+ ):
+ if method == 'GET' or method == 'DELETE':
+ body = self.fixtures.load('shared_storage.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_shared_storages_storage_1_servers(
+ self, method, url, body, header
+ ):
+ if method == 'POST' or method == 'DELETE':
+ body = self.fixtures.load('shared_storage.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_shared_storages_storage_1_servers_srv_1(
+ self, method, url, body, header
+ ):
+ if method == 'GET' or method == 'DELETE':
+ body = self.fixtures.load('shared_storage.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_load_balancers(
+ self, method, url, body, header
+ ):
+ if method == 'POST':
+ body = self.fixtures.load('load_balancer.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+ if method == 'GET':
+ body = self.fixtures.load('list_load_balancer.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_load_balancers_lb_1(
+ self, method, url, body, header
+ ):
+
+ body = self.fixtures.load('load_balancer.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_load_balancers_lb_1_server_ips(
+ self, method, url, body, header
+ ):
+ if method == 'GET':
+ body = self.fixtures.load('load_balancer_server_ips.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ if method == 'POST':
+ body = self.fixtures.load('load_balancer.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_load_balancers_lb_1_rules(
+ self, method, url, body, header
+ ):
+ if method == 'POST':
+ body = self.fixtures.load('load_balancer.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+ if method == 'GET':
+ body = self.fixtures.load('load_balancer_rules.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_load_balancers_lb_1_server_ips_srv_1(
+ self, method, url, body, header
+ ):
+ if method == 'DELETE':
+ body = self.fixtures.load('load_balancer.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ if method == 'GET':
+ body = self.fixtures.load('load_balancer_server_ip.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_load_balancers_lb_1_rules_rule_1(
+ self, method, url, body, header
+ ):
+ if method == 'DELETE':
+ body = self.fixtures.load('load_balancer.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+ if method == 'GET':
+ body = self.fixtures.load('load_balancer_rule.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_public_ips(
+ self, method, url, body, header
+ ):
+ if method == 'GET':
+ body = self.fixtures.load('list_public_ips.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+ if method == 'POST':
+ body = self.fixtures.load('public_ip.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_public_ips_ip_1(
+ self, method, url, body, header
+ ):
+ body = self.fixtures.load('public_ip.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_monitoring_policies(
+ self, method, url, body, header
+ ):
+ if method == 'POST':
+ body = self.fixtures.load('monitoring_policy.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+ if method == 'GET':
+ body = self.fixtures.load('list_monitoring_policies.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_monitoring_policies_pol_1(
+ self, method, url, body, header
+ ):
+ body = self.fixtures.load('monitoring_policy.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_monitoring_policies_pol_1_ports(
+ self, method, url, body, header
+ ):
+ body = self.fixtures.load('monitoring_policy_ports.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_monitoring_policies_pol_1_ports_port_1(
+ self, method, url, body, header
+ ):
+ if method == 'GET':
+ body = self.fixtures.load('monitoring_policy_port.json')
+ elif method == 'POST':
+ body = self.fixtures.load('monitoring_policy.json')
+
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_monitoring_policies_pol_1_processes(
+ self, method, url, body, header
+ ):
+ body = self.fixtures.load('monitoring_policy_processes.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_monitoring_policies_pol_1_processes_proc_1(
+ self, method, url, body, header
+ ):
+ if method == 'GET':
+ body = self.fixtures.load('monitoring_policy_process.json')
+ elif method == 'POST':
+ body = self.fixtures.load('monitoring_policy.json')
+
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_monitoring_policies_pol_1_servers(
+ self, method, url, body, header
+ ):
+ body = self.fixtures.load('monitoring_policy_servers.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_monitoring_policies_pol_1_servers_serv_1(
+ self, method, url, body, header
+ ):
+ if method == 'GET':
+ body = self.fixtures.load('monitoring_policy_servers.json')
+ elif method == 'POST':
+ body = self.fixtures.load('monitoring_policy.json')
+
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+ def _v1_servers_fixed_instance_sizes(
+ self, method, url, body, header
+ ):
+ body = self.fixtures.load('fixed_instance_sizes.json')
+ return (
+ httplib.OK,
+ body,
+ {},
+ httplib.responses[httplib.OK]
+ )
+
+
+if __name__ == '__main__':
+ sys.exit(unittest.main())
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/secrets.py-dist
----------------------------------------------------------------------
diff --git a/libcloud/test/secrets.py-dist b/libcloud/test/secrets.py-dist
index 2c21f84..6018a2a 100644
--- a/libcloud/test/secrets.py-dist
+++ b/libcloud/test/secrets.py-dist
@@ -28,6 +28,7 @@ HOSTINGCOM_PARAMS = ('user', 'secret')
IBM_PARAMS = ('user', 'secret')
ONAPP_PARAMS = ('key',)
# OPENSTACK_PARAMS = ('user_name', 'api_key', secure_bool, 'host', port_int)
+ONEANDONE_PARAMS =('token')
OPENSTACK_PARAMS = ('user_name', 'api_key', False, 'host', 8774)
OPENNEBULA_PARAMS = ('user', 'key')
DIMENSIONDATA_PARAMS = ('user', 'password')
[04/11] libcloud git commit: 1&1 Compute Driver
Posted by an...@apache.org.
1&1 Compute Driver
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/ff028ae2
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/ff028ae2
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/ff028ae2
Branch: refs/heads/trunk
Commit: ff028ae26b232e808f303e680aa0d6737224f605
Parents: 419c694
Author: jasminSPC <ja...@stackpointcloud.com>
Authored: Tue Apr 11 00:19:46 2017 +0200
Committer: jasminSPC <ja...@stackpointcloud.com>
Committed: Tue Apr 11 00:19:46 2017 +0200
----------------------------------------------------------------------
docs/compute/drivers/oneandone.rst | 295 +
.../compute/oneandone/create_firewall_policy.py | 33 +
.../compute/oneandone/create_load_balancer.py | 36 +
.../oneandone/create_monitoring_policy.py | 90 +
docs/examples/compute/oneandone/create_node.py | 36 +
.../compute/oneandone/create_private_network.py | 14 +
.../compute/oneandone/create_public_ip.py | 14 +
.../compute/oneandone/create_shared_storage.py | 21 +
.../compute/oneandone/instantiate_driver.py | 9 +
libcloud/common/base.py | 1 +
libcloud/compute/drivers/oneandone.py | 2263 +++
libcloud/compute/providers.py | 2 +
libcloud/compute/types.py | 1 +
.../compute/fixtures/oneandone/auth_error.json | 5 +
.../compute/fixtures/oneandone/create_node.json | 43 +
.../oneandone/describe_firewall_policy.json | 26 +
.../oneandone/describe_id_firewall_policy.json | 4 +
.../fixtures/oneandone/describe_server.json | 49 +
.../oneandone/describe_shared_stoage.json | 29 +
.../fixtures/oneandone/ex_list_datacenters.json | 26 +
.../oneandone/fixed_instance_sizes.json | 70 +
.../compute/fixtures/oneandone/get_image.json | 24 +
.../fixtures/oneandone/get_server_image.json | 4 +
.../oneandone/list_firewall_policies.json | 54 +
.../compute/fixtures/oneandone/list_images.json | 17941 +++++++++++++++++
.../fixtures/oneandone/list_load_balancer.json | 78 +
.../oneandone/list_monitoring_policies.json | 152 +
.../fixtures/oneandone/list_public_ips.json | 59 +
.../fixtures/oneandone/list_servers.json | 197 +
.../oneandone/list_shared_storages.json | 64 +
.../fixtures/oneandone/load_balancer.json | 38 +
.../fixtures/oneandone/load_balancer_rule.json | 7 +
.../fixtures/oneandone/load_balancer_rules.json | 16 +
.../oneandone/load_balancer_server_ip.json | 5 +
.../oneandone/load_balancer_server_ips.json | 6 +
.../fixtures/oneandone/monitoring_policy.json | 73 +
.../oneandone/monitoring_policy_port.json | 7 +
.../oneandone/monitoring_policy_ports.json | 16 +
.../oneandone/monitoring_policy_process.json | 6 +
.../oneandone/monitoring_policy_processes.json | 14 +
.../oneandone/monitoring_policy_servers.json | 10 +
.../compute/fixtures/oneandone/public_ip.json | 15 +
.../fixtures/oneandone/server_hardware.json | 13 +
.../compute/fixtures/oneandone/server_ip.json | 8 +
.../compute/fixtures/oneandone/server_ips.json | 10 +
.../fixtures/oneandone/shared_storage.json | 24 +
.../test/compute/fixtures/oneandone/ttt.json | 73 +
libcloud/test/compute/test_oneandone.py | 1281 ++
libcloud/test/secrets.py-dist | 1 +
49 files changed, 23263 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/docs/compute/drivers/oneandone.rst
----------------------------------------------------------------------
diff --git a/docs/compute/drivers/oneandone.rst b/docs/compute/drivers/oneandone.rst
new file mode 100644
index 0000000..9145124
--- /dev/null
+++ b/docs/compute/drivers/oneandone.rst
@@ -0,0 +1,295 @@
+1&1 Compute Driver Documentation
+================================
+
+`1&1` is one of the world's largest hosting providers. We offer a range of services, including hosting solutions, domains, and websites.
+
+The data centers/availability zones are located in:
+
+- United States of America (US)
+- Germany (DE)
+- United Kingdom or Great Britain and Northern Ireland (GB)
+- Spain (ES)
+
+Instantiating a Driver
+----------------------
+
+To instantiate a driver you will need to pass the API key using the following constructor parameter:
+
+* ``key`` - Your 1&1 API Key
+
+You can obtain your API key in the `1&1 Cloud Panel` under Management ->
+Users where an API key will be generated.
+
+With a newly-generated API token you can instantiate a driver using:
+
+.. literalinclude:: /examples/compute/oneandone/instantiate_driver.py
+ :language: python
+
+
+1&1 Implementation of Libcloud
+------------------------------
+
+The 1&1 driver implements the following ``NodeDriver`` functions:
+
+* ``list_sizes`` - Returns a list of ``NodeSize``
+* ``list_locations`` - Returns a list of ``NodeLocation``
+* ``list_images`` - Returns a list of ``NodeImage``
+* ``get_image`` - Returns a ``NodeImage``
+* ``create_node`` - Creates a ``Node``
+* ``list_nodes`` - Returns a list of ``Node``
+* ``destroy_node`` - Destroys an existing ``Node``
+* ``reboot_node`` - Reboots a ``Node``
+
+1&1 Extension Functions
+-----------------------
+
+Server Functions
+-----------------
+* ``ex_rename_server`` - Allows you to change server name and description
+* ``ex_get_server_hardware`` - Returns server's hardware specification
+* ``ex_modify_server_hardware`` - Updates server hardware
+* ``ex_modify_server_hdd`` - Updates a single server HDD
+* ``ex_add_hdd`` - Adds a new HDD to server
+* ``ex_remove_hdd`` - Removes a HDD from server
+* ``ex_list_datacenters`` - Returns a list of available 1&1 data centers
+* ``ex_get_server`` - Gets a server
+* ``ex_shutdown_server`` - Shuts down a server
+* ``ex_get_server_image`` - Gets server image
+* ``ex_reinstall_server_image`` - Installs a new image on the server
+* ``ex_list_server_ips`` - Gets all server IP objects
+* ``ex_assign_server_ip`` - Assigns a new IP address to the server
+* ``ex_remove_server_ip`` - Removes an IP address from the server
+* ``ex_get_server_firewall_policies`` - Gets a firewall policy attached to the server's IP address
+* ``ex_remove_server_firewall_policy`` - Removes a firewall policy from the server's IP address
+* ``ex_add_server_firewall_policy`` - Adds a firewall policy to the server's IP address
+
+Monitoring Policy Functions
+---------------------------
+* ``ex_list_monitoring_policies`` - Lists all monitoring policies
+* ``ex_create_monitoring_policy`` - Creates a monitoring policy
+* ``ex_delete_monitoring_policy`` - Deletes a monitoring policy
+* ``ex_update_monitoring_policy`` - Updates monitoring policy
+* ``ex_get_monitoring_policy`` - Fetches a monitoring policy
+* ``ex_get_monitoring_policy_ports`` - Fetches monitoring policy ports
+* ``ex_get_monitoring_policy_port`` - Fetches monitoring policy port
+* ``ex_remove_monitoring_policy_port`` - Removes monitoring policy port
+* ``ex_add_monitoring_policy_ports`` - Adds monitoring policy ports
+* ``ex_get_monitoring_policy_processes`` - Fetches monitoring policy processes
+* ``ex_get_monitoring_policy_process`` - Fetches monitoring policy process
+* ``ex_remove_monitoring_policy_process`` - Removes monitoring policy process
+* ``ex_add_monitoring_policy_processes`` - Adds monitoring policy processes
+* ``ex_list_monitoring_policy_servers`` - List all servers that are being monitored by the policy
+* ``ex_add_servers_to_monitoring_policy`` - Adds servers to monitoring policy
+* ``ex_remove_server_from_monitoring_policy`` - Removes a server from monitoring policy
+
+Shared Storage Functions
+------------------------
+* ``ex_list_shared_storages`` - Lists shared storages
+* ``ex_get_shared_storage`` - Gets a shared storage
+* ``ex_create_shared_storage`` - Creates a shared storage
+* ``ex_delete_shared_storage`` - Removes a shared storage
+* ``ex_attach_server_to_shared_storage`` - Attaches a single server to a shared storage
+* ``ex_get_shared_storage_server`` - Gets a shared storage's server
+* ``ex_detach_server_from_shared_storage`` - Detaches a server from shared storage
+
+Public IP Functions
+-------------------
+* ``ex_list_public_ips`` - Lists all public IP addresses
+* ``ex_create_public_ip`` - Creates a public IP
+* ``ex_get_public_ip`` - Gets a public IP
+* ``ex_delete_public_ip`` - Deletes a public IP
+* ``ex_update_public_ip`` - Updates a Public IP
+
+Private Network Functions
+-------------------------
+* ``ex_list_private_networks`` - Lists all private networks
+* ``ex_create_private_network`` - Creates a private network
+* ``ex_delete_private_network`` - Deletes a private network
+* ``ex_update_private_network`` - Updates a private network
+* ``ex_list_private_network_servers`` - Lists all private network servers
+* ``ex_add_private_network_server`` - Adds servers to private network
+* ``ex_remove_server_from_private_network`` - Removes a server from the private network
+
+Load Balancer Functions
+-----------------------
+* ``ex_create_load_balancer`` - Creates a load balancer
+* ``ex_update_load_balancer`` - Updates a load balancer
+* ``ex_add_servers_to_load_balancer`` - Adds servers to a load balancers
+* ``ex_remove_server_from_load_balancer`` - Removes a server from a load balancer
+* ``ex_add_load_balancer_rule`` - Adds a rule to a load balancer
+* ``ex_remove_load_balancer_rule`` - Removes a rule from a load balancer
+* ``ex_list_load_balancers`` - Lists all load balancers
+* ``ex_get_load_balancer`` - Gets a load balancer
+* ``ex_list_load_balancer_server_ips`` - Lists load balanced server IP addresses
+* ``ex_get_load_balancer_server_ip`` - Gets a balanced server IP address
+* ``ex_list_load_balancer_rules`` - Lists load balancer rules
+* ``ex_get_load_balancer_rule`` - Gets a load balancer rule
+* ``ex_delete_load_balancer`` - Deletes a load balancer
+
+Firewall Policy Functions
+-------------------------
+* ``ex_create_firewall_policy`` - Creates a firewall policy
+* ``ex_list_firewall_policies`` - Lists firewall policies
+* ``ex_get_firewall_policy`` - Gets a firewall policy
+* ``ex_delete_firewall_policy`` - Deletes a firewall policy
+
+Create a Node
+-------------
+
+To create a node on 1&1 using Libcloud, follow this example:
+
+.. literalinclude:: /examples/compute/oneandone/create_node.py
+ :language: python
+
+This example will create a 1&1 server using 'S' as a small instance in the 'ES' (spain) data center.
+
+`create_node` has the following parameters:
+
+Required parameters:
+
+* ``name`` - Desired node name. Must be unique.
+* ``image`` - Image ID retrieved from `list_images`.
+* ``ex_fixed_instance_size_id`` - This is an ID of a flavor.
+
+Optional parameters:
+
+* ``auth`` - Password for the server. If none is provided, 1&1 will generate one for you, and return it in the response.
+* ``location`` - Desired `NodeLocation`
+* ``ex_ip`` - ID of a public IP address which can be created using `ex_create_public_ip`.
+* ``ex_monitoring_policy_id`` - Id of a monitoring policy which can be created using `ex_create_monitoring_policy`.
+* ``ex_firewall_policy_id`` - Id of a firewall policy which can be create using `ex_create_firewall_policy`.
+* ``ex_loadbalancer_id`` - Id of a load balancer which can be create using `ex_create_load_balancer`.
+* ``ex_description`` - Description for the server.
+* ``ex_power_on`` - A boolean indicating whether a server will be `POWERED_ON` or `POWERED_OFF` when provisioned.
+
+
+Create a Firewall Policy
+------------------------
+
+To create a firewall policy, follow this example:
+
+.. literalinclude:: /examples/compute/oneandone/create_firewall_policy.py
+ :language: python
+
+This example will create a firewall policy with a TCP rule allowing access on port 80.
+
+`ex_create_firewall_policy` has the following parameters:
+
+Required parameters:
+
+* ``name`` - Desired name for the firewall policy. Must be unique.
+* ``rules`` - ``list`` of ``dict``:
+ * ``protocol`` - One of the follwing protocols can be set TCP, UDP, TCP/UDP, ICMP, IPSEC.
+ * ``port_from`` - Port range start. Must be between 1 and 65535.
+ * ``port_to`` - Port range end. Must be between 1 and 65535.
+ * ``source`` - Source IP address.
+
+
+Optional parameters:
+
+* ``description`` - Description of the firewall policy.
+
+
+Create a Monitoring Policy
+--------------------------
+
+To create a monitoring policy, follow this example:
+
+.. literalinclude:: /examples/compute/oneandone/create_monitoring_policy.py
+ :language: python
+
+`ex_create_monitoring_policy` has the following parameters:
+
+Required parameters:
+
+* ``name`` - Desired name for the monitoring policy. Must be unique.
+* ``thresholds`` - ``dict`` of thresholds to be monitored. See the example
+* ``ports`` - ``list`` of ``dict`` defining which ports are to be monitored. See the example.
+* ``processes`` - ``list`` of ``dict`` defining which processes are to be monitored. See the example.
+
+Optional parameters:
+
+* ``description`` - Description of the monitoring policy.
+* ``email`` - Email address where notifications will be sent.
+* ``agent`` - Indicating whether an agent application should be installed on the host.
+
+Create a Shared Storage
+-----------------------
+
+To create a shared storage, follow this example:
+
+.. literalinclude:: /examples/compute/oneandone/create_shared_storage.py
+ :language: python
+
+Required parameters:
+
+* ``name`` - ``str`` Desired name for the shared storage. Must be unique.
+* ``size`` - ``int`` Size of the shared storage.
+* ``datacenter_id`` - ``str`` 1&1 data center.
+
+Optional parameters:
+
+* ``description`` - Description of the shared storage.
+
+Create a Load Balancer
+----------------------
+
+
+To create a load balancer, follow this example:
+
+ .. literalinclude:: /examples/compute/oneandone/create_load_balancer.py
+ :language: python
+
+Required parameters:
+
+* ``name`` - ``str`` Desired name for the shared storage. Must be unique.
+* ``method`` - ``str``
+* ``rules`` - ``list`` of ``dict``
+
+Optional parameters:
+
+* ``persistence``
+* ``persistence_time``
+* ``health_check_test``
+* ``health_check_interval``
+* ``health_check_path``
+* ``health_check_parser``
+* ``datacenter_id``
+* ``description``
+
+
+Create a Public IP
+------------------
+
+To create a public IP address, follow this example:
+
+ .. literalinclude:: /examples/compute/oneandone/create_public_ip.py
+ :language: python
+
+Required parameters:
+
+* ``type`` - ``str`` IPV4 or IPV6
+
+Optional parameters:
+
+* ``reverse_dns`` - ``str``
+* ``datacenter_id`` - ``str`` 1&1 Datacenter
+
+
+Create a Private Network
+------------------------
+
+To create a private network, follow this example:
+
+ .. literalinclude:: /examples/compute/oneandone/create_private_network.py
+ :language: python
+
+Required parameters:
+
+* ``name`` - ``str`` name of the public network.
+
+Optional parameters:
+
+* ``datacenter_id`` - ``str``
+* ``network_address``
+* ``subnet_mask``
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/docs/examples/compute/oneandone/create_firewall_policy.py
----------------------------------------------------------------------
diff --git a/docs/examples/compute/oneandone/create_firewall_policy.py b/docs/examples/compute/oneandone/create_firewall_policy.py
new file mode 100644
index 0000000..74db619
--- /dev/null
+++ b/docs/examples/compute/oneandone/create_firewall_policy.py
@@ -0,0 +1,33 @@
+import os
+
+from libcloud.compute.types import Provider
+from libcloud.compute.providers import get_driver
+
+cls = get_driver(Provider.ONEANDONE)
+drv = cls(key=os.environ.get('ONEANDONE_TOKEN'))
+
+my_rules = [
+ {
+ "protocol": "TCP",
+ "port_from": 80,
+ "port_to": 80,
+ "source": "0.0.0.0"
+ },
+ {
+ "protocol": "TCP",
+ "port_from": 443,
+ "port_to": 443,
+ "source": "0.0.0.0"
+ }
+]
+
+print(type(my_rules))
+
+try:
+ fw_policy = drv.ex_create_firewall_policy(
+ name='Firewall Policy',
+ rules=my_rules,
+ description='FW Policy Description')
+ print(fw_policy)
+except Exception as e:
+ print(e)
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/docs/examples/compute/oneandone/create_load_balancer.py
----------------------------------------------------------------------
diff --git a/docs/examples/compute/oneandone/create_load_balancer.py b/docs/examples/compute/oneandone/create_load_balancer.py
new file mode 100644
index 0000000..5e08ed9
--- /dev/null
+++ b/docs/examples/compute/oneandone/create_load_balancer.py
@@ -0,0 +1,36 @@
+import os
+
+from libcloud.compute.types import Provider
+from libcloud.compute.providers import get_driver
+
+cls = get_driver(Provider.ONEANDONE)
+drv = cls(key=os.environ.get('ONEANDONE_TOKEN'))
+
+rules = [
+ {
+ "protocol": "TCP",
+ "port_balancer": 80,
+ "port_server": 80,
+ "source": "0.0.0.0"
+ },
+ {
+ "protocol": "TCP",
+ "port_balancer": 9999,
+ "port_server": 8888,
+ "source": "0.0.0.0"
+ }
+]
+
+try:
+ shared_storage = drv.ex_create_load_balancer(
+ name="Test Load Balancer",
+ method='ROUND_ROBIN',
+ rules=rules,
+ persistence=False,
+ persistence_time=1200,
+ health_check_test='TCP',
+ health_check_interval=40)
+
+ print(shared_storage)
+except Exception as e:
+ print(e)
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/docs/examples/compute/oneandone/create_monitoring_policy.py
----------------------------------------------------------------------
diff --git a/docs/examples/compute/oneandone/create_monitoring_policy.py b/docs/examples/compute/oneandone/create_monitoring_policy.py
new file mode 100644
index 0000000..d84b80d
--- /dev/null
+++ b/docs/examples/compute/oneandone/create_monitoring_policy.py
@@ -0,0 +1,90 @@
+import os
+
+from libcloud.compute.types import Provider
+from libcloud.compute.providers import get_driver
+
+cls = get_driver(Provider.ONEANDONE)
+drv = cls(key=os.environ.get('ONEANDONE_TOKEN'))
+
+ports = [
+ {
+ "protocol": "TCP",
+ "port": 443,
+ "alert_if": "NOT_RESPONDING",
+ "email_notification": True
+ }
+]
+
+processes = [
+ {
+ "process": "httpdeamon",
+ "alert_if": "NOT_RUNNING",
+ "email_notification": False
+ }
+]
+thresholds = {
+ "cpu": {
+ "warning": {
+ "value": 90,
+ "alert": False
+ },
+ "critical": {
+ "value": 95,
+ "alert": False
+ }
+ },
+ "ram": {
+ "warning": {
+ "value": 90,
+ "alert": False
+ },
+ "critical": {
+ "value": 95,
+ "alert": False
+ }
+ },
+ "disk": {
+ "warning": {
+ "value": 80,
+ "alert": False
+ },
+ "critical": {
+ "value": 90,
+ "alert": False
+ }
+ },
+ "transfer": {
+ "warning": {
+ "value": 1000,
+ "alert": False
+ },
+ "critical": {
+ "value": 2000,
+ "alert": False
+ }
+ },
+ "internal_ping": {
+ "warning": {
+ "value": 50,
+ "alert": False
+ },
+ "critical": {
+ "value": 100,
+ "alert": True
+ }
+ }
+}
+
+try:
+ monitoring_policy = drv.ex_create_monitoring_policy(
+ name='Monitoring Policy',
+ ports=ports,
+ thresholds=thresholds,
+ processes=processes,
+ description='Monitoring Policy Description',
+ email="test@test.com",
+ agent=True
+ )
+ print(monitoring_policy)
+except Exception as e:
+ print(e)
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/docs/examples/compute/oneandone/create_node.py
----------------------------------------------------------------------
diff --git a/docs/examples/compute/oneandone/create_node.py b/docs/examples/compute/oneandone/create_node.py
new file mode 100644
index 0000000..444de7d
--- /dev/null
+++ b/docs/examples/compute/oneandone/create_node.py
@@ -0,0 +1,36 @@
+import os
+
+from libcloud.compute.types import Provider
+from libcloud.compute.providers import get_driver
+
+cls = get_driver(Provider.ONEANDONE)
+drv = cls(key=os.environ.get('ONEANDONE_TOKEN'))
+
+# First we need to get all avaliable sizes
+sizes = drv.list_sizes()
+
+# Then we select one we want to use to create a node. We pick 'S' as small.
+desired_size = [size for size in sizes if size.name == 'S']
+
+# Let's get all available images
+images = drv.list_images('IMAGE')
+
+# Now we select an image we want to install on to the node.
+# We pick Ubuntu 14.04
+desired_image = \
+ [img for img in images if 'ubuntu1404-64min' in img.name.lower()]
+
+# This step is optional.
+# Then we get the list of available datacenters (locations)
+locations = drv.list_locations()
+
+# And we pick one in this case Spain (ES)
+desired_location = [loc for loc in locations if loc.name == 'ES']
+
+# Now let's create that node:
+node = drv.create_node(name="Libcloud Test Node2",
+ image=desired_image[0],
+ ex_fixed_instance_size_id=desired_size[0].id,
+ location=desired_location[0])
+
+print(node)
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/docs/examples/compute/oneandone/create_private_network.py
----------------------------------------------------------------------
diff --git a/docs/examples/compute/oneandone/create_private_network.py b/docs/examples/compute/oneandone/create_private_network.py
new file mode 100644
index 0000000..c6adb70
--- /dev/null
+++ b/docs/examples/compute/oneandone/create_private_network.py
@@ -0,0 +1,14 @@
+import os
+
+from libcloud.compute.types import Provider
+from libcloud.compute.providers import get_driver
+
+cls = get_driver(Provider.ONEANDONE)
+drv = cls(key=os.environ.get('ONEANDONE_TOKEN'))
+
+try:
+ public_network = drv.ex_create_private_network(
+ name='TestPN')
+ print(public_network)
+except Exception as e:
+ print(e)
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/docs/examples/compute/oneandone/create_public_ip.py
----------------------------------------------------------------------
diff --git a/docs/examples/compute/oneandone/create_public_ip.py b/docs/examples/compute/oneandone/create_public_ip.py
new file mode 100644
index 0000000..ec76e05
--- /dev/null
+++ b/docs/examples/compute/oneandone/create_public_ip.py
@@ -0,0 +1,14 @@
+import os
+
+from libcloud.compute.types import Provider
+from libcloud.compute.providers import get_driver
+
+cls = get_driver(Provider.ONEANDONE)
+drv = cls(key=os.environ.get('ONEANDONE_TOKEN'))
+
+try:
+ public_ip = drv.ex_create_public_ip(
+ type='IPV4')
+ print(public_ip)
+except Exception as e:
+ print(e)
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/docs/examples/compute/oneandone/create_shared_storage.py
----------------------------------------------------------------------
diff --git a/docs/examples/compute/oneandone/create_shared_storage.py b/docs/examples/compute/oneandone/create_shared_storage.py
new file mode 100644
index 0000000..dbec592
--- /dev/null
+++ b/docs/examples/compute/oneandone/create_shared_storage.py
@@ -0,0 +1,21 @@
+import os
+
+from libcloud.compute.types import Provider
+from libcloud.compute.providers import get_driver
+
+cls = get_driver(Provider.ONEANDONE)
+drv = cls(key=os.environ.get('ONEANDONE_TOKEN'))
+
+locations = drv.list_locations()
+
+desired_location = [loc for loc in locations if loc.name == 'ES']
+
+try:
+ shared_storage = drv.ex_create_shared_storage(
+ name="Test Shared Storage", size=50,
+ datacenter_id=desired_location[0].id,
+ description=None
+ )
+ print(shared_storage)
+except Exception as e:
+ print(e)
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/docs/examples/compute/oneandone/instantiate_driver.py
----------------------------------------------------------------------
diff --git a/docs/examples/compute/oneandone/instantiate_driver.py b/docs/examples/compute/oneandone/instantiate_driver.py
new file mode 100644
index 0000000..9111925
--- /dev/null
+++ b/docs/examples/compute/oneandone/instantiate_driver.py
@@ -0,0 +1,9 @@
+from libcloud.compute.types import Provider
+from libcloud.compute.providers import get_driver
+
+# First we need to instantiate desired libcoud driver.
+cls = get_driver(Provider.ONEANDONE)
+
+token = 'your_token'
+# Then pass in your security token
+drv = cls(key=token)
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/common/base.py
----------------------------------------------------------------------
diff --git a/libcloud/common/base.py b/libcloud/common/base.py
index c5759f3..f6826d2 100644
--- a/libcloud/common/base.py
+++ b/libcloud/common/base.py
@@ -514,6 +514,7 @@ class Connection(object):
def request(self, action, params=None, data=None, headers=None,
method='GET', raw=False, stream=False):
+
"""
Request a given `action`.
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/compute/drivers/oneandone.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/oneandone.py b/libcloud/compute/drivers/oneandone.py
new file mode 100644
index 0000000..a33fe3d
--- /dev/null
+++ b/libcloud/compute/drivers/oneandone.py
@@ -0,0 +1,2263 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+"""
+1&1 Cloud Server Compute driver
+"""
+import json
+
+from libcloud.compute.providers import Provider
+from libcloud.common.base import JsonResponse, ConnectionKey
+from libcloud.compute.base import NodeSize, NodeImage, NodeLocation, \
+ Node, NodeAuthPassword, NodeAuthSSHKey
+from libcloud.common.types import InvalidCredsError
+from libcloud.compute.types import NodeState
+from libcloud.utils.py3 import httplib
+from libcloud.compute.base import NodeDriver
+
+from time import sleep
+
+API_HOST = 'cloudpanel-api.1and1.com'
+API_VERSION = '/v1/'
+
+__all__ = [
+ 'API_HOST',
+ 'API_VERSION',
+ 'OneAndOneResponse',
+ 'OneAndOneConnection',
+ 'OneAndOneNodeDriver'
+]
+
+
+class OneAndOneResponse(JsonResponse):
+ """
+ OneAndOne response parsing.
+ """
+ valid_response_codes = [httplib.OK, httplib.CREATED, httplib.ACCEPTED]
+
+ def parse_error(self):
+
+ if self.status == httplib.UNAUTHORIZED:
+ body = self.parse_body()
+ raise InvalidCredsError(body['message'])
+ else:
+ body = self.parse_body()
+ if 'message' in body:
+ error = '%s (code: %s)' % (body['message'], self.status)
+ else:
+ error = body
+ return error
+
+ def success(self):
+ return self.status in self.valid_response_codes
+
+
+class OneAndOneConnection(ConnectionKey):
+ """
+ Connection class for the 1&1 driver
+ """
+
+ host = API_HOST
+ api_prefix = API_VERSION
+ responseCls = OneAndOneResponse
+
+ def encode_data(self, data):
+ return json.dumps(data)
+
+ def add_default_headers(self, headers):
+ """
+ Add headers that are necessary for every request
+
+ This method adds ``token`` and ``Content-Type`` to the request.
+ """
+ headers['X-Token'] = self.key
+ headers['Content-Type'] = 'application/json'
+ return headers
+
+ def request(self, action, params=None, data=None, headers=None,
+ method='GET', raw=False):
+ """
+ Some requests will use the href attribute directly.
+ If this is not the case, then we should formulate the
+ url based on the action specified.
+ If we are using a full url, we need to remove the
+ host and protocol components.
+ """
+ action = self.api_prefix + action.lstrip('/')
+
+ return super(OneAndOneConnection, self). \
+ request(action=action,
+ params=params,
+ data=data,
+ headers=headers,
+ method=method,
+ raw=raw)
+
+
+class OneAndOneNodeDriver(NodeDriver):
+ """
+ Base OneAndOne node driver.
+ """
+ connectionCls = OneAndOneConnection
+ name = '1and1'
+ website = 'http://www.1and1.com'
+ type = Provider.ONEANDONE
+
+ NODE_STATE_MAP = {
+ 'POWERING_ON': NodeState.STARTING,
+ 'POWERING_OFF': NodeState.PENDING,
+ 'POWERED_OFF': NodeState.STOPPING,
+ 'POWERED_ON': NodeState.RUNNING,
+ 'REBOOTING': NodeState.REBOOTING,
+ 'CONFIGURING': NodeState.RECONFIGURING,
+ 'REMOVING': NodeState.UNKNOWN,
+ 'DEPLOYING': NodeState.STARTING,
+ }
+
+ """
+ Core Functions
+ """
+
+ def list_sizes(self):
+ """
+ Lists all sizes
+
+ :return: A list of all configurable node sizes.
+ :rtype: ``list`` of :class:`NodeSize`
+ """
+ sizes = []
+
+ fixed_instances = self._list_fixed_instances()
+ for value in fixed_instances:
+ node_size = self._to_node_size(value)
+ sizes.append(node_size)
+
+ return sizes
+
+ def list_locations(self):
+ """
+ Lists all locations
+
+ :return: ``list`` of :class:`NodeLocation`
+ :rtype: ``list``
+ """
+ datacenters = self.ex_list_datacenters()
+ locations = []
+ for values in datacenters:
+ node_size = self._to_location(values)
+ locations.append(node_size)
+
+ return locations
+
+ def list_images(self, image_type=None):
+ """
+ :return: ``list`` of :class: `NodeImage`
+ :rtype: ``list``
+ """
+ response = self.connection.request(
+ action='server_appliances',
+ method='GET'
+ )
+
+ return self._to_images(response.object, image_type)
+
+ def get_image(self, image_id):
+ response = self.connection.request(
+ action='server_appliances/%s' % image_id,
+ method='GET'
+ )
+ return self._to_image(response.object)
+
+ """
+ Node functions
+ """
+
+ def create_node(self,
+ name,
+ image,
+ ex_fixed_instance_size_id,
+ location=None,
+ auth=None,
+ ex_ip=None,
+ ex_monitoring_policy_id=None,
+ ex_firewall_policy_id=None,
+ ex_loadbalancer_id=None,
+ ex_description=None,
+ ex_power_on=None):
+ """
+ Creates a node.
+
+ :param name: The name of the new node
+ :type ```str```
+
+ :param image: Image from list_images
+ :rtype: ``NodeImage``
+
+ :param ex_fixed_instance_size_id:
+ Fixed instance size ID from list_sizes
+ :rtype: ``str``
+
+ :param location: 1&1 Data center Location
+ :type ```NodeLocation```
+
+ :param auth: SSH key or root password
+ :type: :class:`NodeAuthSSHKey` or :class:`NodeAuthPassword`
+
+ :param ex_ip: IP address
+ :type ```str```
+
+ :param ex_ssh_key: SSH Key
+ :type ```str```
+
+ :param password: Password
+ :type ```str```
+
+ :param ex_monitoring_policy_id:
+ :type ```str```
+
+ :param ex_firewall_policy_id:
+ :type ```str```
+
+ :param ex_loadbalancer_id:
+ :type ```str```
+
+ :param ex_description:
+ :type ```str```
+
+ :param ex_power_on:
+ :type ```bool```
+
+
+ :return: Instance of class ``Node``
+ :rtype: :class: `Node`
+ """
+
+ body = {
+ "name": name,
+ "appliance_id": image.id,
+ "hardware": {
+ "fixed_instance_size_id": ex_fixed_instance_size_id
+ },
+ }
+
+ if location is not None:
+ body['datacenter_id'] = location.id
+ if ex_power_on is not None:
+ body["power_on"] = ex_power_on
+
+ if ex_description is not None:
+ body["description"] = ex_description
+
+ if ex_firewall_policy_id is not None:
+ body["firewall_policy_id"] = ex_firewall_policy_id
+
+ if ex_monitoring_policy_id is not None:
+ body["monitoring_policy_id"] = ex_monitoring_policy_id
+
+ if ex_loadbalancer_id is not None:
+ body["loadbalancer_id"] = ex_loadbalancer_id
+
+ if auth is not None:
+ if isinstance(auth, NodeAuthPassword):
+ body["password"] = auth.password
+ elif isinstance(auth, NodeAuthSSHKey):
+ body["rsa_key"] = auth.pubkey
+ if ex_ip is not None:
+ body["ip_id"] = ex_ip
+
+ response = self.connection.request(
+ action="servers",
+ data=body,
+ method='POST',
+ )
+
+ return self._to_node(response.object)
+
+ def list_nodes(self):
+ """
+ List all nodes.
+
+ :return: ``list`` of :class:`Node`
+ :rtype: ``list``
+ """
+ response = self.connection.request(
+ action='servers',
+ method='GET'
+ )
+
+ return self._to_nodes(response.object)
+
+ def destroy_node(self, node, ex_keep_ips=False):
+ """
+ Destroys a node.
+
+ :param node: The node you wish to destroy.
+ :type volume: :class:`Node`
+
+ :param ex_keep_ips: True to keep all IP addresses assigned to the node
+ :type ex_keep_ips: : ``bool``
+
+ :return: Instance of class ``Node``
+ :rtype: :class: `Node`
+ """
+ self.ex_shutdown_server(node.id)
+
+ self._wait_for_state(node.id, 'POWERED_OFF')
+
+ response = self.connection.request(
+ action='servers/%s' % node.id,
+ params={'keep_ips': ex_keep_ips},
+ method='DELETE'
+ )
+
+ return self._to_node(response.object)
+
+ def reboot_node(self, node):
+ """
+ Reboots the node.
+
+ :param node: The node you wish to destroy.
+ :type volume: :class:`Node`
+
+ :return: Instance of class ``Node``
+ :rtype: :class: `Node`
+ """
+ shutdown_body = {
+ "action": "REBOOT",
+ "method": "HARDWARE"
+ }
+ response = self.connection.request(
+ action='servers/%s/status/action' % node.id,
+ data=shutdown_body,
+ method='PUT',
+ )
+ return self._to_node(response.object)
+
+ """
+ Extension functions
+ """
+
+ def ex_rename_server(self, server_id, name=None, description=None):
+ """
+ Renames the server
+ :param server_id: ID of the server you want to rename
+ :param name: New name of the server
+ :rtype: ``str``
+
+ :param description: New description of the server
+ :rtype: ``str``
+
+ :return: Instance of class ``Node``
+ :rtype: :class: `Node`
+ """
+
+ body = {}
+ if name is not None:
+ body["name"] = name
+ if description is not None:
+ body["description"] = description
+
+ response = self.connection.request(
+ action='servers/%s' % server_id,
+ data=body,
+ method='PUT'
+ )
+
+ return self._to_node(response.object)
+
+ def ex_get_server_hardware(self, server_id):
+ """
+ Gets all server hardware
+
+ :param server_id: Id of the server
+ :rtype: ``str``
+
+ :return: Server's hardware
+ :rtype: ``dict``
+ """
+ response = self.connection.request(
+ action='servers/%s/hardware' % server_id,
+ method='GET'
+ )
+ return response.object
+
+ """
+ Hardware operations
+ """
+
+ def ex_modify_server_hardware(self, server_id,
+ fixed_instance_size_id=None, vcore=None,
+ cores_per_processor=None, ram=None, ):
+ """
+ Modifies server's hardware
+
+ :param server_id:
+ :rtype: ``str``
+
+ :param fixed_instance_size_id: Id of the fixed instance size
+ :rtype: ``str``
+
+ :param vcore: Virtual cores count
+ :rtype: ``int``
+
+ :param cores_per_processor: Count of cores per procesor
+ :rtype: ``int``
+
+ :param ram: Amount of ram for the server
+ :rtype: ``int```
+
+ :return: Instance of class ``Node``
+ :rtype: :class: `Node`
+ """
+
+ body = {}
+
+ if fixed_instance_size_id is not None:
+ body["firewall_policy_id"] = fixed_instance_size_id
+ if vcore is not None:
+ body["vcore"] = vcore
+ if cores_per_processor is not None:
+ body["cores_per_processor"] = cores_per_processor
+ if ram is not None:
+ body["ram"] = ram
+
+ response = self.connection.request(
+ action='servers/%s/hardware' % server_id,
+ data=body,
+ method='PUT'
+ )
+
+ return self._to_node(response.object)
+
+ """
+ HDD operations
+ """
+
+ def ex_modify_server_hdd(self, server_id, hdd_id=None, size=None):
+ """
+ Modifies server hard disk drives
+
+ :param server_id: Id of the server
+ :rtype: ``str``
+
+ :param hdd_id: Id of the hard disk
+ :rtype: ``str``
+
+ :param size: Size of the hard disk
+ :rtype: ``str``
+
+
+ :return: Instance of class ``Node``
+ :rtype: :class: `Node`
+ """
+
+ body = {}
+
+ if size is not None:
+ body[size] = size
+
+ response = self.connection.request(
+ action='servers/%s/hardware/hdds/%s' % (server_id, hdd_id),
+ data=body,
+ method='PUT'
+ )
+
+ return self._to_node(response.object)
+
+ def ex_add_hdd(self, server_id, size, is_main):
+ """
+ Add a hard disk to the server
+
+ :param server_id: Id of the server
+ :rtype: ``str``
+
+ :param size: Size of the new disk
+ :rtype: ``str``
+
+ :param is_main: Indicates if the disk is going to be the boot disk
+ :rtype: ``boolean``
+
+ :return: Instance of class ``Node``
+ :rtype: :class: `Node`
+ """
+ body = {
+ "size": size,
+ "is_main": is_main
+ }
+
+ response = self.connection.request(
+ action='servers/%s/hardware/hdds' % server_id,
+ data=body,
+ method='POST'
+ )
+
+ return self._to_node(response.object)
+
+ def ex_remove_hdd(self, server_id, hdd_id):
+ """
+ Removes existing hard disk
+
+ :param server_id: Id of the server
+ :rtype: ``str``
+
+ :param hdd_id: Id of the hard disk
+ :rtype: ``str``
+
+ :return: Instance of class ``Node``
+ :rtype: :class: `Node`
+ """
+
+ response = self.connection.request(
+ action='servers/%s/hardware/hdds/%s' % (server_id, hdd_id),
+ method='DELETE'
+ )
+
+ return self._to_node(response.object)
+
+ """
+ Data center operations
+ """
+
+ def ex_list_datacenters(self):
+ """
+ Lists all data centers
+
+ :return: List of data centers
+ :rtype: ``dict``
+ """
+ response = self.connection.request(
+ action='datacenters',
+ method='GET'
+ )
+
+ return response.object
+
+ def ex_get_server(self, server_id):
+ """
+ Gets a server
+
+ :param server_id: Id of the server to be retrieved
+ :rtype: ``str``
+ :return: Instance of class ``Node``
+ :rtype: :class: `Node`
+ """
+
+ response = self.connection.request(
+ action='servers/%s' % (server_id),
+ method='GET'
+ )
+
+ return self._to_node(response.object)
+
+ def ex_shutdown_server(self, server_id, method='SOFTWARE'):
+ """
+ Shuts down the server
+
+ :param server_id: Id of the server to be shut down
+ :rtype: ``str``
+
+ :param method: Method of shutting down "SOFTWARE" or "HARDWARE"
+
+ :return: Instance of class ``Node``
+ :rtype: :class: `Node`
+ """
+
+ shutdown_body = {
+ "action": "POWER_OFF",
+ "method": method
+ }
+ response = self.connection.request(
+ action='servers/%s/status/action' % (server_id),
+ data=shutdown_body,
+ method='PUT',
+ )
+ return self._to_node(response.object)
+
+ """
+ Image operations
+ """
+
+ def ex_get_server_image(self, server_id):
+ """
+ Gets server image
+
+ :param server_id: Id of the server
+ :rtype: ``str``
+
+ :return: Server image
+ :rtype: ``dict``
+ """
+
+ response = self.connection.request(
+ action='servers/%s/image' % server_id,
+ method='GET'
+ )
+ return response.object
+
+ def ex_reinstall_server_image(self, server_id, image_id, password=None):
+ """
+ Installs a new image on the server
+
+ :param server_id: Id of the server
+ :rtype: ``str``
+
+ :param image_id: Id of the image (Server Appliance)
+ :rtype: ``str``
+
+ :param password: New password for the server
+
+ :return: Instance of class ``Node``
+ :rtype: :class: `Node`
+ """
+
+ body = {
+ "id": image_id,
+ }
+
+ if password is not None:
+ body["password"] = password
+
+ response = self.connection.request(
+ action='servers/%s/image' % server_id,
+ data=body,
+ method='PUT'
+ )
+ return self._to_node(response.object)
+
+ """
+ Server IP operations
+ """
+
+ def ex_list_server_ips(self, server_id):
+ """
+ Gets all server IP objects
+
+ :param server_id: Id of the server
+ :rtype: ``str``
+
+ :return: List of server IP objects
+ :rtype: ``list`` of ``dict``
+ """
+ response = self.connection.request(
+ action='servers/%s/ips' % server_id,
+ method='GET'
+ )
+
+ return response.object
+
+ def ex_get_server_ip(self, server_id, ip_id):
+ """
+ Get a single server IP object
+
+ :param server_id: Id of the server
+ :rtype: ``str``
+
+ :param ip_id: ID of the IP address
+ :rtype: ``str``
+
+ :return: IP address object
+ :rtype: ``dict``
+ """
+ response = self.connection.request(
+ action='servers/%s/ips/%s' % (server_id, ip_id),
+ method='GET'
+ )
+
+ return response.object
+
+ def ex_assign_server_ip(self, server_id, ip_type):
+ """
+ Assigns a new IP address to the server
+
+ :param server_id: Id of the server
+ :rtype: ``str``
+
+ :param ip_type: Type of the IP address [IPV4,IPV6]
+ :rtype: ``str``
+
+ :return: ``Node`` instance
+ :rtype: ``Node``
+ """
+
+ body = {
+ "type": ip_type
+ }
+
+ response = self.connection.request(
+ action='servers/%s/ips' % server_id,
+ data=body,
+ method='POST'
+ )
+
+ return self._to_node(response.object)
+
+ def ex_remove_server_ip(self, server_id, ip_id, keep_ip=None):
+ """
+ Removes an IP address from the server
+
+ :param server_id: Id of the server
+ :rtype: ``str``
+
+ :param ip_id: ID of the IP address
+ :rtype: ``str``
+
+ :param keep_ip: Indicates whether IP address will be removed from
+ the Cloud Panel
+ :rtype: ``boolean``
+
+ :return: ``Node`` instance
+ :rtype: ``Node``
+ """
+
+ body = {}
+ if keep_ip is not None:
+ body['keep_ip'] = keep_ip
+
+ response = self.connection.request(
+ action='servers/%s/ips/%s' % (server_id, ip_id),
+ data=body,
+ method='DELETE'
+ )
+
+ return self._to_node(response.object)
+
+ def ex_get_server_firewall_policies(self, server_id, ip_id):
+ """
+ Gets a firewall policy of attached to the server's IP
+ :param server_id: Id of the server
+ :rtype: ``str``
+
+ :param ip_id: ID of the IP address
+ :rtype: ``str``
+
+ :return: IP address object
+ :rtype: ``dict``
+ """
+
+ response = self.connection.request(
+ action='/servers/%s/ips/%s/firewall_policy' % (server_id, ip_id),
+ method='GET'
+ )
+
+ return response.object
+
+ def ex_remove_server_firewall_policy(self, server_id, ip_id):
+ """
+ Removes a firewall policy from server's IP
+
+ :param server_id: Id of the server
+ :rtype: ``str``
+
+ :param ip_id: ID of the IP address
+ :rtype: ``str``
+
+ :return: ``Node`` instance
+ :rtype: ``Node``
+ """
+ response = self.connection.request(
+ action='/servers/%s/ips/%s/firewall_policy' % (server_id, ip_id),
+ method='DELETE'
+ )
+
+ return self._to_node(response.object)
+
+ def ex_add_server_firewall_policy(self, server_id, ip_id, firewall_id):
+ """
+ Adds a firewall policy to the server's IP address
+
+ :param server_id: Id of the server
+ :rtype: ``str``
+
+ :param ip_id: ID of the IP address
+ :rtype: ``str``
+
+ :param firewall_id: ID of the firewall policy
+ :rtype: ``str``
+
+ :return: ``Node`` instance
+ :rtype: ``Node``
+ """
+ body = {
+ "id": firewall_id
+ }
+ response = self.connection.request(
+ action='/servers/%s/ips/%s/firewall_policy' % (server_id, ip_id),
+ data=body,
+ method='POST'
+ )
+
+ return self._to_node(response.object)
+
+ """
+ Firewall Policy operations
+ """
+
+ def ex_create_firewall_policy(self, name, rules, description=None):
+ """
+ Creates a firewall Policy
+ :param name:
+ :param description:
+ :param rules:
+ :rtype 'dict': [
+ {
+ "protocol": "TCP",
+ "port_from": 80,
+ "port_to": 80,
+ "source": "0.0.0.0"
+ }
+ ]
+
+ :return: 'dict' firewall policy
+ """
+ body = {
+ "name": name
+ }
+
+ if description is not None:
+ body['description'] = description
+
+ if len(rules) == 0:
+ raise ValueError(
+ 'At least one firewall rule is required.'
+ )
+ else:
+ body["rules"] = rules
+
+ response = self.connection.request(
+ action='firewall_policies',
+ data=body,
+ method='POST',
+ )
+
+ return response.object
+
+ def ex_list_firewall_policies(self):
+ """
+ List firewall policies
+ :return: 'dict'
+ """
+
+ response = self.connection.request(
+ action='firewall_policies',
+ method='GET'
+ )
+
+ return response.object
+
+ def ex_get_firewall_policy(self, fw_id):
+ """
+ Gets firewall policy
+ :param fw_id: ID of the firewall policy
+ :return: 'dict'
+ """
+
+ response = self.connection.request(
+ action='firewall_policy/%s' % fw_id,
+ method='GET'
+ )
+
+ return response.object
+
+ def ex_delete_firewall_policy(self, fw_id):
+ """
+ Deletes firewall policy
+ :param fw_id: ID of the Firewall
+ :return: 'dict'
+ """
+ response = self.connection.request(
+ action='firewall_policy/%s' % fw_id,
+ method='DELETE'
+ )
+
+ return response.object
+
+ """
+ Shared storage operations
+ """
+
+ def ex_list_shared_storages(self):
+ """
+ List of shared storages
+ :return: 'dict'
+ """
+ response = self.connection.request(
+ action='shared_storages',
+ method='GET'
+ )
+
+ return response.object
+
+ def ex_get_shared_storage(self, storage_id):
+ """
+ Gets a shared storage
+ :return: 'dict'
+ """
+ response = self.connection.request(
+ action='shared_storages/%s' % (storage_id),
+ method='GET'
+ )
+
+ return response.object
+
+ def ex_create_shared_storage(self, name, size, datacenter_id=None,
+ description=None):
+ """
+ Creates a shared storage
+ :param name: Name of the storage
+ :param size: Size of the storage
+ :param datacenter_id: datacenter where storage should be created
+ :param description: description ot the storage
+ :return: 'dict'
+ """
+
+ body = {
+ "name": name,
+ "size": size,
+ "datacenter_id": datacenter_id
+ }
+
+ if description is not None:
+ body['description'] = description
+
+ response = self.connection.request(
+ action='shared_storages',
+ data=body,
+ method='POST'
+ )
+
+ return response.object
+
+ def ex_delete_shared_storage(self, storage_id):
+ """
+ Removes a shared storage
+
+ :param storage_id: Id of the shared storage
+ :rtype: ``str``
+
+ :return: Instnace of shared storage
+ :rtype: ``list`` of ``dict``
+ """
+ response = self.connection.request(
+ action='shared_storages/%s' % storage_id,
+ method='DELETE'
+ )
+
+ return response.object
+
+ def ex_attach_server_to_shared_storage(self, storage_id,
+ server_id, rights):
+ """
+ Attaches a single server to a shared storage
+
+ :param storage_id: Id of the shared storage
+ :param server_id: Id of the server to be attached to the shared storage
+ :param rights:
+ :return:
+ :rtype: 'dict'
+ """
+ body = {
+ "severs": [
+ {
+ "id": server_id,
+ "rights": rights
+ }
+ ]
+ }
+
+ response = self.connection.request(
+ action='shared_storages/%s/servers' % storage_id,
+ data=body,
+ method='POST'
+ )
+
+ return response.object
+
+ def ex_get_shared_storage_server(self, storage_id, server_id):
+ """
+ Gets a shared storage's server
+ :param storage_id:
+ :param server_id:
+ :return:
+ """
+ response = self.connection.request(
+ action='shared_storages/%s/servers/%s' % (storage_id, server_id),
+ )
+
+ return response.object
+
+ def ex_detach_server_from_shared_storage(self, storage_id,
+ server_id):
+ """
+ Detaches a server from shared storage
+
+ :param storage_id: Id of the shared storage
+ :rtype: ``str``
+
+ :param server_id: Id of the server
+ :rtype: ``str``
+
+ :return: Instance of shared storage
+ :rtype: ``dict``
+ """
+ response = self.connection.request(
+ action='shared_storages/%s/servers/%s' % (storage_id, server_id),
+ method='DELETE'
+ )
+
+ return response.object
+
+ """
+ Load Balancers operations
+ """
+
+ def ex_create_load_balancer(self, name, method, rules,
+ persistence=None,
+ persistence_time=None,
+ health_check_test=None,
+ health_check_interval=None,
+ health_check_path=None,
+ health_check_parser=None,
+ datacenter_id=None,
+ description=None):
+ """
+
+ :param name: Name of the load balancer
+ :rtype:``str``
+
+ :param method: Load balancer method
+ :rtype:``str``
+
+ :param rules: Load balancer rules
+ :rtype: ``list`` of ``dict``
+ "rules": [
+ {
+ "protocol": "TCP",
+ "port_balancer": 80,
+ "port_server": 80,
+ "source": "0.0.0.0"
+ },
+ {
+ "protocol": "TCP",
+ "port_balancer": 9999,
+ "port_server": 8888,
+ "source": "0.0.0.0"
+ }
+ ]
+ :param persistence: Indictes if persistance is set
+ :rtype: ``boolean``
+
+ :param persistence_time: Persistance time
+ :rtype: ``int``
+
+ :param health_check_test: Type of test
+ :rtype:``str``
+
+ :param health_check_interval: Interval of the check
+
+ :param health_check_path: Path
+ :rtype:``str``
+ :param health_check_parser: Parser
+ :rtype:``str``
+
+ :param datacenter_id: Data center id
+ :rtype:``str``
+
+ :param description: Description of load balancer
+ :rtype:``str``
+
+ :return: ``dict``
+ """
+
+ body = {
+ "name": name,
+ "method": method,
+ }
+
+ body['rules'] = []
+ body['rules'] = rules
+
+ if persistence is not None:
+ body['persistence'] = persistence
+ if persistence_time is not None:
+ body['persistence_time'] = persistence_time
+ if health_check_test is not None:
+ body['health_check_test'] = health_check_test
+ if health_check_interval is not None:
+ body['health_check_interval'] = health_check_interval
+ if health_check_path is not None:
+ body['health_check_path'] = health_check_path
+ if health_check_parser is not None:
+ body['health_check_parser'] = health_check_parser
+ if datacenter_id is not None:
+ body['datacenter_id'] = datacenter_id
+ if description is not None:
+ body['description'] = description
+
+ response = self.connection.request(
+ action='load_balancers',
+ data=body,
+ method='POST'
+ )
+
+ return response.object
+
+ def ex_update_load_balancer(self, lb_id, name=None, description=None,
+ health_check_test=None,
+ health_check_interval=None,
+ persistence=None,
+ persistence_time=None,
+ method=None):
+ body = {}
+
+ if name is not None:
+ body['name'] = name
+ if description is not None:
+ body['description'] = description
+ if health_check_test is not None:
+ body['health_check_test'] = health_check_test
+ if health_check_interval is not None:
+ body['health_check_interval'] = health_check_interval
+ if persistence is not None:
+ body['persistence'] = persistence
+ if persistence_time is not None:
+ body['persistence_time'] = persistence_time
+ if method is not None:
+ body['method'] = method
+
+ response = self.connection.request(
+ action='load_balancers/%s' % lb_id,
+ data=body,
+ method='PUT'
+ )
+
+ return response.object
+
+ def ex_add_servers_to_load_balancer(self, lb_id, server_ips=[]):
+ """
+ Adds server's IP address to load balancer
+
+ :param lb_id: Load balancer ID
+ :rtype: ``str``
+
+ :param server_ips: Array of server IP IDs
+ :rtype: ``list`` of ``str``
+
+ :return: Instance of load balancer
+ :rtype: ``dict``
+ """
+ body = {
+ "server_ips": server_ips,
+ }
+
+ response = self.connection.request(
+ action='load_balancers/%s/server_ips' % lb_id,
+ data=body,
+ method='POST'
+ )
+
+ return response.object
+
+ def ex_remove_server_from_load_balancer(self, lb_id, server_ip):
+ """
+ Removes server's IP from load balancer
+
+ :param lb_id: Load balancer ID
+ :rtype: ``str``
+
+ :param server_ip: ID of the server IP
+ :rtype: ``str``
+
+ :return: Instance of load balancer
+ :rtype: ``dict``
+ """
+
+ response = self.connection.request(
+ action='/load_balancers/%s/server_ips/%s' % (lb_id, server_ip),
+ method='DELETE'
+ )
+
+ return response.object
+
+ def ex_add_load_balancer_rule(self, lb_id, protocol, port_balancer,
+ port_server, source=None):
+ """
+ Adds a rule to load balancer
+
+ :param lb_id: Load balancer ID
+ :rtype: ``str``
+
+ :param protocol: Load balancer protocol
+ :rtype: ``str``
+
+ :param port_balancer: Port to be balananced
+ :rtype: ``int``
+
+ :param port_server: Server port
+ :rtype: ``int``
+
+ :param source: Source IP address
+ :rtype: ``str``
+
+ :return: Instance of load balancer
+ :rtype: ``dict``
+ """
+
+ body = {
+ "rules": [
+ {
+ 'protocol': protocol,
+ 'port_balancer': port_balancer,
+ 'port_server': port_server
+ }
+ ]
+ }
+
+ if source is not None:
+ body['rules'][0]['source'] = source
+
+ response = self.connection.request(
+ action='/load_balancers/%s/rules' % lb_id,
+ data=body,
+ method='POST'
+ )
+
+ return response.object
+
+ def ex_remove_load_balancer_rule(self, lb_id, rule_id):
+ """
+ Removes load balancer rule
+
+ :param lb_id: Load balancer ID
+ :rtype: ``str``
+
+ :param rule_id: Rule ID
+ :rtype: ``str``
+
+ :return: Instance of load balancer
+ :rtype: ``dict``
+ """
+ response = self.connection.request(
+ action='/load_balancers/%s/rules/%s' % (lb_id, rule_id),
+ method='DELETE'
+ )
+
+ return response.object
+
+ def ex_list_load_balancers(self):
+ """
+ Lists all load balancers
+
+ :return: List of load balancers
+ :rtype: ``list`` of ``dict``
+ """
+ response = self.connection.request(
+ action='load_balancers',
+ method='GET'
+ )
+ return response.object
+
+ def ex_get_load_balancer(self, lb_id):
+ """
+ Gets a single load balancer
+
+ :param lb_id: ID of the load balancer
+ :rtype: ``str``
+
+ :return: Instance of load balancer
+ :rtype: ``dict``
+ """
+ response = self.connection.request(
+ action='load_balancers/%s' % lb_id,
+ method='GET'
+ )
+
+ return response.object
+
+ def ex_list_load_balancer_server_ips(self, lb_id):
+ """
+ List balanced server IP addresses
+
+ :param lb_id: ID of the load balancer
+ :rtype: ``str``
+
+ :return: Array of IP address IDs
+ :rtype: ``dict``
+ """
+ response = self.connection.request(
+ action='load_balancers/%s/server_ips' % lb_id,
+ method='GET'
+ )
+
+ return response.object
+
+ def ex_get_load_balancer_server_ip(self, lb_id, server_ip):
+ """
+ Gets load balanced server id
+
+ :param lb_id: ID of the load balancer
+ :rtype: ``str``
+
+ :param server_ip: ID of the server IP
+ :rtype: ``str``
+
+ :return: Server IP
+ :rtype: ``dict``
+ """
+ response = self.connection.request(
+ action='load_balancers/%s/server_ips/%s' % (lb_id, server_ip),
+ method='GET'
+ )
+
+ return response.object
+
+ def ex_list_load_balancer_rules(self, lb_id):
+ """
+ Lists loadbalancer rules
+
+ :param lb_id: ID of the load balancer
+ :rtype: ``str``
+
+ :return: Lists of rules
+ :rtype: ``list`` of ``dict``
+ """
+ response = self.connection.request(
+ action='load_balancers/%s/rules' % lb_id,
+ method='GET'
+ )
+
+ return response.object
+
+ def ex_get_load_balancer_rule(self, lb_id, rule_id):
+ """
+ Get a load balancer rule
+
+ :param lb_id: ID of the load balancer
+ :rtype: ``str``
+
+ :param rule_id: Rule ID
+ :rtype: ``str``
+
+ :return: A load balancer rule
+ :rtype: ``dict``
+ """
+ response = self.connection.request(
+ action='load_balancers/%s/rules/%s' % (lb_id, rule_id),
+ method='GET'
+ )
+
+ return response.object
+
+ def ex_delete_load_balancer(self, lb_id):
+ """
+ Deletes a load balancer rule
+
+ :param lb_id: ID of the load balancer
+ :rtype: ``str``
+
+ :param rule_id: Rule ID
+ :rtype: ``str``
+
+ :return: Instance of load balancer
+ :rtype: ``dict``
+ """
+ response = self.connection.request(
+ action='load_balancers/%s' % lb_id,
+ method='DELETE'
+ )
+
+ return response.object
+
+ """
+ Public IP operations
+ """
+
+ def ex_list_public_ips(self):
+ """
+ Lists all public IP addresses
+
+ :return: Array of public addresses
+ :rtype: ``list`` of ``dict``
+ """
+ response = self.connection.request(
+ action='public_ips',
+ method='GET'
+ )
+
+ return response.object
+
+ def ex_create_public_ip(self, type, reverse_dns=None, datacenter_id=None):
+ """
+ Creates a public IP
+
+ :param type: Type of IP IPV4 or IPV6]
+ :rtype: ``str``
+
+ :param reverse_dns: Reverse DNS
+ :rtype: ``str``
+
+ :param datacenter_id: Datacenter ID where IP address will be crated
+ :rtype: ``str``
+
+ :return: Instance of Public IP
+ :rtype: ``dict``
+ """
+ body = {
+ 'type': type
+ }
+
+ if reverse_dns is not None:
+ body['reverse_dns'] = reverse_dns
+ if datacenter_id is not None:
+ body['datacenter_id'] = datacenter_id
+
+ response = self.connection.request(
+ action='public_ips',
+ data=body,
+ method='POST'
+ )
+
+ return response.object
+
+ def ex_get_public_ip(self, ip_id):
+ """
+ Gets a Public IP
+
+ :param ip_id: ID of the IP
+ :rtype: ``str``
+
+ :return: Instance of Public IP
+ :rtype: ``dict``
+ """
+ response = self.connection.request(
+ action='public_ips/%s' % ip_id,
+ method='GET'
+ )
+
+ return response.object
+
+ def ex_delete_public_ip(self, ip_id):
+ """
+ Deletes a public IP
+
+ :param ip_id: ID of public IP
+ :rtype: ``str``
+
+ :return: Instance of IP Address
+ :rtype: ``dict``
+ """
+ response = self.connection.request(
+ action='public_ips/%s' % ip_id,
+ method='DELETE'
+ )
+
+ return response
+
+ def ex_update_public_ip(self, ip_id, reverse_dns):
+ """
+ Updates a Public IP
+
+ :param ip_id: ID of public IP
+ :rtype: ``str``
+
+ :param reverse_dns: Reverse DNS
+ :rtype: ``str``
+
+ :return: Instance of Public IP
+ :rtype: ``dict``
+ """
+
+ body = {
+ 'reverse_dns': reverse_dns
+ }
+ response = self.connection.request(
+ action='public_ips/%s' % ip_id,
+ data=body,
+ method='DELETE'
+ )
+
+ return response.object
+
+ """
+ Private Network Operations
+ """
+
+ def ex_list_private_networks(self):
+ """
+ Lists all private networks
+
+ :return: List of private networks
+ :rtype: ``dict``
+ """
+ response = self.connection.request(
+ action='private_networks',
+ method='GET'
+ )
+
+ return response.object
+
+ def ex_create_private_network(self, name, description=None,
+ datacenter_id=None,
+ network_address=None,
+ subnet_mask=None):
+ """
+ Creates a private network
+
+ :param name: Name of the private network
+ :rtype: ``str``
+
+ :param description: Description of the private network
+ :rtype: ``str``
+
+ :param datacenter_id: ID of the data center for the private network
+ :rtype: ``str``
+
+ :param network_address: Network address of the private network
+ :rtype: ``str``
+
+ :param subnet_mask: Subnet mask of the private network
+ :rtype: ``str``
+
+ :return: Newly created private network
+ :rtype: ``dict``
+ """
+
+ body = {
+ 'name': name
+ }
+
+ if description is not None:
+ body['description'] = description
+ if datacenter_id is not None:
+ body['datacenter_id'] = datacenter_id
+ if network_address is not None:
+ body['network_address'] = network_address
+ if subnet_mask is not None:
+ body['subnet_maks'] = subnet_mask
+
+ response = self.connection.request(
+ action='private_networks',
+ data=body,
+ method='POST'
+ )
+ return response.object
+
+ def ex_delete_private_network(self, network_id):
+ """
+ Deletes a private network
+
+ :param network_id: Id of the private network
+ :rtype: ``str``
+
+ :return: Instance of the private network being deleted
+ :rtype: ``dict``
+ """
+ response = self.connection.request(
+ action='private_networks' % network_id,
+ method='DELETE'
+ )
+
+ return response.object
+
+ def ex_update_private_network(self, network_id,
+ name=None, description=None,
+ datacenter_id=None,
+ network_address=None,
+ subnet_mask=None):
+ """
+ Updates a private network
+
+ :param name: Name of the private network
+ :rtype: ``str``
+
+ :param description: Description of the private network
+ :rtype: ``str``
+
+ :param datacenter_id: ID of the data center for the private network
+ :rtype: ``str``
+
+ :param network_address: Network address of the private network
+ :rtype: ``str``
+
+ :param subnet_mask: Subnet mask of the private network
+ :rtype: ``str``
+
+ :return: Instance of private network
+ :rtype: ``dict``
+ """
+ body = {}
+
+ if name is not None:
+ body['name'] = name
+ if description is not None:
+ body['description'] = description
+ if datacenter_id is not None:
+ body['datacenter_id'] = datacenter_id
+ if network_address is not None:
+ body['network_address'] = network_address
+ if subnet_mask is not None:
+ body['subnet_maks'] = subnet_mask
+
+ response = self.connection.request(
+ action='private_networks/%s',
+ data=body,
+ method='PUT'
+ )
+
+ return response.object
+
+ def ex_list_private_network_servers(self, network_id):
+ """
+ Lists all private network servers
+
+ :param network_id: Private network ID
+ :rtype: ``str``
+
+ :return: List of private network servers
+ :rtype: ``dict``
+ """
+ response = self.connection.request(
+ action='/private_networks/%s/servers' % network_id,
+ method='GET'
+ )
+ return response.object
+
+ def ex_add_private_network_server(self, network_id, server_ids):
+ """
+ Add servers to private network
+
+ :param network_id: Private Network ID
+ :rtype: ``str``
+
+ :param server_ids: List of server IDs
+ :rtype: ``list`` of ``str``
+
+ :return: List of attached servers
+ :rtype: ``dict``
+
+ """
+ body = {
+ 'servers': server_ids
+
+ }
+
+ response = self.connection.request(
+ action='/private_networks/%s/servers' % network_id,
+ data=body,
+ method='POST'
+ )
+
+ return response.object
+
+ def ex_remove_server_from_private_network(self, network_id, server_id):
+ """
+ Removes a server from the private network
+
+ :param network_id: Private Network ID
+ :rtype: ``str``
+
+ :param server_id: Id of the server
+ :rtype: ``str``
+
+ :return: Instance of the private network
+ :rtype: ``dict``
+ """
+
+ response = self.connection.request(
+ action='/private_networks/%s/servers/%s' % (network_id, server_id),
+ method='POST'
+ )
+ return response.object
+
+ """
+ Monitoring policy operations
+ """
+
+ def ex_list_monitoring_policies(self):
+ """
+ Lists all monitoring policies
+
+ :return: List of monitoring policies
+ :rtype: ``dict``
+ """
+ response = self.connection.request(
+ action='monitoring_policies',
+ method='GET'
+ )
+
+ return response.object
+
+ def ex_create_monitoring_policy(self, name, thresholds,
+ ports,
+ processes,
+ description=None,
+ email=None,
+ agent=None,
+ ):
+ """
+ Creates a monitoring policy
+
+ :param name: Name for the monitoring policy
+ :rtype: ``str``
+
+ :param thresholds: Thresholds for the monitoring policy
+ :rtype: ``dict``
+ {
+ "cpu":{
+ "warning":{
+ "value":90,
+ "alert":false
+ },
+ "critical":{
+ "value":95,
+ "alert":false
+ }
+ },
+ "ram":{
+ "warning":{
+ "value":90,
+ "alert":false
+ },
+ "critical":{
+ "value":95,
+ "alert":false
+ }
+ },
+ "disk":{
+ "warning":{
+ "value":80,
+ "alert":false
+ },
+ "critical":{
+ "value":90,
+ "alert":false
+ }
+ },
+ "transfer":{
+ "warning":{
+ "value":1000,
+ "alert":false
+ },
+ "critical":{
+ "value":2000,
+ "alert":false
+ }
+ },
+ "internal_ping":{
+ "warning":{
+ "value":50,
+ "alert":false
+ },
+ "critical":{
+ "value":100,
+ "alert":false
+ }
+ }
+ }
+ :param ports: Monitoring policies for ports
+ :rtype: ``dict``
+ [
+ {
+ "protocol":"TCP",
+ "port":"22",
+ "alert_if":"RESPONDING",
+ "email_notification":true
+ }
+ ]
+
+
+ :param processes: Processes to be monitored
+ :rtype: ``dict``
+ [
+ {
+ "process":"test",
+ "alert_if":"NOT_RUNNING",
+ "email_notification":true
+ }
+ ]
+
+ :param description: Description for the monitoring policy
+ :rtype: ``str``
+
+ :param email: Email for notifications
+ :rtype: ``str``
+
+ :param agent: Indicates if agent application will be installed
+ :rtype: ``boolean``
+
+ :return: Newly created instance of monitofing policy
+ :rtype: ``dict``
+ """
+ body = {
+ 'name': name,
+ 'thresholds': thresholds,
+ 'ports': ports,
+ 'processes': processes
+ }
+
+ if description is not None:
+ body['description'] = description
+ if email is not None:
+ body['email'] = email
+ if agent is not None:
+ body['agent'] = agent
+
+ response = self.connection.request(
+ action='monitoring_policies',
+ data=body,
+ method='POST'
+ )
+ return response.object
+
+ def ex_delete_monitoring_policy(self, policy_id):
+ """
+ Deletes a monitoring policy
+
+ :param policy_id: Id of the monitoring policy
+ :rtype: ``str``
+
+ :return: Instance of the monitoring policy being deleted
+ :rtype: ``dict``
+ """
+ response = self.connection.request(
+ action='monitoring_policies' % policy_id,
+ method='DELETE'
+ )
+
+ return response.object
+
+ def ex_update_monitoring_policy(self, policy_id,
+ email,
+ thresholds,
+ name=None, description=None):
+ """
+ Updates monitoring policy
+
+ :param policy_id: Id of the monitoring policy
+ :param email: Email to send notifications to
+ :rtype: ``str``
+
+ :param thresholds: Thresholds for the monitoring policy
+ :rtype: ``dict``
+
+ :param name: Name of the monitoring policy
+ :rtype: ``str``
+
+ :param description: Description of the monitoring policy
+ :rtype: ``str``
+
+ :return: Instance of the monitoring policy being deleted
+ :rtype: ``dict``
+ """
+
+ body = {}
+
+ if name is not None:
+ body['name'] = name
+ if description is not None:
+ body['description'] = description
+ if thresholds is not None:
+ body['thresholds'] = thresholds
+ if email is not None:
+ body['email'] = email
+
+ response = self.connection.request(
+ action='monitoring_policies/%s' % policy_id,
+ data=body,
+ method='PUT'
+ )
+
+ return response.object
+
+ def ex_get_monitoring_policy(self, policy_id):
+ """
+ Fetches a monitoring policy
+
+ :param policy_id: Id of the monitoring policy
+ :rtype: ``str``
+
+ :return: Instance of a monitoring policy
+ :rtype: ``dict``
+ """
+ response = self.connection.request(
+ action='monitoring_policies/%s' % policy_id,
+ method='GET'
+ )
+
+ return response.object
+
+ def ex_get_monitoring_policy_ports(self, policy_id):
+ """
+ Fetches monitoring policy ports
+
+ :param policy_id: Id of the monitoring policy
+
+ :return: Instance of a monitoring policy
+ :rtype: ``dict``
+ """
+
+ response = self.connection.request(
+ action='monitoring_policies/%s/ports' % policy_id,
+ method='GET'
+ )
+
+ return response.object
+
+ def ex_get_monitoring_policy_port(self, policy_id, port_id):
+ """
+ Fetches monitoring policy port
+
+ :param policy_id: Id of the monitoring policy
+ :rtype: ``str``
+
+ :param port_id: Id of the port
+ :rtype: ``str``
+
+ :return: Instance of a monitoring policy
+ :rtype: ``dict``
+ """
+
+ response = self.connection.request(
+ action='monitoring_policies/%s/ports/%s' % (policy_id, port_id),
+ method='GET'
+ )
+
+ return response.object
+
+ def ex_remove_monitoring_policy_port(self, policy_id, port_id):
+ """
+ Removes monitoring policy port
+
+ :param policy_id: Id of the monitoring policy
+ :rtype: ``str``
+
+ :param port_id: Id of the port
+ :rtype: ``str``
+
+ :return: Instance of a monitoring policy
+ :rtype: ``dict``
+ """
+
+ response = self.connection.request(
+ action='monitoring_policies/%s/ports/%s' % (policy_id, port_id),
+ method='DELETE'
+ )
+
+ return response.object
+
+ def ex_add_monitoring_policy_ports(self, policy_id, ports):
+ """
+ Add monitoring policy ports
+
+ :param policy_id: Id of the monitoring policy
+ :rtype: ``str``
+
+ :param ports: List of ports
+ :rtype: ``dict``
+ [
+ {
+ "protocol":"TCP",
+ "port":"80",
+ "alert_if":"RESPONDING",
+ "email_notification":true
+ }
+ ]
+ :return: Instance of a monitoring policy
+ :rtype: ``dict``
+ """
+
+ body = {"ports": ports}
+
+ response = self.connection.request(
+ action='monitoring_policies/%s/ports' % policy_id,
+ data=body,
+ method='POST'
+ )
+
+ return response.object
+
+ def ex_get_monitoring_policy_processes(self, policy_id):
+ """
+ Fetches monitoring policy processes
+
+ :param policy_id: Id of the monitoring policy
+
+ :return: Instance of a monitoring policy
+ :rtype: ``dict``
+ """
+
+ response = self.connection.request(
+ action='monitoring_policies/%s/processes' % policy_id,
+ method='GET'
+ )
+
+ return response.object
+
+ def ex_get_monitoring_policy_process(self, policy_id, process_id):
+ """
+ Fetches monitoring policy process
+
+ :param policy_id: Id of the monitoring policy
+ :rtype: ``str``
+
+ :param process_id: Id of the process
+ :rtype: ``str``
+
+ :return: Instance of a monitoring policy
+ :rtype: ``dict``
+ """
+
+ response = self.connection.request(
+ action='monitoring_policies/%s/processes/%s'
+ % (policy_id, process_id),
+ method='GET'
+ )
+
+ return response.object
+
+ def ex_remove_monitoring_policy_process(self, policy_id, process_id):
+ """
+ Removes monitoring policy process
+
+ :param policy_id: Id of the monitoring policy
+ :rtype: ``str``
+
+ :param process_id: Id of the process
+ :rtype: ``str``
+
+ :return: Instance of a monitoring policy
+ :rtype: ``dict``
+ """
+
+ response = self.connection.request(
+ action='monitoring_policies/%s/processes/%s'
+ % (policy_id, process_id),
+ method='DELETE'
+ )
+
+ return response.object
+
+ def ex_add_monitoring_policy_processes(self, policy_id, processes):
+ """
+ Add monitoring policy processes
+
+ :param policy_id: Id of the monitoring policy
+ :rtype: ``str``
+
+ :param processes: List of processes
+ :rtype: ``list`` of ``dict``
+ [
+ {
+ "process": "taskmmgr",
+ "alert_if": "RUNNING",
+ "email_notification": true
+ }
+ ]
+ :return: Instance of a monitoring policy
+ :rtype: ``dict``
+ """
+
+ body = {"processes": processes}
+
+ response = self.connection.request(
+ action='monitoring_policies/%s/processes' % policy_id,
+ data=body,
+ method='POST'
+ )
+
+ return response.object
+
+ def ex_list_monitoring_policy_servers(self, policy_id):
+ """
+ List all servers that are being monitoried by the policy
+
+ :param policy_id: Id of the monitoring policy
+ :rtype: ``str``
+
+ :return: List of servers being monitored
+ :rtype: ``list`` of ``dict``
+ """
+
+ response = self.connection.request(
+ action='monitoring_policies/%s/servers' % policy_id,
+ method='GET'
+ )
+
+ return response.object
+
+ def ex_add_servers_to_monitoring_policy(self, policy_id, servers):
+ """
+ Adds servers to monitoring policy
+
+ :param policy_id: Id of the monitoring policy
+ :rtype: ``str``
+
+ :param servers: List of server ID
+ :rtype: ``list`` of ``str``
+
+ :return: Instance of a monitoring policy
+ :rtype: ``dict``
+ """
+ body = {
+ 'servers': servers
+ }
+ response = self.connection.request(
+ action='monitoring_policies/%s/servers' % policy_id,
+ data=body,
+ method='POST'
+ )
+
+ return response.object
+
+ def ex_remove_server_from_monitoring_policy(self, policy_id, server_id):
+ """
+ Removes a server from monitoring policy
+
+ :param policy_id: Id of the monitoring policy
+ :rtype: ``str``
+
+ :param server_id: Id of the server
+ :rtype: ``str``
+
+ :return: Instance of a monitoring policy
+ :rtype: ``dict``
+ """
+ response = self.connection.request(
+ action='monitoring_policies/%s/servers/%s'
+ % (policy_id, server_id),
+ method='DELETE'
+ )
+
+ return response.object
+
+ """
+ Private Functions
+ """
+
+ def _to_images(self, object, image_type=None):
+ if image_type is not None:
+ images = [image for image in object if image['type'] == image_type]
+ else:
+ images = [image for image in object]
+
+ return [self._to_image(image) for image in images]
+
+ def _to_image(self, data):
+ extra = {
+ 'os_family': data['os_family'],
+ 'os': data['os'],
+ 'os_version': data['os_version'],
+ 'os_architecture': data['os_architecture'],
+ 'os_image_type': data['os_image_type'],
+ 'min_hdd_size': data['min_hdd_size'],
+ 'available_datacenters': data['available_datacenters'],
+ 'licenses': data['licenses'],
+ 'version': data['version'],
+ 'categories': data['categories']
+ }
+ return NodeImage(id=data['id'], name=data['name'], driver=self,
+ extra=extra)
+
+ def _to_node_size(self, data):
+ """
+ Convert into NodeSize
+ """
+ return NodeSize(
+ id=data["id"],
+ name=data["name"],
+ ram=data["hardware"]["ram"],
+ disk=data["hardware"]["hdds"][0]["size"],
+ bandwidth=None,
+ price=None,
+ driver=self.connection.driver,
+ extra={
+ 'vcores': data['hardware']["vcore"],
+ "cores_per_processor": data['hardware']['cores_per_processor']}
+
+ )
+
+ def _to_location(self, location):
+ return NodeLocation(
+ id=location['id'],
+ name=location['country_code'],
+ country=location['location'],
+ driver=self.connection.driver
+ )
+
+ def _to_nodes(self, servers):
+ return [self._to_node(
+ server) for server in servers]
+
+ def _to_node(self, server):
+ extra = {}
+ extra["datacenter"] = server['datacenter']
+
+ if 'description' in server:
+ extra['description'] = server['description']
+ if 'status' in server:
+ extra["status"] = server["status"]
+ if 'image' in server:
+ extra["image"] = server["image"]
+ if 'hardware' in server:
+ extra["hardware"] = server["hardware"]
+ if 'dvd' in server:
+ extra["dvd"] = server["dvd"]
+ if 'snapshot' in server:
+ extra["snapshot"] = server["snapshot"]
+ if 'ips' in server:
+ extra["ips"] = server["ips"]
+ if 'alerts' in server:
+ extra["alerts"] = server["alerts"]
+ if 'monitoring_policy' in server:
+ extra["monitoring_policy"] = server["monitoring_policy"]
+ if 'private_networks' in server:
+ extra["private_networks"] = server["private_networks"]
+
+ ips = []
+
+ if server['ips'] is not None:
+ for ip in server['ips']:
+ ips.append(ip['ip'])
+ state = self.NODE_STATE_MAP.get(
+ server['status']['state'])
+
+ return Node(
+ id=server['id'],
+ state=state,
+ name=server['name'],
+ driver=self.connection.driver,
+ public_ips=ips,
+ private_ips=None,
+ extra=extra
+ )
+
+ def _wait_for_state(self, server_id, state, retries=50):
+ for i in (0, retries):
+ server = self.ex_get_server(server_id)
+
+ if server.extra['status']['state'] == state:
+ return
+ sleep(5)
+
+ if i == retries:
+ raise Exception('Retries count reached')
+
+ pass
+
+ def _list_fixed_instances(self):
+ response = self.connection.request(
+ action='/servers/fixed_instance_sizes',
+ method='GET'
+ )
+
+ return response.object
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/compute/providers.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/providers.py b/libcloud/compute/providers.py
index 2d5127e..df983e9 100644
--- a/libcloud/compute/providers.py
+++ b/libcloud/compute/providers.py
@@ -143,6 +143,8 @@ DRIVERS = {
('libcloud.compute.drivers.ecs', 'ECSDriver'),
Provider.CLOUDSCALE:
('libcloud.compute.drivers.cloudscale', 'CloudscaleNodeDriver'),
+ Provider.ONEANDONE:
+ ('libcloud.compute.drivers.oneandone', 'OneAndOneNodeDriver'),
}
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/compute/types.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/types.py b/libcloud/compute/types.py
index 646725d..d57cc91 100644
--- a/libcloud/compute/types.py
+++ b/libcloud/compute/types.py
@@ -144,6 +144,7 @@ class Provider(Type):
NIMBUS = 'nimbus'
NINEFOLD = 'ninefold'
NTTA = 'ntta'
+ ONEANDONE = 'oneandone'
OPENNEBULA = 'opennebula'
OPENSTACK = 'openstack'
OPSOURCE = 'opsource'
[03/11] libcloud git commit: 1&1 Compute Driver
Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/auth_error.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/auth_error.json b/libcloud/test/compute/fixtures/oneandone/auth_error.json
new file mode 100644
index 0000000..2049116
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/auth_error.json
@@ -0,0 +1,5 @@
+{
+ "type":"UNAUTHORIZED",
+ "message":"The Token you are using is not valid",
+ "errors":null
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/create_node.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/create_node.json b/libcloud/test/compute/fixtures/oneandone/create_node.json
new file mode 100644
index 0000000..8b53cdd
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/create_node.json
@@ -0,0 +1,43 @@
+{
+ "id": "E7D36EC025C73796035BF4F171379025",
+ "name": "Docs Content Test Server: CentOS 7-1",
+ "description": "My server description",
+ "status": {
+ "state": "POWERED_ON",
+ "percent": null
+ },
+ "datacenter": {
+ "id": "908DC2072407C94C8054610AD5A53B8C",
+ "country_code": "US",
+ "location": "United States of America"
+ },
+ "creation_date": "2016-05-05T17:39:50+00:00",
+ "image": {
+ "id": "B5F778B85C041347BCDCFC3172AB3F3C",
+ "name": "centos7-64std"
+ },
+ "hardware": {
+ "fixed_instance_size_id": "65929629F35BBFBA63022008F773F3EB",
+ "vcore": 1,
+ "cores_per_processor": 1,
+ "ram": 1,
+ "hdds": [
+ {
+ "id": "CDB278D95A92CB4C379A9CAAD6759F02",
+ "size": 40,
+ "is_main": true
+ }
+ ]
+ },
+ "ips": [
+ {
+ "id": "FDBE99EDD57F8596CBF71B6B64BD0A92",
+ "ip": "62.151.179.99"
+ }
+ ],
+ "dvd": null,
+ "snapshot": null,
+ "alerts": [],
+ "monitoring_policy": null,
+ "private_networks": null
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/describe_firewall_policy.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/describe_firewall_policy.json b/libcloud/test/compute/fixtures/oneandone/describe_firewall_policy.json
new file mode 100644
index 0000000..68d1960
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/describe_firewall_policy.json
@@ -0,0 +1,26 @@
+{
+ "id": "83522FC7DA9172F229E5352C587075BA",
+ "name": "My firewall policy test",
+ "description": "My firewall policy description",
+ "state": "CONFIGURING",
+ "creation_date": "2015-04-29T10:43:11+00:00",
+ "default": 0,
+ "rules": [
+ {
+ "id": "DA5CC179ED00079AE7DE595F0073D86E",
+ "protocol": "TCP",
+ "port_from": 80,
+ "port_to": 80,
+ "source": "0.0.0.0"
+ },
+ {
+ "id": "0766EC674A0CD9D4EC0FA0B07978A649",
+ "protocol": "TCP",
+ "port_from": 443,
+ "port_to": 443,
+ "source": "0.0.0.0"
+ }
+ ],
+ "server_ips": [],
+ "cloudpanel_id": "FW99AA4_7"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/describe_id_firewall_policy.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/describe_id_firewall_policy.json b/libcloud/test/compute/fixtures/oneandone/describe_id_firewall_policy.json
new file mode 100644
index 0000000..19f1cf1
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/describe_id_firewall_policy.json
@@ -0,0 +1,4 @@
+{
+ "id": "3C4F21EDFEEDD6ABB728EA5CE684E1AF",
+ "name": "Windows"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/describe_server.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/describe_server.json b/libcloud/test/compute/fixtures/oneandone/describe_server.json
new file mode 100644
index 0000000..4b1f99f
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/describe_server.json
@@ -0,0 +1,49 @@
+{
+ "id": "srv_1",
+ "cloudpanel_id": "958FA92",
+ "name": "My Server 1",
+ "description": "",
+ "datacenter": {
+ "id": "D0F6D8C8ED29D3036F94C27BBB7BAD36",
+ "location": "USA",
+ "country_code": "US"
+ },
+ "creation_date": "2015-05-04T06:32:15+00:00",
+ "first_password": "Fg52K21nz8",
+ "status": {
+ "state": "POWERED_OFF",
+ "percent": null
+ },
+ "hardware": {
+ "fixed_instance_size_id": 0,
+ "vcore": 1,
+ "cores_per_processor": 1,
+ "ram": 2,
+ "hdds": [
+ {
+ "id": "8C626C1A7005D0D1F527143C413D461E",
+ "size": 40,
+ "is_main": true
+ }
+ ]
+ },
+ "image": {
+ "id": "3C3B80327CBBD7F0023F793F666C24D0",
+ "name": "w2008r2datacenter64std"
+ },
+ "dvd": null,
+ "snapshot": null,
+ "ips": [
+ {
+ "id": "8D135204687B9CF9E79E7A93C096E336",
+ "ip": "10.4.140.213",
+ "type": "IPV4",
+ "reverse_dns": null,
+ "firewall_policy": null,
+ "load_balancers": []
+ }
+ ],
+ "alerts": [],
+ "monitoring_policy": null,
+ "private_networks": null
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/describe_shared_stoage.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/describe_shared_stoage.json b/libcloud/test/compute/fixtures/oneandone/describe_shared_stoage.json
new file mode 100644
index 0000000..bd3dcc2
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/describe_shared_stoage.json
@@ -0,0 +1,29 @@
+{
+ "id": "6AD2F180B7B666539EF75A02FE227084",
+ "size": 200,
+ "state": "ACTIVE",
+ "description": "My shared storage description",
+ "datacenter": {
+ "id": "D0F6D8C8ED29D3036F94C27BBB7BAD36",
+ "location": "USA",
+ "country_code": "US"
+ },
+ "cloudpanel_id": "vid35780",
+ "size_used": "0.00",
+ "cifs_path": "\\vid50995.nas1.lan\vid50995",
+ "nfs_path": "vid50995.nas1.lan/:vid50995",
+ "name": "My shared storage test rename",
+ "creation_date": "2015-05-06T08:33:25+00:00",
+ "servers": [
+ {
+ "id": "638ED28205B1AFD7ADEF569C725DD85F",
+ "name": "Mi servidor 1",
+ "rights": "RW"
+ },
+ {
+ "id": "39AA65F5D5B02FA02D58173094EBAF95",
+ "name": "My Server remame",
+ "rights": "R"
+ }
+ ]
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/ex_list_datacenters.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/ex_list_datacenters.json b/libcloud/test/compute/fixtures/oneandone/ex_list_datacenters.json
new file mode 100644
index 0000000..8fc322a
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/ex_list_datacenters.json
@@ -0,0 +1,26 @@
+[
+ {
+ "id":"81DEF28500FBC2A973FC0C620DF5B721",
+ "location":"Spain",
+ "country_code":"ES",
+ "default":0
+ },
+ {
+ "id":"908DC2072407C94C8054610AD5A53B8C",
+ "location":"United States of America",
+ "country_code":"US",
+ "default":1
+ },
+ {
+ "id":"4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "location":"Germany",
+ "country_code":"DE",
+ "default":0
+ },
+ {
+ "id":"5091F6D8CBFEF9C26ACE957C652D5D49",
+ "location":"United Kingdom of Great Britain and Northern Ireland",
+ "country_code":"GB",
+ "default":0
+ }
+]
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/fixed_instance_sizes.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/fixed_instance_sizes.json b/libcloud/test/compute/fixtures/oneandone/fixed_instance_sizes.json
new file mode 100644
index 0000000..a9605dd
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/fixed_instance_sizes.json
@@ -0,0 +1,70 @@
+[
+ {
+ "name": "M",
+ "id": "8C626C1A7005D0D1F527143C413D461E",
+ "hardware": {
+ "vcore": 1,
+ "cores_per_processor": 1,
+ "ram": 1,
+ "unit": "GB",
+ "hdds": [
+ {
+ "size": 40,
+ "unit": "GB",
+ "is_main": true
+ }
+ ]
+ }
+ },
+ {
+ "name": "L",
+ "id": "8C626C1A7005D0D1F527143C413D461F",
+ "hardware": {
+ "vcore": 2,
+ "cores_per_processor": 1,
+ "ram": 2,
+ "unit": "GB",
+ "hdds": [
+ {
+ "size": 80,
+ "unit": "GiB",
+ "is_main": true
+ }
+ ]
+ }
+ },
+ {
+ "name": "XL",
+ "id": "8C626C1A7005D0D1F527143C413D4620",
+ "hardware": {
+ "vcore": 2,
+ "cores_per_processor": 1,
+ "ram": 4,
+ "unit": "GB",
+ "hdds": [
+ {
+ "size": 120,
+ "unit": "GB",
+ "is_main": true
+ }
+ ]
+ }
+ },
+ {
+ "name": "XXL",
+ "id": "8C626C1A7005D0D1F527143C413D4621",
+ "hardware": {
+ "vcore": 4,
+ "cores_per_processor": 1,
+ "ram": 8,
+ "unit": "GB",
+ "hdds": [
+ {
+ "size": 160,
+ "unit": "GiB",
+ "is_main": true
+ }
+ ]
+ }
+ }
+]
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/get_image.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/get_image.json b/libcloud/test/compute/fixtures/oneandone/get_image.json
new file mode 100644
index 0000000..cb94129
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/get_image.json
@@ -0,0 +1,24 @@
+{
+ "id": "6E1F2C70CCD3EE44ED194F4FFC47C4C9",
+ "name": "w2012r2datacenter64min",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2012R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Windows 2012 Standard"
+ }
+ ],
+ "version": null,
+ "categories": []
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/get_server_image.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/get_server_image.json b/libcloud/test/compute/fixtures/oneandone/get_server_image.json
new file mode 100644
index 0000000..f1ad1ee
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/get_server_image.json
@@ -0,0 +1,4 @@
+{
+ "id": "76EBF29C1250167C8754B2B3D1C05F68",
+ "name": "centos7-64std"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/list_firewall_policies.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/list_firewall_policies.json b/libcloud/test/compute/fixtures/oneandone/list_firewall_policies.json
new file mode 100644
index 0000000..1889436
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/list_firewall_policies.json
@@ -0,0 +1,54 @@
+[
+ {
+ "id": "83522FC7DA9172F229E5352C587075BA",
+ "name": "My firewall policy test",
+ "description": "My firewall policy description",
+ "state": "CONFIGURING",
+ "creation_date": "2015-04-29T10:43:11+00:00",
+ "default": 0,
+ "rules": [
+ {
+ "id": "DA5CC179ED00079AE7DE595F0073D86E",
+ "protocol": "TCP",
+ "port_from": 80,
+ "port_to": 80,
+ "source": "0.0.0.0"
+ },
+ {
+ "id": "0766EC674A0CD9D4EC0FA0B07978A649",
+ "protocol": "TCP",
+ "port_from": 443,
+ "port_to": 443,
+ "source": "0.0.0.0"
+ }
+ ],
+ "server_ips": [],
+ "cloudpanel_id": "FW99AA4_7"
+ },
+ {
+ "id": "83522FC7DA9172F229E5352C587075B9",
+ "name": "My firewall policy test 2",
+ "description": "My firewall policy description",
+ "state": "CONFIGURING",
+ "creation_date": "2015-04-29T10:43:11+00:00",
+ "default": 0,
+ "rules": [
+ {
+ "id": "DA5CC179ED00079AE7DE595F0073D86F",
+ "protocol": "TCP",
+ "port_from": 80,
+ "port_to": 80,
+ "source": "0.0.0.0"
+ },
+ {
+ "id": "0766EC674A0CD9D4EC0FA0B07978A64A",
+ "protocol": "TCP",
+ "port_from": 443,
+ "port_to": 443,
+ "source": "0.0.0.0"
+ }
+ ],
+ "server_ips": [],
+ "cloudpanel_id": "FW99AA4_7"
+ }
+]
\ No newline at end of file
[10/11] libcloud git commit: Merge branch 'github-1029' into trunk
Closes #1029
Posted by an...@apache.org.
Merge branch 'github-1029' into trunk
Closes #1029
Signed off by: Anthony Shaw
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/6bb17e87
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/6bb17e87
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/6bb17e87
Branch: refs/heads/trunk
Commit: 6bb17e87a066de42797969738f07fadaef2db92b
Parents: 30715a4 738a1d1
Author: Anthony Shaw <an...@apache.org>
Authored: Tue Apr 11 10:22:27 2017 +1000
Committer: Anthony Shaw <an...@apache.org>
Committed: Tue Apr 11 10:22:27 2017 +1000
----------------------------------------------------------------------
docs/compute/drivers/oneandone.rst | 295 +
.../compute/oneandone/create_firewall_policy.py | 33 +
.../compute/oneandone/create_load_balancer.py | 36 +
.../oneandone/create_monitoring_policy.py | 90 +
docs/examples/compute/oneandone/create_node.py | 36 +
.../compute/oneandone/create_private_network.py | 14 +
.../compute/oneandone/create_public_ip.py | 14 +
.../compute/oneandone/create_shared_storage.py | 21 +
.../compute/oneandone/instantiate_driver.py | 9 +
libcloud/compute/drivers/oneandone.py | 2260 +++
libcloud/compute/providers.py | 2 +
libcloud/compute/types.py | 1 +
.../compute/fixtures/oneandone/auth_error.json | 5 +
.../compute/fixtures/oneandone/create_node.json | 43 +
.../oneandone/describe_firewall_policy.json | 26 +
.../oneandone/describe_id_firewall_policy.json | 4 +
.../fixtures/oneandone/describe_server.json | 49 +
.../oneandone/describe_shared_stoage.json | 29 +
.../fixtures/oneandone/ex_list_datacenters.json | 26 +
.../oneandone/fixed_instance_sizes.json | 70 +
.../compute/fixtures/oneandone/get_image.json | 24 +
.../fixtures/oneandone/get_server_image.json | 4 +
.../oneandone/list_firewall_policies.json | 54 +
.../compute/fixtures/oneandone/list_images.json | 17941 +++++++++++++++++
.../fixtures/oneandone/list_load_balancer.json | 78 +
.../oneandone/list_monitoring_policies.json | 152 +
.../fixtures/oneandone/list_public_ips.json | 59 +
.../fixtures/oneandone/list_servers.json | 197 +
.../oneandone/list_shared_storages.json | 64 +
.../fixtures/oneandone/load_balancer.json | 38 +
.../fixtures/oneandone/load_balancer_rule.json | 7 +
.../fixtures/oneandone/load_balancer_rules.json | 16 +
.../oneandone/load_balancer_server_ip.json | 5 +
.../oneandone/load_balancer_server_ips.json | 6 +
.../fixtures/oneandone/monitoring_policy.json | 73 +
.../oneandone/monitoring_policy_port.json | 7 +
.../oneandone/monitoring_policy_ports.json | 16 +
.../oneandone/monitoring_policy_process.json | 6 +
.../oneandone/monitoring_policy_processes.json | 14 +
.../oneandone/monitoring_policy_servers.json | 10 +
.../compute/fixtures/oneandone/public_ip.json | 15 +
.../fixtures/oneandone/server_hardware.json | 13 +
.../compute/fixtures/oneandone/server_ip.json | 8 +
.../compute/fixtures/oneandone/server_ips.json | 10 +
.../fixtures/oneandone/shared_storage.json | 24 +
.../test/compute/fixtures/oneandone/ttt.json | 73 +
libcloud/test/compute/test_oneandone.py | 1281 ++
libcloud/test/secrets.py-dist | 1 +
48 files changed, 23259 insertions(+)
----------------------------------------------------------------------
[05/11] libcloud git commit: Merge remote-tracking branch
'upstream/trunk' into oneandone
Posted by an...@apache.org.
Merge remote-tracking branch 'upstream/trunk' into oneandone
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/e3dbb377
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/e3dbb377
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/e3dbb377
Branch: refs/heads/trunk
Commit: e3dbb3775d74c1d743195d723d38128cc0e328cc
Parents: ff028ae a5731ab
Author: jasminSPC <ja...@stackpointcloud.com>
Authored: Tue Apr 11 00:20:45 2017 +0200
Committer: jasminSPC <ja...@stackpointcloud.com>
Committed: Tue Apr 11 00:20:45 2017 +0200
----------------------------------------------------------------------
CHANGES.rst | 227 ++++-
contrib/scrape-ec2-prices.py | 19 +-
demos/secrets.py-dist | 5 +-
doap_libcloud.rdf | 7 +
docs/_static/images/provider_logos/outscale.jpg | Bin 0 -> 17361 bytes
docs/_static/images/provider_logos/outscale.png | Bin 8437 -> 0 bytes
.../_supported_methods_image_management.rst | 2 +-
.../_supported_methods_key_pair_management.rst | 2 +-
docs/compute/_supported_methods_main.rst | 2 +-
docs/compute/_supported_providers.rst | 120 +--
docs/compute/drivers/cloudscale.rst | 4 +-
docs/compute/drivers/dimensiondata.rst | 22 +
docs/compute/drivers/outscale_inc.rst | 11 +-
docs/compute/drivers/outscale_sas.rst | 21 +-
docs/dns/_supported_methods.rst | 2 +
docs/dns/_supported_providers.rst | 2 +
docs/dns/drivers/onapp.rst | 23 +
.../Nodes_Create_mcp2_Uncustomised.py | 57 ++
docs/examples/compute/onapp/functionality.py | 39 +-
docs/examples/dns/onapp/instantiate_driver.py | 9 +
docs/loadbalancer/_supported_providers.rst | 2 +-
docs/other/changes_in_2_0.rst | 18 +-
docs/storage/_supported_methods_cdn.rst | 16 +-
docs/storage/_supported_methods_main.rst | 16 +-
docs/storage/_supported_providers.rst | 16 +-
integration/README.rst | 20 +
integration/__init__.py | 0
integration/__main__.py | 41 +
integration/api/__init__.py | 0
integration/api/__main__.py | 21 +
integration/api/data.py | 37 +
integration/api/routes.py | 33 +
integration/api/util.py | 33 +
integration/config.py | 21 +
integration/driver/__init__.py | 0
integration/driver/test.py | 76 ++
integration/requirements.txt | 1 +
libcloud/__init__.py | 2 +-
libcloud/common/aws.py | 4 +-
libcloud/common/azure_arm.py | 2 +-
libcloud/common/base.py | 32 +-
libcloud/common/linode.py | 25 +-
libcloud/common/ovh.py | 2 +-
libcloud/compute/drivers/azure_arm.py | 7 +-
libcloud/compute/drivers/cloudscale.py | 8 +-
libcloud/compute/drivers/digitalocean.py | 3 +-
libcloud/compute/drivers/dimensiondata.py | 1 -
libcloud/compute/drivers/ec2.py | 931 ++++++++++++++++---
libcloud/compute/drivers/ecs.py | 59 +-
libcloud/compute/drivers/gce.py | 94 +-
libcloud/compute/drivers/linode.py | 50 +-
libcloud/compute/drivers/onapp.py | 107 ++-
libcloud/compute/types.py | 4 +
libcloud/data/pricing.json | 630 ++++++++++---
libcloud/dns/drivers/onapp.py | 332 +++++++
libcloud/dns/drivers/route53.py | 17 +-
libcloud/dns/providers.py | 2 +
libcloud/dns/types.py | 1 +
libcloud/http.py | 299 ++++++
libcloud/httplib_ssl.py | 273 ------
libcloud/security.py | 2 +-
libcloud/storage/drivers/s3.py | 424 +++++++--
libcloud/storage/providers.py | 12 +
libcloud/storage/types.py | 6 +
.../2.4/deploy_customised_server.xml | 7 +
.../compute/fixtures/ec2/allocate_address.xml | 2 +-
.../fixtures/ec2/allocate_vpc_address.xml | 2 +-
.../compute/fixtures/ec2/associate_address.xml | 2 +-
.../fixtures/ec2/associate_vpc_address.xml | 2 +-
.../fixtures/ec2/attach_internet_gateway.xml | 2 +-
.../fixtures/ec2/attach_network_interface.xml | 2 +-
.../test/compute/fixtures/ec2/attach_volume.xml | 2 +-
.../ec2/authorize_security_group_egress.xml | 2 +-
.../ec2/authorize_security_group_ingress.xml | 2 +-
.../test/compute/fixtures/ec2/copy_image.xml | 2 +-
.../test/compute/fixtures/ec2/create_image.xml | 2 +-
.../fixtures/ec2/create_internet_gateway.xml | 2 +-
.../compute/fixtures/ec2/create_key_pair.xml | 2 +-
.../fixtures/ec2/create_network_interface.xml | 2 +-
.../fixtures/ec2/create_placement_groups.xml | 2 +-
.../fixtures/ec2/create_security_group.xml | 2 +-
.../compute/fixtures/ec2/create_snapshot.xml | 2 +-
.../test/compute/fixtures/ec2/create_subnet.xml | 2 +-
.../test/compute/fixtures/ec2/create_tags.xml | 2 +-
.../test/compute/fixtures/ec2/create_volume.xml | 2 +-
.../test/compute/fixtures/ec2/create_vpc.xml | 2 +-
.../fixtures/ec2/delete_internet_gateway.xml | 2 +-
.../compute/fixtures/ec2/delete_key_pair.xml | 2 +-
.../fixtures/ec2/delete_network_interface.xml | 2 +-
.../fixtures/ec2/delete_placement_groups.xml | 2 +-
.../fixtures/ec2/delete_security_group.xml | 2 +-
.../compute/fixtures/ec2/delete_snapshot.xml | 2 +-
.../test/compute/fixtures/ec2/delete_subnet.xml | 2 +-
.../test/compute/fixtures/ec2/delete_tags.xml | 2 +-
.../test/compute/fixtures/ec2/delete_volume.xml | 2 +-
.../test/compute/fixtures/ec2/delete_vpc.xml | 2 +-
.../compute/fixtures/ec2/deregister_image.xml | 2 +-
.../ec2/describe_account_attributes.xml | 2 +-
.../compute/fixtures/ec2/describe_addresses.xml | 2 +-
.../fixtures/ec2/describe_addresses_all.xml | 2 +-
.../fixtures/ec2/describe_addresses_multi.xml | 2 +-
.../fixtures/ec2/describe_addresses_single.xml | 2 +-
.../ec2/describe_availability_zones.xml | 2 +-
.../compute/fixtures/ec2/describe_images.xml | 14 +-
.../ec2/describe_images_ex_imageids.xml | 9 +-
.../ec2/describe_import_snapshot_tasks.xml | 18 +
.../describe_import_snapshot_tasks_active.xml | 17 +
.../compute/fixtures/ec2/describe_instances.xml | 2 +-
.../fixtures/ec2/describe_internet_gateways.xml | 2 +-
.../compute/fixtures/ec2/describe_key_pairs.xml | 2 +-
.../ec2/describe_network_interfaces.xml | 2 +-
.../fixtures/ec2/describe_placement_groups.xml | 2 +-
.../ec2/describe_reserved_instances.xml | 2 +-
.../fixtures/ec2/describe_security_groups.xml | 2 +-
.../compute/fixtures/ec2/describe_snapshots.xml | 2 +-
.../compute/fixtures/ec2/describe_subnets.xml | 2 +-
.../test/compute/fixtures/ec2/describe_tags.xml | 2 +-
.../compute/fixtures/ec2/describe_volumes.xml | 2 +-
.../test/compute/fixtures/ec2/describe_vpcs.xml | 2 +-
.../fixtures/ec2/detach_internet_gateway.xml | 2 +-
.../fixtures/ec2/detach_network_interface.xml | 2 +-
.../test/compute/fixtures/ec2/detach_volume.xml | 2 +-
.../fixtures/ec2/disassociate_address.xml | 2 +-
.../compute/fixtures/ec2/get_console_output.xml | 2 +-
.../compute/fixtures/ec2/import_key_pair.xml | 2 +-
.../compute/fixtures/ec2/import_snapshot.xml | 16 +
.../fixtures/ec2/modify_image_attribute.xml | 2 +-
.../fixtures/ec2/modify_instance_attribute.xml | 2 +-
.../fixtures/ec2/modify_snapshot_attribute.xml | 4 +
.../compute/fixtures/ec2/reboot_instances.xml | 2 +-
.../compute/fixtures/ec2/register_image.xml | 2 +-
.../compute/fixtures/ec2/release_address.xml | 2 +-
.../ec2/revoke_security_group_egress.xml | 2 +-
.../ec2/revoke_security_group_ingress.xml | 2 +-
.../test/compute/fixtures/ec2/run_instances.xml | 2 +-
.../fixtures/ec2/run_instances_iam_profile.xml | 2 +-
.../compute/fixtures/ec2/run_instances_idem.xml | 2 +-
...instances_with_subnet_and_security_group.xml | 2 +-
.../compute/fixtures/ec2/start_instances.xml | 2 +-
.../compute/fixtures/ec2/stop_instances.xml | 2 +-
.../fixtures/ec2/terminate_instances.xml | 2 +-
.../fixtures/ecs/join_security_group_by_id.xml | 4 +
.../fixtures/ecs/leave_security_group_by_id.xml | 4 +
...entral1_subnetworks_cf_972cf02e6ad49112.json | 1 +
.../compute/fixtures/onapp/get_key_pair.json | 9 +
.../compute/fixtures/onapp/import_key_pair.json | 9 +
.../compute/fixtures/onapp/list_images.json | 47 +
.../compute/fixtures/onapp/list_key_pairs.json | 20 +
.../test/compute/fixtures/onapp/profile.json | 12 +
.../test/compute/test_dimensiondata_v2_4.py | 49 +
libcloud/test/compute/test_ec2.py | 77 +-
libcloud/test/compute/test_ecs.py | 20 +
libcloud/test/compute/test_onapp.py | 61 ++
.../test/dns/fixtures/onapp/create_record.json | 9 +
.../test/dns/fixtures/onapp/create_zone.json | 10 +
.../dns/fixtures/onapp/dns_zone_not_found.json | 5 +
.../test/dns/fixtures/onapp/get_record.json | 9 +
.../fixtures/onapp/get_record_after_update.json | 9 +
libcloud/test/dns/fixtures/onapp/get_zone.json | 10 +
.../test/dns/fixtures/onapp/list_records.json | 65 ++
.../test/dns/fixtures/onapp/list_zones.json | 22 +
libcloud/test/dns/test_onapp.py | 223 +++++
libcloud/test/secrets.py-dist | 1 +
libcloud/test/storage/test_s3.py | 54 +-
libcloud/test/test_connection.py | 19 +-
libcloud/test/test_http.py | 87 ++
libcloud/test/test_httplib_ssl.py | 87 --
libcloud/test/test_logging_connection.py | 18 +-
libcloud/test/test_response_classes.py | 2 +-
libcloud/utils/compression.py | 42 -
libcloud/utils/loggingconnection.py | 7 -
tox.ini | 9 +-
172 files changed, 4409 insertions(+), 1071 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/e3dbb377/libcloud/common/base.py
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/e3dbb377/libcloud/compute/types.py
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/e3dbb377/libcloud/test/secrets.py-dist
----------------------------------------------------------------------
[06/11] libcloud git commit: Addressing PR remarks
Posted by an...@apache.org.
Addressing PR remarks
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/0fd856f5
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/0fd856f5
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/0fd856f5
Branch: refs/heads/trunk
Commit: 0fd856f58ac33196847596d30f6c8b34e3e9e285
Parents: e3dbb37
Author: jasminSPC <ja...@stackpointcloud.com>
Authored: Tue Apr 11 01:04:44 2017 +0200
Committer: jasminSPC <ja...@stackpointcloud.com>
Committed: Tue Apr 11 01:04:44 2017 +0200
----------------------------------------------------------------------
libcloud/common/base.py | 1 -
libcloud/compute/providers.py | 2 +-
2 files changed, 1 insertion(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/0fd856f5/libcloud/common/base.py
----------------------------------------------------------------------
diff --git a/libcloud/common/base.py b/libcloud/common/base.py
index f48bb15..9c5731e 100644
--- a/libcloud/common/base.py
+++ b/libcloud/common/base.py
@@ -486,7 +486,6 @@ class Connection(object):
def request(self, action, params=None, data=None, headers=None,
method='GET', raw=False, stream=False):
-
"""
Request a given `action`.
http://git-wip-us.apache.org/repos/asf/libcloud/blob/0fd856f5/libcloud/compute/providers.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/providers.py b/libcloud/compute/providers.py
index df983e9..a1c4868 100644
--- a/libcloud/compute/providers.py
+++ b/libcloud/compute/providers.py
@@ -144,7 +144,7 @@ DRIVERS = {
Provider.CLOUDSCALE:
('libcloud.compute.drivers.cloudscale', 'CloudscaleNodeDriver'),
Provider.ONEANDONE:
- ('libcloud.compute.drivers.oneandone', 'OneAndOneNodeDriver'),
+ ('libcloud.compute.drivers.oneandone', 'OneAndOneNodeDriver'),
}
[11/11] libcloud git commit: changes for #1029
Posted by an...@apache.org.
changes for #1029
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/bcdf8b59
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/bcdf8b59
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/bcdf8b59
Branch: refs/heads/trunk
Commit: bcdf8b59445162a2a22046947caab853d2abfb69
Parents: 6bb17e8
Author: Anthony Shaw <an...@apache.org>
Authored: Tue Apr 11 10:23:45 2017 +1000
Committer: Anthony Shaw <an...@apache.org>
Committed: Tue Apr 11 10:23:45 2017 +1000
----------------------------------------------------------------------
CHANGES.rst | 4 ++++
1 file changed, 4 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/bcdf8b59/CHANGES.rst
----------------------------------------------------------------------
diff --git a/CHANGES.rst b/CHANGES.rst
index 4ff0075..69ed853 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -14,6 +14,10 @@ Common
Compute
~~~~~~~
+- Add 1&1 compute driver
+ [LIBCLOUD-911] [GITHUB-1029]
+ (Jasmin Gacic)
+
- Fix Azure ARM driver condition for ex_list_publishers where location is specified
[GITHUB-1030]
(Joseph Hall)
[08/11] libcloud git commit: Test fix
Posted by an...@apache.org.
Test fix
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/38d40fe3
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/38d40fe3
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/38d40fe3
Branch: refs/heads/trunk
Commit: 38d40fe376e7ab5e1d9355b5af46a013233ed834
Parents: 560f0e4
Author: jasminSPC <ja...@stackpointcloud.com>
Authored: Tue Apr 11 01:59:02 2017 +0200
Committer: jasminSPC <ja...@stackpointcloud.com>
Committed: Tue Apr 11 01:59:02 2017 +0200
----------------------------------------------------------------------
libcloud/compute/drivers/oneandone.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/38d40fe3/libcloud/compute/drivers/oneandone.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/oneandone.py b/libcloud/compute/drivers/oneandone.py
index afe356e..2a5d1e4 100644
--- a/libcloud/compute/drivers/oneandone.py
+++ b/libcloud/compute/drivers/oneandone.py
@@ -843,7 +843,7 @@ class OneAndOneNodeDriver(NodeDriver):
return response.object
def ex_list_firewall_policies(self):
- '""
+ """"
List firewall policies
:return: 'dict'
"""
[02/11] libcloud git commit: 1&1 Compute Driver
Posted by an...@apache.org.
http://git-wip-us.apache.org/repos/asf/libcloud/blob/ff028ae2/libcloud/test/compute/fixtures/oneandone/list_images.json
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/oneandone/list_images.json b/libcloud/test/compute/fixtures/oneandone/list_images.json
new file mode 100644
index 0000000..86bc86e
--- /dev/null
+++ b/libcloud/test/compute/fixtures/oneandone/list_images.json
@@ -0,0 +1,17941 @@
+[
+ {
+ "id": "6E1F2C70CCD3EE44ED194F4FFC47C4C9",
+ "name": "w2012r2datacenter64min",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2012R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Windows 2012 Standard"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "B77E19E062D5818532EFF11C747BD104",
+ "name": "w2012r2datacenter64std",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2012R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Windows 2012 Standard"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "7C5FA1D21B98DE39D7516333AAB7DA54",
+ "name": "w2012r2datacenter64std+SQL2012express",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2012R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Windows 2012 Standard"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "D2127B1C773877A693D718C78181D430",
+ "name": "w2012r2datacenter64std+SQL2012web",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2012R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Licencia SQL Server 2012 Web Edition"
+ },
+ {
+ "name": "Windows 2012 Standard"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "EB2C91E2DC1BA405C5C648ED9B9A7118",
+ "name": "w2012r2datacenter64std+SQL2012std",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2012R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Licencia SQL Server 2012 Standard Edition"
+ },
+ {
+ "name": "Windows 2012 Standard"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "71653B14F25069950DD34AF6FE1AFEDD",
+ "name": "Ubuntu 14.04",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Ubuntu14.04",
+ "os_version": "Ubuntu",
+ "os_architecture": 64,
+ "os_image_type": "ISO_OS",
+ "type": "ISO",
+ "min_hdd_size": null,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "C14988A9ABC34EA64CD5AAC0D33ABCAF",
+ "name": "ubuntu1404-64min",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Ubuntu14.04",
+ "os_version": "Ubuntu",
+ "os_architecture": 64,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "72A90ECC29F718404AC3093A3D78327C",
+ "name": "ubuntu1404-64std",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Ubuntu14.04",
+ "os_version": "Ubuntu",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "8E3BAA98E3DFD37857810E0288DD8FBA",
+ "name": "centos6-32min",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos6",
+ "os_version": "Centos",
+ "os_architecture": 32,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "E949B8557A0D95E3425088C496FD93F8",
+ "name": "centos6-32std",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos6",
+ "os_version": "Centos",
+ "os_architecture": 32,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "650D003D3FC8A8FE554330E869B39FC0",
+ "name": "centos6-64min",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos6",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "C598EAD5691CDADD1501A2AF29A2E91C",
+ "name": "centos6-64std",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos6",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "DCA5686F1FC5E8A6E0B32E5A68BBB499",
+ "name": "w2008r2datacenter64min",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2008R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Windows 2012 Datacenter"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "E156EA0B6CE014FEAB8BEB8CC9E3BB77",
+ "name": "w2008r2datacenter64std",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2008R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Windows 2012 Datacenter"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "3A3752FFAEA4C4F53EE701D29172E332",
+ "name": "w2008r2datacenter64std+SQL2012express",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2008R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Windows 2012 Datacenter"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "295D0663A4868F920332DCDC15F395A7",
+ "name": "w2008r2datacenter64std+SQL2012web",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2008R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Licencia SQL Server 2012 Web Edition"
+ },
+ {
+ "name": "Windows 2012 Datacenter"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "00A1CE098B4C6121A77B23262EAD4D76",
+ "name": "w2008r2datacenter64std+SQL2012std",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2008R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Licencia SQL Server 2012 Standard Edition"
+ },
+ {
+ "name": "Windows 2012 Datacenter"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "E4B7589997B1147CCC5764A204F49E94",
+ "name": "Red Hat 6",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "RedHat6",
+ "os_version": "RedHat",
+ "os_architecture": 64,
+ "os_image_type": "ISO_OS",
+ "type": "ISO",
+ "min_hdd_size": null,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "F89443811E6952AF6B15E87E647D781A",
+ "name": "w2012r2datacenter64min+SQL2012express",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2012R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Windows 2012 Standard"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "65F9A55A55A558F977CF55BDC70AF60E",
+ "name": "w2012r2datacenter64min+SQL2012web",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2012R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Licencia SQL Server 2012 Web Edition"
+ },
+ {
+ "name": "Windows 2012 Standard"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "20C66A769CFA8B98D9EDD509A6458641",
+ "name": "w2012r2datacenter64min+SQL2012std",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2012R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Licencia SQL Server 2012 Standard Edition"
+ },
+ {
+ "name": "Windows 2012 Standard"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "06E189B1C60CB0F46501E49049C43B05",
+ "name": "w2008r2datacenter64min+SQL2012express",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2008R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Windows 2012 Datacenter"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "9717A92E43E2350072A77B00F2DF8CF5",
+ "name": "w2008r2datacenter64min+SQL2012web",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2008R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Licencia SQL Server 2012 Web Edition"
+ },
+ {
+ "name": "Windows 2012 Datacenter"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "79AFC562A2541DD8F904F8CF918B6899",
+ "name": "w2008r2datacenter64min+SQL2012std",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2008R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Licencia SQL Server 2012 Standard Edition"
+ },
+ {
+ "name": "Windows 2012 Datacenter"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "087BB7F082A7DE2817100EAD53A3845D",
+ "name": "centos6-32std+Plesk12unlimited",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos6",
+ "os_version": "Centos",
+ "os_architecture": 32,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [
+ {
+ "name": "Licencia Plesk 10.4 - Ilimitados dominios"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "EC5DCA17E7CF86D968F60C222948C83F",
+ "name": "centos6-64std+Plesk12unlimited",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos6",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [
+ {
+ "name": "Licencia Plesk 10.4 - Ilimitados dominios"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "B5F778B85C041347BCDCFC3172AB3F3C",
+ "name": "centos7-64std",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "7B9067380CB74BBDFE7F473DEEA2AF5C",
+ "name": "centos7-64min",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "9B9A214D50A7EEE8D9E37295DF834F70",
+ "name": "debian7-32min",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Debian7",
+ "os_version": "Debian",
+ "os_architecture": 32,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "0D5A4BCDC5B47A33593239C2553F5ADC",
+ "name": "debian7-32std",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Debian7",
+ "os_version": "Debian",
+ "os_architecture": 32,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "CF8318BDB7EFE797C9C769272AAA5F5C",
+ "name": "debian7-64min",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Debian7",
+ "os_version": "Debian",
+ "os_architecture": 64,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "EBA74A8ED3760AE376F1E26AC6744B3F",
+ "name": "debian7-64std",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Debian7",
+ "os_version": "Debian",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "07324CD1A116A7D66B0F56B240F58CD2",
+ "name": "ubuntu1204-32min",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Ubuntu12.04",
+ "os_version": "Ubuntu",
+ "os_architecture": 32,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "D86A31798B9D8EB7DFC28FF377EF7E42",
+ "name": "ubuntu1204-32std",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Ubuntu12.04",
+ "os_version": "Ubuntu",
+ "os_architecture": 32,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "806447A8DC74E7FD56C743877B4A61CD",
+ "name": "ubuntu1204-64min",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Ubuntu12.04",
+ "os_version": "Ubuntu",
+ "os_architecture": 64,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "84E3B902821F911BE6B43FA36ADA8199",
+ "name": "ubuntu1204-64std",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Ubuntu12.04",
+ "os_version": "Ubuntu",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "DBC37D7DF1726331AFC8A2153FC80EF0",
+ "name": "CentOS 7",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": "ISO_OS",
+ "type": "ISO",
+ "min_hdd_size": null,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "61FA286137BD4E113DFEC6EE0BA5BEBD",
+ "name": "FreeBSD 10",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Others",
+ "os": "FreeBSD10",
+ "os_version": "FreeBSD",
+ "os_architecture": 64,
+ "os_image_type": "ISO_OS",
+ "type": "ISO",
+ "min_hdd_size": null,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "31CEEE904708A5354F0D119CA3E1C3D7",
+ "name": "FreeBSD 10",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Others",
+ "os": "FreeBSD10",
+ "os_version": "FreeBSD",
+ "os_architecture": 32,
+ "os_image_type": "ISO_OS",
+ "type": "ISO",
+ "min_hdd_size": null,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "18AE0A62911AD1CC145DF6A4D92BD354",
+ "name": "Red Hat 7",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "RedHat7",
+ "os_version": "RedHat",
+ "os_architecture": 64,
+ "os_image_type": "ISO_OS",
+ "type": "ISO",
+ "min_hdd_size": null,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "9FB167C5495AC815C3A3CBF273123879",
+ "name": "w2012r2datacenter64std+SQL2014express",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2012R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Windows 2012 Standard"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "31433BA1341A3EEED81ACE7DDDFA37BD",
+ "name": "w2012r2datacenter64std+SQL2014web",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2012R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Licencia SQL Server 2014 Web Edition"
+ },
+ {
+ "name": "Windows 2012 Standard"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "1921A315152482071F4B36E4D141EC8A",
+ "name": "w2012r2datacenter64std+SQL2014std",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2012R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Licencia SQL Server 2014 Standard Edition"
+ },
+ {
+ "name": "Windows 2012 Standard"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "1B53FF641F19052859DA26CF799CC9D2",
+ "name": "w2008r2datacenter64std+SQL2014express",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2008R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Windows 2012 Datacenter"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "D5FA67DFD00DB9F4FBFC363374B93306",
+ "name": "w2008r2datacenter64std+SQL2014web",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2008R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Licencia SQL Server 2014 Web Edition"
+ },
+ {
+ "name": "Windows 2012 Datacenter"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "100E5AC8FA0690EBD9AE6937E5587991",
+ "name": "w2008r2datacenter64std+SQL2014std",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2008R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Licencia SQL Server 2014 Standard Edition"
+ },
+ {
+ "name": "Windows 2012 Datacenter"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "8B7DE48FF94B2407B7455B76F608F8CD",
+ "name": "w2012r2datacenter64min+SQL2014express",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2012R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Windows 2012 Standard"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "BCA00B58DD301EBC649FEAC96377E7DC",
+ "name": "w2012r2datacenter64min+SQL2014web",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2012R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Licencia SQL Server 2014 Web Edition"
+ },
+ {
+ "name": "Windows 2012 Standard"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "0398F06DE0FF331539842ADFB96279AB",
+ "name": "w2012r2datacenter64min+SQL2014std",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2012R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Licencia SQL Server 2014 Standard Edition"
+ },
+ {
+ "name": "Windows 2012 Standard"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "F61E08E34CA0B44904A331A83EED6AE2",
+ "name": "w2008r2datacenter64min+SQL2014express",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2008R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Windows 2012 Datacenter"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "729F1DB5BBB2EEC6EBC6651ABB19AE85",
+ "name": "w2008r2datacenter64min+SQL2014web",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2008R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Licencia SQL Server 2014 Web Edition"
+ },
+ {
+ "name": "Windows 2012 Datacenter"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "1EAFCF5E37C3331590AC7E3266ECF12E",
+ "name": "w2008r2datacenter64min+SQL2014std",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2008R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Licencia SQL Server 2014 Standard Edition"
+ },
+ {
+ "name": "Windows 2012 Datacenter"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "0735AA79194B274179A8FADE62208FED",
+ "name": "Solaris 10",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Others",
+ "os": "Solaris10",
+ "os_version": "Solaris",
+ "os_architecture": 32,
+ "os_image_type": "ISO_OS",
+ "type": "ISO",
+ "min_hdd_size": null,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "E8F733BBB99D1313652F5690D87B0E77",
+ "name": "Solaris 10",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Others",
+ "os": "Solaris10",
+ "os_version": "Solaris",
+ "os_architecture": 64,
+ "os_image_type": "ISO_OS",
+ "type": "ISO",
+ "min_hdd_size": null,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "F7E14983198CDC318267A5D0DEA330D8",
+ "name": "centos7-64std+cpanel",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [
+ {
+ "name": "cPanel 11"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "6C902E5899CC6F7ED18595EBEB542EE1",
+ "name": "Docker",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 30,
+ "licenses": [],
+ "version": null,
+ "categories": [
+ "DEVELOPER TOOLS",
+ "INFRASTRUCTURE"
+ ]
+ },
+ {
+ "id": "8ED1E267A9E1367F731B4AE624FDF1C0",
+ "name": "W2012R2DATACENTER64STD+PLESK12.5UNLIMITED",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2012R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Licencia Plesk 10.4 - Ilimitados dominios"
+ },
+ {
+ "name": "Windows 2012 Standard"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "35A31E95A968545236B2584771D3B8CA",
+ "name": "W2012R2DATACENTER64STD+SQL2012EXPRESS+PLESK12.5UNLIMITED",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2012R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Licencia Plesk 10.4 - Ilimitados dominios"
+ },
+ {
+ "name": "Windows 2012 Standard"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "698D35B35E01506574B4DA83A095C444",
+ "name": "W2012R2DATACENTER64STD+SQL2012WEB+PLESK12.5UNLIMITED",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2012R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Licencia Plesk 10.4 - Ilimitados dominios"
+ },
+ {
+ "name": "Licencia SQL Server 2012 Web Edition"
+ },
+ {
+ "name": "Windows 2012 Standard"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "2E79303E264846125F7AD6877AE155B5",
+ "name": "W2012R2DATACENTER64STD+SQL2012STD+PLESK12.5UNLIMITED",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2012R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Licencia Plesk 10.4 - Ilimitados dominios"
+ },
+ {
+ "name": "Licencia SQL Server 2012 Standard Edition"
+ },
+ {
+ "name": "Windows 2012 Standard"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "F38F08898A742CF3046F8F825C9B199A",
+ "name": "UBUNTU1404-64STD+PLESK12.5UNLIMITED",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Ubuntu14.04",
+ "os_version": "Ubuntu",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [
+ {
+ "name": "Licencia Plesk 10.4 - Ilimitados dominios"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "AAC4EF1852B735A52D8D531381B81500",
+ "name": "CENTOS7-64STD+PLESK12.5UNLIMITED",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [
+ {
+ "name": "Licencia Plesk 10.4 - Ilimitados dominios"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "051BC8159D2014F2B2D333E5D9BB671B",
+ "name": "DEBIAN7-32STD+PLESK12.5UNLIMITED",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Debian7",
+ "os_version": "Debian",
+ "os_architecture": 32,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [
+ {
+ "name": "Licencia Plesk 10.4 - Ilimitados dominios"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "D04943D702F82A1FC29B42FD635ACB51",
+ "name": "DEBIAN7-64STD+PLESK12.5UNLIMITED",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Debian7",
+ "os_version": "Debian",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [
+ {
+ "name": "Licencia Plesk 10.4 - Ilimitados dominios"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "E5712C6F4ACFC3BCADFBBA2C0681E629",
+ "name": "UBUNTU1204-32STD+PLESK12.5UNLIMITED",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Ubuntu12.04",
+ "os_version": "Ubuntu",
+ "os_architecture": 32,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [
+ {
+ "name": "Licencia Plesk 10.4 - Ilimitados dominios"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "E935C4BAA226D7179FF3EB753B4F9323",
+ "name": "UBUNTU1204-64STD+PLESK12.5UNLIMITED",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Ubuntu12.04",
+ "os_version": "Ubuntu",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [
+ {
+ "name": "Licencia Plesk 10.4 - Ilimitados dominios"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "A94D4970684581C3CFC135AE80E1FC39",
+ "name": "W2012R2DATACENTER64STD+SQL2014EXPRESS+PLESK12.5UNLIMITED",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2012R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Licencia Plesk 10.4 - Ilimitados dominios"
+ },
+ {
+ "name": "Windows 2012 Standard"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "BD727924A1E53F7D3B9D7B811F339D6B",
+ "name": "W2012R2DATACENTER64STD+SQL2014WEB+PLESK12.5UNLIMITED",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2012R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Licencia Plesk 10.4 - Ilimitados dominios"
+ },
+ {
+ "name": "Licencia SQL Server 2014 Web Edition"
+ },
+ {
+ "name": "Windows 2012 Standard"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "95736E72DD3FFF9A825FF17ABBB96671",
+ "name": "W2012R2DATACENTER64STD+SQL2014STD+PLESK12.5UNLIMITED",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Windows",
+ "os": "Windows2012R2",
+ "os_version": "WindowsDatacenter",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [
+ {
+ "name": "Licencia Plesk 10.4 - Ilimitados dominios"
+ },
+ {
+ "name": "Licencia SQL Server 2014 Standard Edition"
+ },
+ {
+ "name": "Windows 2012 Standard"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "C572494C271ED64142E5FD93E084BBFC",
+ "name": "CentOS 6",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos6",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": "ISO_OS",
+ "type": "ISO",
+ "min_hdd_size": null,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "2D593C41B3EB2BA345AFE806A5BA41A3",
+ "name": "CentOS 6",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos6",
+ "os_version": "Centos",
+ "os_architecture": 32,
+ "os_image_type": "ISO_OS",
+ "type": "ISO",
+ "min_hdd_size": null,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "5EDF485861FB263DDBB7C04867346A6E",
+ "name": "Plesk",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [
+ {
+ "name": "Licencia Plesk 10.4 - Ilimitados dominios"
+ }
+ ],
+ "version": "12.5",
+ "categories": [
+ "DEVELOPER TOOLS",
+ "INFRASTRUCTURE",
+ "POPULAR"
+ ]
+ },
+ {
+ "id": "96D5CEB497043FD54E834DEC4B8FF70A",
+ "name": "cPanel",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [
+ {
+ "name": "cPanel 11"
+ }
+ ],
+ "version": null,
+ "categories": [
+ "DEVELOPER TOOLS",
+ "INFRASTRUCTURE"
+ ]
+ },
+ {
+ "id": "EAB1D06D1B78654A6E391FAC48BAA4B1",
+ "name": "Sharelock",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "0.1.0pre-4-r04",
+ "categories": [
+ "APPLICATION SECURITY",
+ "PASSWORD MANAGEMENT"
+ ]
+ },
+ {
+ "id": "2D012C80C31413503F1E31355CAA0240",
+ "name": "WildFly",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "10.0.0-0",
+ "categories": [
+ "APPLICATION SERVER",
+ "INFRASTRUCTURE"
+ ]
+ },
+ {
+ "id": "CACF27D3256071F13E471FCF5C25FCF7",
+ "name": "SimpleInvoices",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "2013.1.beta.8-3",
+ "categories": [
+ "ACCOUNTING"
+ ]
+ },
+ {
+ "id": "A2302EA99E2A7E894277C4CF124F8951",
+ "name": "PROST",
+ "available_datacenters": [
+ "4EFAD5836CE43ACA502FD5B99BEE44EF"
+ ],
+ "os_family": "Linux",
+ "os": "Ubuntu14.04",
+ "os_version": "Ubuntu",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "MY_IMAGE",
+ "min_hdd_size": 40,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "CA020E48664C63D5DBA879774B80632C",
+ "name": "KNOPPIX_7.6.1_32BITS",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Knoppix 7.6.1",
+ "os_version": "Knoppix",
+ "os_architecture": 32,
+ "os_image_type": "ISO_OS",
+ "type": "ISO",
+ "min_hdd_size": null,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "E678D53FF49EA13026C8CAE565373858",
+ "name": "KNOPPIX_7.6.1_64BITS",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Knoppix 7.6.1",
+ "os_version": "Knoppix",
+ "os_architecture": 64,
+ "os_image_type": "ISO_OS",
+ "type": "ISO",
+ "min_hdd_size": null,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "7BCAA13B5B5A9E11B496B3E2A7E49D7B",
+ "name": "Debian 8",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Debian8",
+ "os_version": "Debian",
+ "os_architecture": 32,
+ "os_image_type": "ISO_OS",
+ "type": "ISO",
+ "min_hdd_size": null,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "590C67467416363FFA6DAEBA939CE9AA",
+ "name": "Debian 8",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Debian8",
+ "os_version": "Debian",
+ "os_architecture": 64,
+ "os_image_type": "ISO_OS",
+ "type": "ISO",
+ "min_hdd_size": null,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "2193D3FE6136ECC25A2BCF5F506478A6",
+ "name": "debian8-32min",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Debian8",
+ "os_version": "Debian",
+ "os_architecture": 32,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "C4DA59C0E4D5C63E89536ABF309DD942",
+ "name": "debian8-32std",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Debian8",
+ "os_version": "Debian",
+ "os_architecture": 32,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "E9783B668B3E3D3C46A47B68ECA49858",
+ "name": "DEBIAN8-32STD+PLESK12.5UNLIMITED",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Debian8",
+ "os_version": "Debian",
+ "os_architecture": 32,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [
+ {
+ "name": "Licencia Plesk 10.4 - Ilimitados dominios"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "FF696FFE6FB96FC54638DB47E9321E25",
+ "name": "debian8-64min",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Debian8",
+ "os_version": "Debian",
+ "os_architecture": 64,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "868B25F5DDC3E110ACDEF034B1B81863",
+ "name": "debian8-64std",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Debian8",
+ "os_version": "Debian",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "74B24B20E8DC35548B3A11387C1B3BCD",
+ "name": "DEBIAN8-64STD+PLESK12.5UNLIMITED",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Debian8",
+ "os_version": "Debian",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [
+ {
+ "name": "Licencia Plesk 10.4 - Ilimitados dominios"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "6D9435667B9BFC6583C9D052F0F1D48B",
+ "name": "ubuntu1604-32min",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Ubuntu16.04",
+ "os_version": "Ubuntu",
+ "os_architecture": 32,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "4871EEE48030E0E5FAE813B780760BCD",
+ "name": "ubuntu1604-32std",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Ubuntu16.04",
+ "os_version": "Ubuntu",
+ "os_architecture": 32,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "753E3C1F859874AA74EB63B3302601F5",
+ "name": "ubuntu1604-64min",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Ubuntu16.04",
+ "os_version": "Ubuntu",
+ "os_architecture": 64,
+ "os_image_type": "MINIMAL",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "4DBFA2D31B1A303A9CE0E4ECF8838FDE",
+ "name": "ubuntu1604-64std",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Ubuntu16.04",
+ "os_version": "Ubuntu",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "5FEDF374F19FE3BFA536DBC0660DDB1E",
+ "name": "Publify",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "8.2.0-3",
+ "categories": [
+ "BLOG"
+ ]
+ },
+ {
+ "id": "A66EC633504CE600B9D659EA28082732",
+ "name": "Squash",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "20151209-4",
+ "categories": [
+ "CODE REVIEW"
+ ]
+ },
+ {
+ "id": "93DF6BD0351A6E1BF698896F95E8CFE4",
+ "name": "REFINERY CMS",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "2.1.5-8",
+ "categories": [
+ "CMS"
+ ]
+ },
+ {
+ "id": "E08D613211F4CFC7367052614BA0E1E7",
+ "name": "Spree",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "3.0.7-2",
+ "categories": [
+ "E-COMMERCE"
+ ]
+ },
+ {
+ "id": "3DEF9E1E82F8F14B7AC57595990E2E2E",
+ "name": "OPEN EDX",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "20160414-2",
+ "categories": [
+ "COLLABORATION",
+ "ELEARNING"
+ ]
+ },
+ {
+ "id": "E8564D74944AC4F005E8CE951340D849",
+ "name": "WordPress",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "4.5.2.php56-0",
+ "categories": [
+ "BLOG",
+ "CMS"
+ ]
+ },
+ {
+ "id": "49130A36E7961805F0F3494D47724625",
+ "name": "CANVAS LMS",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "2016.04.23.03-1",
+ "categories": [
+ "ELEARNING"
+ ]
+ },
+ {
+ "id": "040FBEF43407931C74EE074CCEC759AF",
+ "name": "CENTOS6-64STD+PLESK12.5UNLIMITED",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos6",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [
+ {
+ "name": "Licencia Plesk 10.4 - Ilimitados dominios"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "FDB280E565E2CC9D210BBE0F7B688E45",
+ "name": "CENTOS6-32STD+PLESK12.5UNLIMITED",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos6",
+ "os_version": "Centos",
+ "os_architecture": 32,
+ "os_image_type": "STANDARD",
+ "type": "IMAGE",
+ "min_hdd_size": 20,
+ "licenses": [
+ {
+ "name": "Licencia Plesk 10.4 - Ilimitados dominios"
+ }
+ ],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "6044F1B4DCAAB9F877ED7BBE2B6F26BE",
+ "name": "TYPO3",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "8.1.2-0",
+ "categories": [
+ "CMS"
+ ]
+ },
+ {
+ "id": "7C48549F3DED9540B7CE75F761C96F62",
+ "name": "PostgreSQL",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "9.5.3-0",
+ "categories": [
+ "DATABASE",
+ "INFRASTRUCTURE"
+ ]
+ },
+ {
+ "id": "D15BA431C4EBE5AAA454892309E69A44",
+ "name": "Redis",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "3.2.1-0",
+ "categories": [
+ "DATABASE",
+ "INFRASTRUCTURE"
+ ]
+ },
+ {
+ "id": "274A1F47D79E07587939BF90A7845176",
+ "name": "Memcached",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "1.4.28-0",
+ "categories": [
+ "CACHE",
+ "INFRASTRUCTURE"
+ ]
+ },
+ {
+ "id": "D1C6FCCBA91EDEA95B7F3EA3C4B0F91E",
+ "name": "RabbitMQ",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "3.6.3-0",
+ "categories": [
+ "DEVELOPER TOOLS",
+ "INFRASTRUCTURE"
+ ]
+ },
+ {
+ "id": "332AEAC8F58655EF5C6CFC18BDEAB5BB",
+ "name": "Redmine",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "3.3.0-1-r05",
+ "categories": [
+ "BUG TRACKING",
+ "DEVELOPER TOOLS",
+ "POPULAR",
+ "PROJECT MANAGEMENT"
+ ]
+ },
+ {
+ "id": "1DDB874AC504E01DF1357D961274BEAE",
+ "name": "OpenProject",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "5.0.19-1-r05",
+ "categories": [
+ "PROJECT MANAGEMENT"
+ ]
+ },
+ {
+ "id": "F213BAD2BC86F2383656606D1800070E",
+ "name": "CHT1-GB-IMAGE",
+ "available_datacenters": [
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Debian7",
+ "os_version": "Debian",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "MY_IMAGE",
+ "min_hdd_size": 30,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "1DC90B8D32CC6DB41FE2ABA027381AEA",
+ "name": "CHT1-DE-IMAGE_20160720",
+ "available_datacenters": [
+ "4EFAD5836CE43ACA502FD5B99BEE44EF"
+ ],
+ "os_family": "Linux",
+ "os": "Ubuntu16.04",
+ "os_version": "Ubuntu",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "MY_IMAGE",
+ "min_hdd_size": 30,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "DA40BC2BC45E15117E723E07648AB74C",
+ "name": "CHT1-ES-IMAGE",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "MY_IMAGE",
+ "min_hdd_size": 30,
+ "licenses": [],
+ "version": null,
+ "categories": []
+ },
+ {
+ "id": "FD7D017C0BDD327F3DF206A85699FFF5",
+ "name": "ocPortal",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "9.0.28-0",
+ "categories": [
+ "CMS"
+ ]
+ },
+ {
+ "id": "74FECE8CC262CB31A11F051499B1B30E",
+ "name": "NGINX",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "1.10.1-1",
+ "categories": [
+ "INFRASTRUCTURE"
+ ]
+ },
+ {
+ "id": "F84262237686F207C9E961EEBF7F9A05",
+ "name": "MyBB",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "1.8.7-2",
+ "categories": [
+ "FORUM"
+ ]
+ },
+ {
+ "id": "FB593AF3F89A8B26B0B6E78F2E232B39",
+ "name": "PrestaShop",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "1.6.1.6-2",
+ "categories": [
+ "E-COMMERCE",
+ "POPULAR"
+ ]
+ },
+ {
+ "id": "DE91B3C9C152C3A9189F170F9F0A8CD0",
+ "name": "MediaWiki",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "1.26.3-1",
+ "categories": [
+ "WIKI"
+ ]
+ },
+ {
+ "id": "2C0D250864B6EA5D0898A20A950D35ED",
+ "name": "Drupal",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "7.50-2",
+ "categories": [
+ "CMS"
+ ]
+ },
+ {
+ "id": "BAA7787F8931D571A572192E3F663384",
+ "name": "Joomla!",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "3.6.0-1",
+ "categories": [
+ "CMS",
+ "POPULAR"
+ ]
+ },
+ {
+ "id": "CB7DE59A819E818711A9E339E7C9E618",
+ "name": "ownCloud",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "9.1.0-0",
+ "categories": [
+ "MEDIA SHARING",
+ "POPULAR"
+ ]
+ },
+ {
+ "id": "DA24D87F4772BFE5FAB3EB112CA66A90",
+ "name": "SugarCRM",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "6.5.24-0",
+ "categories": [
+ "CRM"
+ ]
+ },
+ {
+ "id": "C86A0850D804AEB0222E486BE3208983",
+ "name": "WORDPRESS MULTISITE",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "4.5.3-1",
+ "categories": [
+ "BLOG",
+ "CMS"
+ ]
+ },
+ {
+ "id": "64D9900D1EA66D4FE4479B8C34EBB88B",
+ "name": "WordPress",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "4.5.3-1",
+ "categories": [
+ "BLOG",
+ "CMS",
+ "POPULAR"
+ ]
+ },
+ {
+ "id": "6AF74675A2203B02E0E2D717CA9EF9B1",
+ "name": "phpBB",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "3.1.9-2",
+ "categories": [
+ "FORUM"
+ ]
+ },
+ {
+ "id": "F6363C60A8D4C25107419C6DC9071FEE",
+ "name": "XOOPS",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "2.5.7.2-3",
+ "categories": [
+ "CMS"
+ ]
+ },
+ {
+ "id": "D41BE971AC2EDC441F81972AA56BE301",
+ "name": "OrangeHRM",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "3.3.2-2",
+ "categories": [
+ "HUMAN RESOURCE MANAGEMENT"
+ ]
+ },
+ {
+ "id": "91AF83F9EA73478EEC2DA5D11480FD9C",
+ "name": "Mean",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "3.2.8-1",
+ "categories": [
+ "INFRASTRUCTURE"
+ ]
+ },
+ {
+ "id": "94118CB46246C958A542D5E21AE4098E",
+ "name": "ResourceSpace",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "7.8-3",
+ "categories": [
+ "MEDIA SHARING",
+ "PHOTO SHARING",
+ "VIDEO SHARING"
+ ]
+ },
+ {
+ "id": "D9A859F560AA227DD07488945459DDFF",
+ "name": "Odoo",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "9.0.20160620-2",
+ "categories": [
+ "CRM",
+ "ERP",
+ "POPULAR"
+ ]
+ },
+ {
+ "id": "AC223698D543228BD97BB355112DC887",
+ "name": "LIVE HELPER CHAT",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "2.46v-1",
+ "categories": [
+ "CHAT"
+ ]
+ },
+ {
+ "id": "41BA5BD5A162B87C5275854CBF3BC4D3",
+ "name": "Moodle",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "3.1.1-1",
+ "categories": [
+ "ELEARNING",
+ "POPULAR"
+ ]
+ },
+ {
+ "id": "2C191B48E1B1E678951CA83C7F14BA01",
+ "name": "Ruby",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "2.3.1-4",
+ "categories": [
+ "INFRASTRUCTURE"
+ ]
+ },
+ {
+ "id": "A20125D799D01E829AB996B73499501F",
+ "name": "Hadoop",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "2.7.2-1",
+ "categories": [
+ "DEVELOPER TOOLS"
+ ]
+ },
+ {
+ "id": "C9C4E5912736CF2928BC412E8FD1DC1E",
+ "name": "EXO PLATFORM",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "4.3.0-4",
+ "categories": [
+ "SOCIAL NETWORKING"
+ ]
+ },
+ {
+ "id": "F823CA021043AE2D08913ED689994F6A",
+ "name": "LET'S CHAT",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "0.4.7-1",
+ "categories": [
+ "CHAT",
+ "COLLABORATION",
+ "SOCIAL NETWORKING"
+ ]
+ },
+ {
+ "id": "53133AE1EB34BBD576A17F345CD95467",
+ "name": "JRuby",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "9.1.2.0-1",
+ "categories": [
+ "INFRASTRUCTURE"
+ ]
+ },
+ {
+ "id": "206A0FB72271162B051E7E6B61E0E3B9",
+ "name": "Liferay",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "7.0.1-2",
+ "categories": [
+ "PORTAL SERVER"
+ ]
+ },
+ {
+ "id": "3C54989CFAAC3866BA0D09595433B1DF",
+ "name": "Openfire",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "4.0.2-2",
+ "categories": [
+ "CHAT"
+ ]
+ },
+ {
+ "id": "704E8A5FAF76C2AFF2D6B747F2833E51",
+ "name": "Neos",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "2.1.6-3",
+ "categories": [
+ "CMS"
+ ]
+ },
+ {
+ "id": "169077A5C3977104306F38F8E5799D21",
+ "name": "Noalyss",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "6.9.0.0-4",
+ "categories": [
+ "ACCOUNTING"
+ ]
+ },
+ {
+ "id": "137727284539B72CB5CC594BDA11ACCA",
+ "name": "PROCESSMAKER OPEN SOURCE EDITION",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "3.0.1.8-3",
+ "categories": [
+ "BPM",
+ "COLLABORATION"
+ ]
+ },
+ {
+ "id": "54627DC0DBFBC1CAEAD9CB65B6335E14",
+ "name": "OpenCart",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "2.2.0.0-2",
+ "categories": [
+ "E-COMMERCE"
+ ]
+ },
+ {
+ "id": "7E09821C352A16C055216BF337261172",
+ "name": "OPEN ATRIUM",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "2.54-3",
+ "categories": [
+ "CMS",
+ "PROJECT MANAGEMENT"
+ ]
+ },
+ {
+ "id": "75E9BF70942168A9F2A184830AD52C1E",
+ "name": "Pootle",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "2.7.3-1",
+ "categories": [
+ "TRANSLATION TOOLS"
+ ]
+ },
+ {
+ "id": "EC1971DE44DDB26B228AAF7E3E09B0F9",
+ "name": "Pimcore",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "3.1.1-5",
+ "categories": [
+ "CMS"
+ ]
+ },
+ {
+ "id": "9583B74D82356958FA0ECC6919D90336",
+ "name": "phpList",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": "3.2.5-1",
+ "categories": [
+ "NEWSLETTER MANAGER"
+ ]
+ },
+ {
+ "id": "FEB02845D85AA3CC2A044C34EF82990F",
+ "name": "OSQA",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+ "908DC2072407C94C8054610AD5A53B8C",
+ "4EFAD5836CE43ACA502FD5B99BEE44EF",
+ "5091F6D8CBFEF9C26ACE957C652D5D49"
+ ],
+ "os_family": "Linux",
+ "os": "Centos7",
+ "os_version": "Centos",
+ "os_architecture": 64,
+ "os_image_type": null,
+ "type": "APPLICATION",
+ "min_hdd_size": 20,
+ "licenses": [],
+ "version": null,
+ "categories": [
+ "FORUM"
+ ]
+ },
+ {
+ "id": "B1E51217B6EACE01AAD94DAD749DA7D7",
+ "name": "OXID ESHOP",
+ "available_datacenters": [
+ "81DEF28500FBC2A973FC0C620DF5B721",
+
<TRUNCATED>
[07/11] libcloud git commit: Addressing PR remarks
Posted by an...@apache.org.
Addressing PR remarks
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/560f0e44
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/560f0e44
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/560f0e44
Branch: refs/heads/trunk
Commit: 560f0e4450c1259e49731393c4b69410abff7a05
Parents: 0fd856f
Author: jasminSPC <ja...@stackpointcloud.com>
Authored: Tue Apr 11 01:54:58 2017 +0200
Committer: jasminSPC <ja...@stackpointcloud.com>
Committed: Tue Apr 11 01:54:58 2017 +0200
----------------------------------------------------------------------
libcloud/compute/drivers/oneandone.py | 279 ++++++++++++++---------------
1 file changed, 138 insertions(+), 141 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/560f0e44/libcloud/compute/drivers/oneandone.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/oneandone.py b/libcloud/compute/drivers/oneandone.py
index a33fe3d..afe356e 100644
--- a/libcloud/compute/drivers/oneandone.py
+++ b/libcloud/compute/drivers/oneandone.py
@@ -199,44 +199,44 @@ class OneAndOneNodeDriver(NodeDriver):
Creates a node.
:param name: The name of the new node
- :type ```str```
+ :type `str`
:param image: Image from list_images
- :rtype: ``NodeImage``
+ :rtype: image:
:param ex_fixed_instance_size_id:
Fixed instance size ID from list_sizes
:rtype: ``str``
:param location: 1&1 Data center Location
- :type ```NodeLocation```
+ :type `NodeLocation`
:param auth: SSH key or root password
:type: :class:`NodeAuthSSHKey` or :class:`NodeAuthPassword`
:param ex_ip: IP address
- :type ```str```
+ :type `str`
:param ex_ssh_key: SSH Key
- :type ```str```
+ :type `str`
:param password: Password
- :type ```str```
+ :type `str`
:param ex_monitoring_policy_id:
- :type ```str```
+ :type `str`
:param ex_firewall_policy_id:
- :type ```str```
+ :type `str`
:param ex_loadbalancer_id:
- :type ```str```
+ :type `str`
:param ex_description:
- :type ```str```
+ :type `str`
:param ex_power_on:
- :type ```bool```
+ :type `bool`
:return: Instance of class ``Node``
@@ -244,40 +244,40 @@ class OneAndOneNodeDriver(NodeDriver):
"""
body = {
- "name": name,
- "appliance_id": image.id,
- "hardware": {
- "fixed_instance_size_id": ex_fixed_instance_size_id
+ 'name': name,
+ 'appliance_id': image.id,
+ 'hardware': {
+ 'fixed_instance_size_id': ex_fixed_instance_size_id
},
}
if location is not None:
body['datacenter_id'] = location.id
if ex_power_on is not None:
- body["power_on"] = ex_power_on
+ body['power_on'] = ex_power_on
if ex_description is not None:
- body["description"] = ex_description
+ body['description'] = ex_description
if ex_firewall_policy_id is not None:
- body["firewall_policy_id"] = ex_firewall_policy_id
+ body['firewall_policy_id'] = ex_firewall_policy_id
if ex_monitoring_policy_id is not None:
- body["monitoring_policy_id"] = ex_monitoring_policy_id
+ body['monitoring_policy_id'] = ex_monitoring_policy_id
if ex_loadbalancer_id is not None:
- body["loadbalancer_id"] = ex_loadbalancer_id
+ body['loadbalancer_id'] = ex_loadbalancer_id
if auth is not None:
if isinstance(auth, NodeAuthPassword):
- body["password"] = auth.password
+ body['password'] = auth.password
elif isinstance(auth, NodeAuthSSHKey):
- body["rsa_key"] = auth.pubkey
+ body['rsa_key'] = auth.pubkey
if ex_ip is not None:
- body["ip_id"] = ex_ip
+ body['ip_id'] = ex_ip
response = self.connection.request(
- action="servers",
+ action='servers',
data=body,
method='POST',
)
@@ -398,7 +398,7 @@ class OneAndOneNodeDriver(NodeDriver):
def ex_modify_server_hardware(self, server_id,
fixed_instance_size_id=None, vcore=None,
- cores_per_processor=None, ram=None, ):
+ cores_per_processor=None, ram=None):
"""
Modifies server's hardware
@@ -415,7 +415,7 @@ class OneAndOneNodeDriver(NodeDriver):
:rtype: ``int``
:param ram: Amount of ram for the server
- :rtype: ``int```
+ :rtype: ``int``
:return: Instance of class ``Node``
:rtype: :class: `Node`
@@ -424,13 +424,13 @@ class OneAndOneNodeDriver(NodeDriver):
body = {}
if fixed_instance_size_id is not None:
- body["firewall_policy_id"] = fixed_instance_size_id
+ body['firewall_policy_id'] = fixed_instance_size_id
if vcore is not None:
- body["vcore"] = vcore
+ body['vcore'] = vcore
if cores_per_processor is not None:
- body["cores_per_processor"] = cores_per_processor
+ body['cores_per_processor'] = cores_per_processor
if ram is not None:
- body["ram"] = ram
+ body['ram'] = ram
response = self.connection.request(
action='servers/%s/hardware' % server_id,
@@ -465,7 +465,7 @@ class OneAndOneNodeDriver(NodeDriver):
body = {}
if size is not None:
- body[size] = size
+ body['size'] = size
response = self.connection.request(
action='servers/%s/hardware/hdds/%s' % (server_id, hdd_id),
@@ -492,8 +492,8 @@ class OneAndOneNodeDriver(NodeDriver):
:rtype: :class: `Node`
"""
body = {
- "size": size,
- "is_main": is_main
+ 'size': size,
+ 'is_main': is_main
}
response = self.connection.request(
@@ -574,8 +574,8 @@ class OneAndOneNodeDriver(NodeDriver):
"""
shutdown_body = {
- "action": "POWER_OFF",
- "method": method
+ 'action': 'POWER_OFF',
+ 'method': method
}
response = self.connection.request(
action='servers/%s/status/action' % (server_id),
@@ -622,11 +622,11 @@ class OneAndOneNodeDriver(NodeDriver):
"""
body = {
- "id": image_id,
+ 'id': image_id,
}
if password is not None:
- body["password"] = password
+ body['password'] = password
response = self.connection.request(
action='servers/%s/image' % server_id,
@@ -691,7 +691,7 @@ class OneAndOneNodeDriver(NodeDriver):
"""
body = {
- "type": ip_type
+ 'type': ip_type
}
response = self.connection.request(
@@ -789,7 +789,7 @@ class OneAndOneNodeDriver(NodeDriver):
:rtype: ``Node``
"""
body = {
- "id": firewall_id
+ 'id': firewall_id
}
response = self.connection.request(
action='/servers/%s/ips/%s/firewall_policy' % (server_id, ip_id),
@@ -811,17 +811,17 @@ class OneAndOneNodeDriver(NodeDriver):
:param rules:
:rtype 'dict': [
{
- "protocol": "TCP",
- "port_from": 80,
- "port_to": 80,
- "source": "0.0.0.0"
+ 'protocol': 'TCP',
+ 'port_from': 80,
+ 'port_to': 80,
+ 'source': '0.0.0.0'
}
]
:return: 'dict' firewall policy
"""
body = {
- "name": name
+ 'name': name
}
if description is not None:
@@ -832,7 +832,7 @@ class OneAndOneNodeDriver(NodeDriver):
'At least one firewall rule is required.'
)
else:
- body["rules"] = rules
+ body['rules'] = rules
response = self.connection.request(
action='firewall_policies',
@@ -843,7 +843,7 @@ class OneAndOneNodeDriver(NodeDriver):
return response.object
def ex_list_firewall_policies(self):
- """
+ '""
List firewall policies
:return: 'dict'
"""
@@ -900,9 +900,9 @@ class OneAndOneNodeDriver(NodeDriver):
def ex_get_shared_storage(self, storage_id):
"""
- Gets a shared storage
- :return: 'dict'
- """
+ Gets a shared storage
+ :return: 'dict'
+ """
response = self.connection.request(
action='shared_storages/%s' % (storage_id),
method='GET'
@@ -922,9 +922,9 @@ class OneAndOneNodeDriver(NodeDriver):
"""
body = {
- "name": name,
- "size": size,
- "datacenter_id": datacenter_id
+ 'name': name,
+ 'size': size,
+ 'datacenter_id': datacenter_id
}
if description is not None:
@@ -967,10 +967,10 @@ class OneAndOneNodeDriver(NodeDriver):
:rtype: 'dict'
"""
body = {
- "severs": [
+ 'severs': [
{
- "id": server_id,
- "rights": rights
+ 'id': server_id,
+ 'rights': rights
}
]
}
@@ -1040,18 +1040,18 @@ class OneAndOneNodeDriver(NodeDriver):
:param rules: Load balancer rules
:rtype: ``list`` of ``dict``
- "rules": [
+ 'rules': [
{
- "protocol": "TCP",
- "port_balancer": 80,
- "port_server": 80,
- "source": "0.0.0.0"
+ 'protocol': 'TCP',
+ 'port_balancer': 80,
+ 'port_server': 80,
+ 'source': '0.0.0.0'
},
{
- "protocol": "TCP",
- "port_balancer": 9999,
- "port_server": 8888,
- "source": "0.0.0.0"
+ 'protocol': 'TCP',
+ 'port_balancer': 9999,
+ 'port_server': 8888,
+ 'source': '0.0.0.0'
}
]
:param persistence: Indictes if persistance is set
@@ -1080,8 +1080,8 @@ class OneAndOneNodeDriver(NodeDriver):
"""
body = {
- "name": name,
- "method": method,
+ 'name': name,
+ 'method': method,
}
body['rules'] = []
@@ -1157,7 +1157,7 @@ class OneAndOneNodeDriver(NodeDriver):
:rtype: ``dict``
"""
body = {
- "server_ips": server_ips,
+ 'server_ips': server_ips,
}
response = self.connection.request(
@@ -1214,7 +1214,7 @@ class OneAndOneNodeDriver(NodeDriver):
"""
body = {
- "rules": [
+ 'rules': [
{
'protocol': protocol,
'port_balancer': port_balancer,
@@ -1713,54 +1713,54 @@ class OneAndOneNodeDriver(NodeDriver):
:param thresholds: Thresholds for the monitoring policy
:rtype: ``dict``
{
- "cpu":{
- "warning":{
- "value":90,
- "alert":false
+ 'cpu':{
+ 'warning':{
+ 'value':90,
+ 'alert':false
},
- "critical":{
- "value":95,
- "alert":false
+ 'critical':{
+ 'value':95,
+ 'alert':false
}
},
- "ram":{
- "warning":{
- "value":90,
- "alert":false
+ 'ram':{
+ 'warning':{
+ 'value':90,
+ 'alert':false
},
- "critical":{
- "value":95,
- "alert":false
+ 'critical':{
+ 'value':95,
+ 'alert':false
}
},
- "disk":{
- "warning":{
- "value":80,
- "alert":false
+ 'disk':{
+ 'warning':{
+ 'value':80,
+ 'alert':false
},
- "critical":{
- "value":90,
- "alert":false
+ 'critical':{
+ 'value':90,
+ 'alert':false
}
},
- "transfer":{
- "warning":{
- "value":1000,
- "alert":false
+ 'transfer':{
+ 'warning':{
+ 'value':1000,
+ 'alert':false
},
- "critical":{
- "value":2000,
- "alert":false
+ 'critical':{
+ 'value':2000,
+ 'alert':false
}
},
- "internal_ping":{
- "warning":{
- "value":50,
- "alert":false
+ 'internal_ping':{
+ 'warning':{
+ 'value':50,
+ 'alert':false
},
- "critical":{
- "value":100,
- "alert":false
+ 'critical':{
+ 'value':100,
+ 'alert':false
}
}
}
@@ -1768,10 +1768,10 @@ class OneAndOneNodeDriver(NodeDriver):
:rtype: ``dict``
[
{
- "protocol":"TCP",
- "port":"22",
- "alert_if":"RESPONDING",
- "email_notification":true
+ 'protocol':'TCP',
+ 'port':'22',
+ 'alert_if':'RESPONDING',
+ 'email_notification':true
}
]
@@ -1780,9 +1780,9 @@ class OneAndOneNodeDriver(NodeDriver):
:rtype: ``dict``
[
{
- "process":"test",
- "alert_if":"NOT_RUNNING",
- "email_notification":true
+ 'process':'test',
+ 'alert_if':'NOT_RUNNING',
+ 'email_notification':true
}
]
@@ -1966,17 +1966,17 @@ class OneAndOneNodeDriver(NodeDriver):
:rtype: ``dict``
[
{
- "protocol":"TCP",
- "port":"80",
- "alert_if":"RESPONDING",
- "email_notification":true
+ 'protocol':'TCP',
+ 'port':'80',
+ 'alert_if':'RESPONDING',
+ 'email_notification':true
}
]
:return: Instance of a monitoring policy
:rtype: ``dict``
"""
- body = {"ports": ports}
+ body = {'ports': ports}
response = self.connection.request(
action='monitoring_policies/%s/ports' % policy_id,
@@ -2058,16 +2058,16 @@ class OneAndOneNodeDriver(NodeDriver):
:rtype: ``list`` of ``dict``
[
{
- "process": "taskmmgr",
- "alert_if": "RUNNING",
- "email_notification": true
+ 'process': 'taskmmgr',
+ 'alert_if': 'RUNNING',
+ 'email_notification': true
}
]
:return: Instance of a monitoring policy
:rtype: ``dict``
- """
+ '""
- body = {"processes": processes}
+ body = {'processes': processes}
response = self.connection.request(
action='monitoring_policies/%s/processes' % policy_id,
@@ -2141,8 +2141,8 @@ class OneAndOneNodeDriver(NodeDriver):
return response.object
"""
- Private Functions
- """
+ Private Functions
+ """
def _to_images(self, object, image_type=None):
if image_type is not None:
@@ -2169,20 +2169,17 @@ class OneAndOneNodeDriver(NodeDriver):
extra=extra)
def _to_node_size(self, data):
- """
- Convert into NodeSize
- """
return NodeSize(
- id=data["id"],
- name=data["name"],
- ram=data["hardware"]["ram"],
- disk=data["hardware"]["hdds"][0]["size"],
+ id=data['id'],
+ name=data['name'],
+ ram=data['hardware']['ram'],
+ disk=data['hardware']['hdds'][0]['size'],
bandwidth=None,
price=None,
driver=self.connection.driver,
extra={
- 'vcores': data['hardware']["vcore"],
- "cores_per_processor": data['hardware']['cores_per_processor']}
+ 'vcores': data['hardware']['vcore'],
+ 'cores_per_processor': data['hardware']['cores_per_processor']}
)
@@ -2200,28 +2197,28 @@ class OneAndOneNodeDriver(NodeDriver):
def _to_node(self, server):
extra = {}
- extra["datacenter"] = server['datacenter']
+ extra['datacenter'] = server['datacenter']
if 'description' in server:
extra['description'] = server['description']
if 'status' in server:
- extra["status"] = server["status"]
+ extra['status'] = server['status']
if 'image' in server:
- extra["image"] = server["image"]
+ extra['image'] = server['image']
if 'hardware' in server:
- extra["hardware"] = server["hardware"]
+ extra['hardware'] = server['hardware']
if 'dvd' in server:
- extra["dvd"] = server["dvd"]
+ extra['dvd'] = server['dvd']
if 'snapshot' in server:
- extra["snapshot"] = server["snapshot"]
+ extra['snapshot'] = server['snapshot']
if 'ips' in server:
- extra["ips"] = server["ips"]
+ extra['ips'] = server['ips']
if 'alerts' in server:
- extra["alerts"] = server["alerts"]
+ extra['alerts'] = server['alerts']
if 'monitoring_policy' in server:
- extra["monitoring_policy"] = server["monitoring_policy"]
+ extra['monitoring_policy'] = server['monitoring_policy']
if 'private_networks' in server:
- extra["private_networks"] = server["private_networks"]
+ extra['private_networks'] = server['private_networks']
ips = []
[09/11] libcloud git commit: Test fix
Posted by an...@apache.org.
Test fix
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/738a1d1f
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/738a1d1f
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/738a1d1f
Branch: refs/heads/trunk
Commit: 738a1d1f201cc04f98fd0f3781bd27060686d8ef
Parents: 38d40fe
Author: jasminSPC <ja...@stackpointcloud.com>
Authored: Tue Apr 11 02:11:45 2017 +0200
Committer: jasminSPC <ja...@stackpointcloud.com>
Committed: Tue Apr 11 02:11:45 2017 +0200
----------------------------------------------------------------------
libcloud/compute/drivers/oneandone.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/738a1d1f/libcloud/compute/drivers/oneandone.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/oneandone.py b/libcloud/compute/drivers/oneandone.py
index 2a5d1e4..2203a08 100644
--- a/libcloud/compute/drivers/oneandone.py
+++ b/libcloud/compute/drivers/oneandone.py
@@ -2065,7 +2065,7 @@ class OneAndOneNodeDriver(NodeDriver):
]
:return: Instance of a monitoring policy
:rtype: ``dict``
- '""
+ """
body = {'processes': processes}