Adds V3 API samples for agents, aggregates and certificates

Adds v3 API samples for the agents, aggregates, and certificates
extensions. Bundling them together to save on review load

Partially implements blueprint v3-api-unittests
Partially implements blueprint v3-api-specification

Change-Id: Iee26fe25b5fd369f2a1f5690ddc095a90526a549
This commit is contained in:
Chris Yeoh 2013-08-12 16:56:26 +09:30
parent 49bd707789
commit 5860420fa6
83 changed files with 945 additions and 0 deletions

View File

@ -0,0 +1,10 @@
{
"agent": {
"hypervisor": "hypervisor",
"os": "os",
"architecture": "x86",
"version": "8.0",
"md5hash": "add6bb58e139be103324d04d82d8f545",
"url": "xxxxxxxxxxxx"
}
}

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<agent>
<hypervisor>hypervisor</hypervisor>
<os>os</os>
<architecture>x86</architecture>
<version>8.0</version>
<md5hash>add6bb58e139be103324d04d82d8f545</md5hash>
<url>xxxxxxxxxxxx</url>
</agent>

View File

@ -0,0 +1,11 @@
{
"agent": {
"agent_id": "1",
"architecture": "x86",
"hypervisor": "hypervisor",
"md5hash": "add6bb58e139be103324d04d82d8f545",
"os": "os",
"url": "xxxxxxxxxxxx",
"version": "8.0"
}
}

View File

@ -0,0 +1,10 @@
<?xml version='1.0' encoding='UTF-8'?>
<agent>
<url>xxxxxxxxxxxx</url>
<hypervisor>hypervisor</hypervisor>
<md5hash>add6bb58e139be103324d04d82d8f545</md5hash>
<version>8.0</version>
<architecture>x86</architecture>
<os>os</os>
<agent_id>1</agent_id>
</agent>

View File

@ -0,0 +1,7 @@
{
"para": {
"url": "xxx://xxxx/xxx/xxx",
"md5hash": "add6bb58e139be103324d04d82d8f545",
"version": "7.0"
}
}

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<para>
<version>7.0</version>
<url>xxx://xxxx/xxx/xxx</url>
<md5hash>add6bb58e139be103324d04d82d8f545</md5hash>
</para>

View File

@ -0,0 +1,8 @@
{
"agent": {
"agent_id": "1",
"md5hash": "add6bb58e139be103324d04d82d8f545",
"url": "xxx://xxxx/xxx/xxx",
"version": "7.0"
}
}

View File

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<agent>
<url>xxx://xxxx/xxx/xxx</url>
<version>7.0</version>
<agent_id>1</agent_id>
<md5hash>add6bb58e139be103324d04d82d8f545</md5hash>
</agent>

View File

@ -0,0 +1,13 @@
{
"agents": [
{
"agent_id": "1",
"architecture": "x86",
"hypervisor": "hypervisor",
"md5hash": "add6bb58e139be103324d04d82d8f545",
"os": "os",
"url": "xxxxxxxxxxxx",
"version": "8.0"
}
]
}

View File

@ -0,0 +1,4 @@
<?xml version='1.0' encoding='UTF-8'?>
<agents>
<agent url="xxxxxxxxxxxx" hypervisor="hypervisor" md5hash="add6bb58e139be103324d04d82d8f545" version="8.0" architecture="x86" os="os" agent_id="1"/>
</agents>

View File

@ -0,0 +1,6 @@
{
"add_host":
{
"host": "21549b2f665945baaa7101926a00143c"
}
}

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<add_host host="bdb794e5cdd3447c9132ddd8e5cc3d0b" />

View File

@ -0,0 +1,9 @@
{
"set_metadata":
{
"metadata":
{
"key": "value"
}
}
}

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<set_metadata>
<metadata>
<key>value</key>
</metadata>
</set_metadata>

View File

@ -0,0 +1,7 @@
{
"aggregate":
{
"name": "name",
"availability_zone": "nova"
}
}

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<aggregate name="name" availability_zone="nova" />

View File

@ -0,0 +1,11 @@
{
"aggregate": {
"availability_zone": "nova",
"created_at": "2013-08-18T12:17:55.751757",
"deleted": 0,
"deleted_at": null,
"id": 1,
"name": "name",
"updated_at": null
}
}

View File

@ -0,0 +1,10 @@
<?xml version='1.0' encoding='UTF-8'?>
<aggregate>
<name>name</name>
<availability_zone>nova</availability_zone>
<deleted>False</deleted>
<created_at>2013-08-18 12:17:56.757058</created_at>
<updated_at>None</updated_at>
<deleted_at>None</deleted_at>
<id>1</id>
</aggregate>

View File

@ -0,0 +1,6 @@
{
"remove_host":
{
"host": "bf1454b3d71145d49fca2101c56c728d"
}
}

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<remove_host host="bdb794e5cdd3447c9132ddd8e5cc3d0b" />

View File

@ -0,0 +1,7 @@
{
"aggregate":
{
"name": "newname",
"availability_zone": "nova2"
}
}

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<aggregate name="newname" availability_zone="nova2" />

View File

@ -0,0 +1,15 @@
{
"aggregate": {
"availability_zone": "nova2",
"created_at": "2013-08-18T12:17:56.259751",
"deleted": 0,
"deleted_at": null,
"hosts": [],
"id": 1,
"metadata": {
"availability_zone": "nova2"
},
"name": "newname",
"updated_at": "2013-08-18T12:17:56.286720"
}
}

View File

@ -0,0 +1,14 @@
<?xml version='1.0' encoding='UTF-8'?>
<aggregate>
<name>newname</name>
<availability_zone>nova2</availability_zone>
<deleted>False</deleted>
<created_at>2013-08-18 12:17:57.655769</created_at>
<updated_at>2013-08-18 12:17:57.683956</updated_at>
<hosts/>
<deleted_at>None</deleted_at>
<id>1</id>
<metadata>
<availability_zone>nova2</availability_zone>
</metadata>
</aggregate>

View File

@ -0,0 +1,17 @@
{
"aggregate": {
"availability_zone": "nova",
"created_at": "2013-08-18T12:17:56.297823",
"deleted": 0,
"deleted_at": null,
"hosts": [
"21549b2f665945baaa7101926a00143c"
],
"id": 1,
"metadata": {
"availability_zone": "nova"
},
"name": "name",
"updated_at": null
}
}

View File

@ -0,0 +1,16 @@
<?xml version='1.0' encoding='UTF-8'?>
<aggregate>
<name>name</name>
<availability_zone>nova</availability_zone>
<deleted>False</deleted>
<created_at>2013-08-18 12:17:57.255783</created_at>
<updated_at>None</updated_at>
<hosts>
<host>bdb794e5cdd3447c9132ddd8e5cc3d0b</host>
</hosts>
<deleted_at>None</deleted_at>
<id>1</id>
<metadata>
<availability_zone>nova</availability_zone>
</metadata>
</aggregate>

View File

@ -0,0 +1,15 @@
{
"aggregate": {
"availability_zone": "nova",
"created_at": "2013-08-18T12:17:56.380226",
"deleted": 0,
"deleted_at": null,
"hosts": [],
"id": 1,
"metadata": {
"availability_zone": "nova"
},
"name": "name",
"updated_at": null
}
}

View File

@ -0,0 +1,14 @@
<?xml version='1.0' encoding='UTF-8'?>
<aggregate>
<name>name</name>
<availability_zone>nova</availability_zone>
<deleted>False</deleted>
<created_at>2013-08-18 12:17:56.757058</created_at>
<updated_at>None</updated_at>
<hosts/>
<deleted_at>None</deleted_at>
<id>1</id>
<metadata>
<availability_zone>nova</availability_zone>
</metadata>
</aggregate>

View File

@ -0,0 +1,17 @@
{
"aggregates": [
{
"availability_zone": "nova",
"created_at": "2013-08-18T12:17:56.856455",
"deleted": 0,
"deleted_at": null,
"hosts": [],
"id": 1,
"metadata": {
"availability_zone": "nova"
},
"name": "name",
"updated_at": null
}
]
}

View File

@ -0,0 +1,16 @@
<?xml version='1.0' encoding='UTF-8'?>
<aggregates>
<aggregate>
<name>name</name>
<availability_zone>nova</availability_zone>
<deleted>False</deleted>
<created_at>2013-08-18 12:17:57.241412</created_at>
<updated_at>None</updated_at>
<hosts/>
<deleted_at>None</deleted_at>
<id>1</id>
<metadata>
<availability_zone>nova</availability_zone>
</metadata>
</aggregate>
</aggregates>

View File

@ -0,0 +1,16 @@
{
"aggregate": {
"availability_zone": "nova",
"created_at": "2013-08-18T12:17:55.959571",
"deleted": 0,
"deleted_at": null,
"hosts": [],
"id": 1,
"metadata": {
"availability_zone": "nova",
"key": "value"
},
"name": "name",
"updated_at": null
}
}

View File

@ -0,0 +1,15 @@
<?xml version='1.0' encoding='UTF-8'?>
<aggregate>
<name>name</name>
<availability_zone>nova</availability_zone>
<deleted>False</deleted>
<created_at>2013-08-18 12:17:56.891817</created_at>
<updated_at>None</updated_at>
<hosts/>
<deleted_at>None</deleted_at>
<id>1</id>
<metadata>
<key>value</key>
<availability_zone>nova</availability_zone>
</metadata>
</aggregate>

View File

@ -0,0 +1,15 @@
{
"aggregate": {
"availability_zone": "nova",
"created_at": "2013-08-18T12:17:56.990581",
"deleted": 0,
"deleted_at": null,
"hosts": [],
"id": 1,
"metadata": {
"availability_zone": "nova"
},
"name": "name",
"updated_at": null
}
}

View File

@ -0,0 +1,14 @@
<?xml version='1.0' encoding='UTF-8'?>
<aggregate>
<name>name</name>
<availability_zone>nova</availability_zone>
<deleted>False</deleted>
<created_at>2013-08-18 12:17:57.255783</created_at>
<updated_at>None</updated_at>
<hosts/>
<deleted_at>None</deleted_at>
<id>1</id>
<metadata>
<availability_zone>nova</availability_zone>
</metadata>
</aggregate>

View File

@ -0,0 +1,6 @@
{
"certificate": {
"data": "Certificate:\n Data:\n Version: 1 (0x0)\n Serial Number: 1018 (0x3fa)\n Signature Algorithm: md5WithRSAEncryption\n Issuer: O=NOVA ROOT, L=Mountain View, ST=California, C=US\n Validity\n Not Before: Aug 12 07:20:30 2013 GMT\n Not After : Aug 12 07:20:30 2014 GMT\n Subject: C=US, ST=California, O=OpenStack, OU=NovaDev, CN=openstack-fake-2013-08-12T07:20:30Z\n Subject Public Key Info:\n Public Key Algorithm: rsaEncryption\n Public-Key: (1024 bit)\n Modulus:\n 00:ac:ff:b1:d1:ed:54:4e:35:6c:34:b4:8f:0b:04:\n 50:25:a3:e2:4f:02:4c:4f:26:59:bd:f3:fd:eb:da:\n 18:c2:36:aa:63:42:72:1f:88:4f:3a:ec:e7:9f:8e:\n 44:2a:d3:b8:94:7b:20:41:f8:48:02:57:91:4c:16:\n 62:f1:21:d4:f2:40:b5:86:50:d9:61:f0:be:ff:d8:\n 8d:9f:4b:aa:6a:07:38:a2:7f:87:21:fc:e6:6e:1d:\n 0a:95:1a:90:0e:60:c2:24:e9:8e:e8:68:1b:e9:f3:\n c6:b0:7c:da:c5:20:66:9b:85:ea:f5:c9:a7:de:ee:\n 16:b1:51:a0:4d:e3:95:98:df\n Exponent: 65537 (0x10001)\n Signature Algorithm: md5WithRSAEncryption\n 15:42:ca:71:cc:32:af:dc:cf:45:91:df:8a:b8:30:c4:7f:78:\n 80:a7:25:c2:d9:81:3e:b3:dd:22:cc:3b:f8:94:e7:8f:04:f6:\n 93:04:9e:85:d4:10:40:ff:5a:07:47:24:b5:ae:93:ad:8d:e1:\n e6:54:4a:8d:4a:29:53:c4:8d:04:6b:0b:f6:af:38:78:02:c5:\n 05:19:89:82:2d:ba:fd:11:3c:1e:18:c9:0c:3d:03:93:6e:bc:\n 66:70:34:ee:03:78:8a:1d:3d:64:e8:20:2f:90:81:8e:49:1d:\n 07:37:15:66:42:cb:58:39:ad:56:ce:ed:47:c6:78:0b:0e:75:\n 29:ca\n-----BEGIN CERTIFICATE-----\nMIICNDCCAZ0CAgP6MA0GCSqGSIb3DQEBBAUAME4xEjAQBgNVBAoTCU5PVkEgUk9P\nVDEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzETMBEGA1UECBMKQ2FsaWZvcm5pYTEL\nMAkGA1UEBhMCVVMwHhcNMTMwODEyMDcyMDMwWhcNMTQwODEyMDcyMDMwWjB2MQsw\nCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTESMBAGA1UECgwJT3BlblN0\nYWNrMRAwDgYDVQQLDAdOb3ZhRGV2MSwwKgYDVQQDDCNvcGVuc3RhY2stZmFrZS0y\nMDEzLTA4LTEyVDA3OjIwOjMwWjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA\nrP+x0e1UTjVsNLSPCwRQJaPiTwJMTyZZvfP969oYwjaqY0JyH4hPOuznn45EKtO4\nlHsgQfhIAleRTBZi8SHU8kC1hlDZYfC+/9iNn0uqagc4on+HIfzmbh0KlRqQDmDC\nJOmO6Ggb6fPGsHzaxSBmm4Xq9cmn3u4WsVGgTeOVmN8CAwEAATANBgkqhkiG9w0B\nAQQFAAOBgQAVQspxzDKv3M9Fkd+KuDDEf3iApyXC2YE+s90izDv4lOePBPaTBJ6F\n1BBA/1oHRyS1rpOtjeHmVEqNSilTxI0Eawv2rzh4AsUFGYmCLbr9ETweGMkMPQOT\nbrxmcDTuA3iKHT1k6CAvkIGOSR0HNxVmQstYOa1Wzu1HxngLDnUpyg==\n-----END CERTIFICATE-----\n",
"private_key": "-----BEGIN RSA PRIVATE KEY-----\nMIICXgIBAAKBgQCs/7HR7VRONWw0tI8LBFAlo+JPAkxPJlm98/3r2hjCNqpjQnIf\niE867OefjkQq07iUeyBB+EgCV5FMFmLxIdTyQLWGUNlh8L7/2I2fS6pqBziif4ch\n/OZuHQqVGpAOYMIk6Y7oaBvp88awfNrFIGabher1yafe7haxUaBN45WY3wIDAQAB\nAoGBAIrcr2I/KyWf0hw4Nn10V9TuyE/9Gz2JHg3QFKjFJox2DqygADT5WAeHc6Bq\nNKNf0NA2SL1LSpm+ql01tvOw4VjE5TF6OHiIzHuTTnXggG6vuA8rxp6L24HtkAcC\n0CBno9ggSX6jVornJPBfxpkwITYSvH57BUFVD7ovbPyWGzS5AkEA1JeUtL6zxwps\nWRr1aJ8Ill2uQk/RUIvSZOU61s+B190zvHikFy8LD8CI6vvBmjC/IZuZVedufjqs\n4vX82uDO3QJBANBSh2b2dyB4AGVFY9vXMRtALAspJHbLHy+zTKxlGPFiuz7Se3ps\n8Kehz4C/CBXgQkk194dwFSGE19/PQfyJROsCQQCFFDJZhrtBUMwMZ2zSRiN5BUGt\nbwuncS+OS1Su3Yz5VRYq2BZYEPHKtYrAFkLWQ8eRwTaWaN5pFE/fb38OgQXdAkA4\nDm0W/K0zlHbuyUxEpNQ28/6mBi0ktiWvLT0tioq6sYmXLwZA/D2JrhXrG/xt/ol3\nr8jqrfNRsLByLhAgh0N/AkEAl2eR0O97lTEgFNqzIQwVmIAn9mBO3cnf3tycvlDU\nm6eb2CS242y4QalfCCAEjxoJURdfsm3/D1iFo00X+IWF+A==\n-----END RSA PRIVATE KEY-----\n"
}
}

View File

@ -0,0 +1,2 @@
<?xml version='1.0' encoding='UTF-8'?>
<certificate private_key="-----BEGIN RSA PRIVATE KEY-----&#10;MIICXgIBAAKBgQC4UMjbmFUfkFPFSM0HRz6ULcpwmg2eaJ+EaIwhLrSyghPy1NxL&#10;RbS5gurxDZahspmtULNOUA6YqCAMn0t1EOZe3vWAnckAvnKMZul46gtBfkxTFIg4&#10;P9P1LWgyoO0cSaV2T8Itrb2ZV9OQAlAlrF51zhXUvW63jjyv51PsM2PhWQIDAQAB&#10;AoGBAKE7Qckeo2/9/9m3SmsQfoR+3fTMPheRK+FW1yX7xmPU+ABXBfHuox4YkM6W&#10;9WqzYk1DJ+bcjzgo8gg4nHhmdS2RIqNeWczOaOHprWzPVEbwaR10sSuLUYOBfuko&#10;brvPwGW856UcsByGdM5DIf5DhtWtR3znY4UE0I3tzKelyMrRAkEA6wdpqdFoHJhD&#10;8OGRiC2ZHmvxwi2wKZ0izf29vSvRUnrYxH79zzADZqiIvS90cCuYjdJT4JJYfzU8&#10;cm3l6QJBbQJBAMjC9ur6OuoxxM7cUsOfiHqrQVhuy3WYkkMcqBNcms0Z2G7cRqxF&#10;ZEroqNyXHUiN3WXbi/pRSdnMX8sta7QZWB0CQQDQiaVBnqLILHqsMxlUQVFJYvIC&#10;H1PduKV3LRu7zDNRAdtwjlVaDvoVjpi1dHPWS3hy7hqqem+3f18BEW4cT3oJAkBP&#10;+wQdttTTykIK21GJp7vaivF8hp892Suj2v3GwOTXAw3rlIv/Q6HiCfCD+RvsdMAY&#10;PS/16H6Qa1BahFzdIh+tAkEAsAb0Y4zN5TACTOPBj2Payhgo7rkqDM0tsR5pTE4f&#10;Wx7gqKn7vvq9CJ5Lp80RzhqIbf4hC9wEhjHHoMQ43AjK3Q==&#10;-----END RSA PRIVATE KEY-----&#10;" data="Certificate:&#10; Data:&#10; Version: 1 (0x0)&#10; Serial Number: 1019 (0x3fb)&#10; Signature Algorithm: md5WithRSAEncryption&#10; Issuer: O=NOVA ROOT, L=Mountain View, ST=California, C=US&#10; Validity&#10; Not Before: Aug 12 07:20:30 2013 GMT&#10; Not After : Aug 12 07:20:30 2014 GMT&#10; Subject: C=US, ST=California, O=OpenStack, OU=NovaDev, CN=openstack-fake-2013-08-12T07:20:30Z&#10; Subject Public Key Info:&#10; Public Key Algorithm: rsaEncryption&#10; Public-Key: (1024 bit)&#10; Modulus:&#10; 00:b8:50:c8:db:98:55:1f:90:53:c5:48:cd:07:47:&#10; 3e:94:2d:ca:70:9a:0d:9e:68:9f:84:68:8c:21:2e:&#10; b4:b2:82:13:f2:d4:dc:4b:45:b4:b9:82:ea:f1:0d:&#10; 96:a1:b2:99:ad:50:b3:4e:50:0e:98:a8:20:0c:9f:&#10; 4b:75:10:e6:5e:de:f5:80:9d:c9:00:be:72:8c:66:&#10; e9:78:ea:0b:41:7e:4c:53:14:88:38:3f:d3:f5:2d:&#10; 68:32:a0:ed:1c:49:a5:76:4f:c2:2d:ad:bd:99:57:&#10; d3:90:02:50:25:ac:5e:75:ce:15:d4:bd:6e:b7:8e:&#10; 3c:af:e7:53:ec:33:63:e1:59&#10; Exponent: 65537 (0x10001)&#10; Signature Algorithm: md5WithRSAEncryption&#10; 5e:d0:d5:7a:4c:85:02:7d:a4:11:98:97:ee:9a:57:91:14:de:&#10; f7:16:6b:1b:2d:93:57:13:4c:50:5a:27:13:1c:3a:f0:72:12:&#10; 1c:97:0a:45:be:30:25:ee:25:30:ac:3d:b3:81:b2:ca:9c:a5:&#10; cd:5a:2a:35:21:c6:98:3a:2b:eb:27:bf:88:4a:aa:69:f5:5b:&#10; d4:06:00:6d:ce:d6:69:2e:75:fe:6e:f2:36:c7:52:59:9a:0b:&#10; e5:0a:63:14:a3:f1:06:36:95:04:76:94:ba:1a:44:9f:84:1d:&#10; f2:f9:18:c6:e6:35:ff:75:35:5c:18:ef:35:fb:d7:9c:87:5a:&#10; 73:0c&#10;-----BEGIN CERTIFICATE-----&#10;MIICNDCCAZ0CAgP7MA0GCSqGSIb3DQEBBAUAME4xEjAQBgNVBAoTCU5PVkEgUk9P&#10;VDEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzETMBEGA1UECBMKQ2FsaWZvcm5pYTEL&#10;MAkGA1UEBhMCVVMwHhcNMTMwODEyMDcyMDMwWhcNMTQwODEyMDcyMDMwWjB2MQsw&#10;CQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTESMBAGA1UECgwJT3BlblN0&#10;YWNrMRAwDgYDVQQLDAdOb3ZhRGV2MSwwKgYDVQQDDCNvcGVuc3RhY2stZmFrZS0y&#10;MDEzLTA4LTEyVDA3OjIwOjMwWjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA&#10;uFDI25hVH5BTxUjNB0c+lC3KcJoNnmifhGiMIS60soIT8tTcS0W0uYLq8Q2WobKZ&#10;rVCzTlAOmKggDJ9LdRDmXt71gJ3JAL5yjGbpeOoLQX5MUxSIOD/T9S1oMqDtHEml&#10;dk/CLa29mVfTkAJQJaxedc4V1L1ut448r+dT7DNj4VkCAwEAATANBgkqhkiG9w0B&#10;AQQFAAOBgQBe0NV6TIUCfaQRmJfumleRFN73FmsbLZNXE0xQWicTHDrwchIclwpF&#10;vjAl7iUwrD2zgbLKnKXNWio1IcaYOivrJ7+ISqpp9VvUBgBtztZpLnX+bvI2x1JZ&#10;mgvlCmMUo/EGNpUEdpS6GkSfhB3y+RjG5jX/dTVcGO81+9ech1pzDA==&#10;-----END CERTIFICATE-----&#10;"/>

View File

@ -0,0 +1,6 @@
{
"certificate": {
"data": "-----BEGIN CERTIFICATE-----\nMIICyzCCAjSgAwIBAgIJAJ8zSIxUp/m4MA0GCSqGSIb3DQEBBAUAME4xEjAQBgNV\nBAoTCU5PVkEgUk9PVDEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzETMBEGA1UECBMK\nQ2FsaWZvcm5pYTELMAkGA1UEBhMCVVMwHhcNMTIxMDE3MDEzMzM5WhcNMTMxMDE3\nMDEzMzM5WjBOMRIwEAYDVQQKEwlOT1ZBIFJPT1QxFjAUBgNVBAcTDU1vdW50YWlu\nIFZpZXcxEzARBgNVBAgTCkNhbGlmb3JuaWExCzAJBgNVBAYTAlVTMIGfMA0GCSqG\nSIb3DQEBAQUAA4GNADCBiQKBgQDXW4QfQQxJG4MqurqK8nU/Lge0mfNKxXj/Gwvg\n2sQVwxzmKfoxih8Nn6yt0yHMNjhoji1UoWI03TXUnPZRAZmsypGKZeBd7Y1ZOCPB\nXGZVGrQm+PB2kZU+3cD8fVKcueMLLeZ+LRt5d0njnoKhc5xjqMlfFPimHMba4OL6\nTnYzPQIDAQABo4GwMIGtMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFKyoKu4SMOFM\ngx5Ec7p0nrCkabvxMH4GA1UdIwR3MHWAFKyoKu4SMOFMgx5Ec7p0nrCkabvxoVKk\nUDBOMRIwEAYDVQQKEwlOT1ZBIFJPT1QxFjAUBgNVBAcTDU1vdW50YWluIFZpZXcx\nEzARBgNVBAgTCkNhbGlmb3JuaWExCzAJBgNVBAYTAlVTggkAnzNIjFSn+bgwDQYJ\nKoZIhvcNAQEEBQADgYEAXuvXlu1o/SVvykSLhHW8QiAY00yzN/eDzYmZGomgiuoO\n/x+ayVzbrz1UWZnBD+lC4hll2iELSmf22LjLoF+s/9NyPqHxGL3FrfatBkndaiF8\nAx/TMEyCPl7IQWi+3zzatqOKHSHiG7a9SGn/7o2aNTIWKVulfy5GvmbBjBM/0UE=\n-----END CERTIFICATE-----\n",
"private_key": null
}
}

View File

@ -0,0 +1,2 @@
<?xml version='1.0' encoding='UTF-8'?>
<certificate private_key="None" data="-----BEGIN CERTIFICATE-----&#10;MIICyzCCAjSgAwIBAgIJAJ8zSIxUp/m4MA0GCSqGSIb3DQEBBAUAME4xEjAQBgNV&#10;BAoTCU5PVkEgUk9PVDEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzETMBEGA1UECBMK&#10;Q2FsaWZvcm5pYTELMAkGA1UEBhMCVVMwHhcNMTIxMDE3MDEzMzM5WhcNMTMxMDE3&#10;MDEzMzM5WjBOMRIwEAYDVQQKEwlOT1ZBIFJPT1QxFjAUBgNVBAcTDU1vdW50YWlu&#10;IFZpZXcxEzARBgNVBAgTCkNhbGlmb3JuaWExCzAJBgNVBAYTAlVTMIGfMA0GCSqG&#10;SIb3DQEBAQUAA4GNADCBiQKBgQDXW4QfQQxJG4MqurqK8nU/Lge0mfNKxXj/Gwvg&#10;2sQVwxzmKfoxih8Nn6yt0yHMNjhoji1UoWI03TXUnPZRAZmsypGKZeBd7Y1ZOCPB&#10;XGZVGrQm+PB2kZU+3cD8fVKcueMLLeZ+LRt5d0njnoKhc5xjqMlfFPimHMba4OL6&#10;TnYzPQIDAQABo4GwMIGtMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFKyoKu4SMOFM&#10;gx5Ec7p0nrCkabvxMH4GA1UdIwR3MHWAFKyoKu4SMOFMgx5Ec7p0nrCkabvxoVKk&#10;UDBOMRIwEAYDVQQKEwlOT1ZBIFJPT1QxFjAUBgNVBAcTDU1vdW50YWluIFZpZXcx&#10;EzARBgNVBAgTCkNhbGlmb3JuaWExCzAJBgNVBAYTAlVTggkAnzNIjFSn+bgwDQYJ&#10;KoZIhvcNAQEEBQADgYEAXuvXlu1o/SVvykSLhHW8QiAY00yzN/eDzYmZGomgiuoO&#10;/x+ayVzbrz1UWZnBD+lC4hll2iELSmf22LjLoF+s/9NyPqHxGL3FrfatBkndaiF8&#10;Ax/TMEyCPl7IQWi+3zzatqOKHSHiG7a9SGn/7o2aNTIWKVulfy5GvmbBjBM/0UE=&#10;-----END CERTIFICATE-----&#10;"/>

View File

@ -0,0 +1,10 @@
{
"agent": {
"hypervisor": "%(hypervisor)s",
"os": "%(os)s",
"architecture": "%(architecture)s",
"version": "%(version)s",
"md5hash": "%(md5hash)s",
"url": "%(url)s"
}
}

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<agent>
<hypervisor>%(hypervisor)s</hypervisor>
<os>%(os)s</os>
<architecture>%(architecture)s</architecture>
<version>%(version)s</version>
<md5hash>%(md5hash)s</md5hash>
<url>%(url)s</url>
</agent>

View File

@ -0,0 +1,11 @@
{
"agent": {
"agent_id": "1",
"architecture": "x86",
"hypervisor": "hypervisor",
"md5hash": "add6bb58e139be103324d04d82d8f545",
"os": "os",
"url": "xxxxxxxxxxxx",
"version": "8.0"
}
}

View File

@ -0,0 +1,10 @@
<?xml version='1.0' encoding='UTF-8'?>
<agent>
<url>xxxxxxxxxxxx</url>
<hypervisor>hypervisor</hypervisor>
<md5hash>add6bb58e139be103324d04d82d8f545</md5hash>
<version>8.0</version>
<architecture>x86</architecture>
<os>os</os>
<agent_id>1</agent_id>
</agent>

View File

@ -0,0 +1,7 @@
{
"agent": {
"url": "%(url)s",
"md5hash": "%(md5hash)s",
"version": "%(version)s"
}
}

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<agent>
<version>%(version)s</version>
<url>%(url)s</url>
<md5hash>%(md5hash)s</md5hash>
</agent>

View File

@ -0,0 +1,8 @@
{
"agent": {
"agent_id": "1",
"md5hash": "add6bb58e139be103324d04d82d8f545",
"url": "xxx://xxxx/xxx/xxx",
"version": "7.0"
}
}

View File

@ -0,0 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<agent>
<url>xxx://xxxx/xxx/xxx</url>
<version>7.0</version>
<agent_id>1</agent_id>
<md5hash>add6bb58e139be103324d04d82d8f545</md5hash>
</agent>

View File

@ -0,0 +1,13 @@
{
"agents": [
{
"agent_id": "1",
"architecture": "x86",
"hypervisor": "hypervisor",
"md5hash": "add6bb58e139be103324d04d82d8f545",
"os": "os",
"url": "xxxxxxxxxxxx",
"version": "8.0"
}
]
}

View File

@ -0,0 +1,4 @@
<?xml version='1.0' encoding='UTF-8'?>
<agents>
<agent url="xxxxxxxxxxxx" hypervisor="hypervisor" md5hash="add6bb58e139be103324d04d82d8f545" version="8.0" architecture="x86" os="os" agent_id="1"/>
</agents>

View File

@ -0,0 +1,6 @@
{
"add_host":
{
"host": "%(host_name)s"
}
}

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<add_host host="%(host_name)s" />

View File

@ -0,0 +1,9 @@
{
"set_metadata":
{
"metadata":
{
"key": "value"
}
}
}

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<set_metadata>
<metadata>
<key>value</key>
</metadata>
</set_metadata>

View File

@ -0,0 +1,7 @@
{
"aggregate":
{
"name": "name",
"availability_zone": "nova"
}
}

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<aggregate name="name" availability_zone="nova" />

View File

@ -0,0 +1,11 @@
{
"aggregate": {
"availability_zone": "nova",
"created_at": "%(timestamp)s",
"deleted": 0,
"deleted_at": null,
"id": %(aggregate_id)s,
"name": "name",
"updated_at": null
}
}

View File

@ -0,0 +1,10 @@
<?xml version='1.0' encoding='UTF-8'?>
<aggregate>
<name>name</name>
<availability_zone>nova</availability_zone>
<deleted>False</deleted>
<created_at>%(timestamp)s</created_at>
<updated_at>None</updated_at>
<deleted_at>None</deleted_at>
<id>%(aggregate_id)s</id>
</aggregate>

View File

@ -0,0 +1,6 @@
{
"remove_host":
{
"host": "%(host_name)s"
}
}

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<remove_host host="%(host_name)s" />

View File

@ -0,0 +1,7 @@
{
"aggregate":
{
"name": "newname",
"availability_zone": "nova2"
}
}

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<aggregate name="newname" availability_zone="nova2" />

View File

@ -0,0 +1,15 @@
{
"aggregate": {
"availability_zone": "nova2",
"created_at": "%(timestamp)s",
"deleted": 0,
"deleted_at": null,
"hosts": [],
"id": 1,
"metadata": {
"availability_zone": "nova2"
},
"name": "newname",
"updated_at": "%(timestamp)s"
}
}

View File

@ -0,0 +1,14 @@
<?xml version='1.0' encoding='UTF-8'?>
<aggregate>
<name>newname</name>
<availability_zone>nova2</availability_zone>
<deleted>False</deleted>
<created_at>%(timestamp)s</created_at>
<updated_at>%(timestamp)s</updated_at>
<hosts/>
<deleted_at>None</deleted_at>
<id>1</id>
<metadata>
<availability_zone>nova2</availability_zone>
</metadata>
</aggregate>

View File

@ -0,0 +1,17 @@
{
"aggregate": {
"availability_zone": "nova",
"created_at": "%(timestamp)s",
"deleted": 0,
"deleted_at": null,
"hosts": [
"%(compute_host)s"
],
"id": 1,
"metadata": {
"availability_zone": "nova"
},
"name": "name",
"updated_at": null
}
}

View File

@ -0,0 +1,16 @@
<?xml version='1.0' encoding='UTF-8'?>
<aggregate>
<name>name</name>
<availability_zone>nova</availability_zone>
<deleted>False</deleted>
<created_at>%(timestamp)s</created_at>
<updated_at>None</updated_at>
<hosts>
<host>%(compute_host)s</host>
</hosts>
<deleted_at>None</deleted_at>
<id>1</id>
<metadata>
<availability_zone>nova</availability_zone>
</metadata>
</aggregate>

View File

@ -0,0 +1,15 @@
{
"aggregate": {
"availability_zone": "nova",
"created_at": "%(timestamp)s",
"deleted": 0,
"deleted_at": null,
"hosts": [],
"id": 1,
"metadata": {
"availability_zone": "nova"
},
"name": "name",
"updated_at": null
}
}

View File

@ -0,0 +1,14 @@
<?xml version='1.0' encoding='UTF-8'?>
<aggregate>
<name>name</name>
<availability_zone>nova</availability_zone>
<deleted>False</deleted>
<created_at>%(timestamp)s</created_at>
<updated_at>None</updated_at>
<hosts/>
<deleted_at>None</deleted_at>
<id>1</id>
<metadata>
<availability_zone>nova</availability_zone>
</metadata>
</aggregate>

View File

@ -0,0 +1,17 @@
{
"aggregates": [
{
"availability_zone": "nova",
"created_at": "%(timestamp)s",
"deleted": 0,
"deleted_at": null,
"hosts": [],
"id": 1,
"metadata": {
"availability_zone": "nova"
},
"name": "name",
"updated_at": null
}
]
}

View File

@ -0,0 +1,16 @@
<?xml version='1.0' encoding='UTF-8'?>
<aggregates>
<aggregate>
<name>name</name>
<availability_zone>nova</availability_zone>
<deleted>False</deleted>
<created_at>%(timestamp)s</created_at>
<updated_at>None</updated_at>
<hosts/>
<deleted_at>None</deleted_at>
<id>1</id>
<metadata>
<availability_zone>nova</availability_zone>
</metadata>
</aggregate>
</aggregates>

View File

@ -0,0 +1,16 @@
{
"aggregate": {
"availability_zone": "nova",
"created_at": "%(timestamp)s",
"deleted": 0,
"deleted_at": null,
"hosts": [],
"id": 1,
"metadata": {
"availability_zone": "nova",
"key": "value"
},
"name": "name",
"updated_at": null
}
}

View File

@ -0,0 +1,15 @@
<?xml version='1.0' encoding='UTF-8'?>
<aggregate>
<name>name</name>
<availability_zone>nova</availability_zone>
<deleted>False</deleted>
<created_at>%(timestamp)s</created_at>
<updated_at>None</updated_at>
<hosts/>
<deleted_at>None</deleted_at>
<id>1</id>
<metadata>
<key>value</key>
<availability_zone>nova</availability_zone>
</metadata>
</aggregate>

View File

@ -0,0 +1,15 @@
{
"aggregate": {
"availability_zone": "nova",
"created_at": "%(timestamp)s",
"deleted": 0,
"deleted_at": null,
"hosts": [],
"id": 1,
"metadata": {
"availability_zone": "nova"
},
"name": "name",
"updated_at": null
}
}

View File

@ -0,0 +1,14 @@
<?xml version='1.0' encoding='UTF-8'?>
<aggregate>
<name>name</name>
<availability_zone>nova</availability_zone>
<deleted>False</deleted>
<created_at>%(timestamp)s</created_at>
<updated_at>None</updated_at>
<hosts/>
<deleted_at>None</deleted_at>
<id>1</id>
<metadata>
<availability_zone>nova</availability_zone>
</metadata>
</aggregate>

View File

@ -0,0 +1,6 @@
{
"certificate": {
"data": "%(text)s",
"private_key": "%(text)s"
}
}

View File

@ -0,0 +1,2 @@
<?xml version='1.0' encoding='UTF-8'?>
<certificate private_key="%(text)s" data="%(text)s"/>

View File

@ -0,0 +1,6 @@
{
"certificate": {
"data": "%(text)s",
"private_key": null
}
}

View File

@ -0,0 +1,2 @@
<?xml version='1.0' encoding='UTF-8'?>
<certificate private_key="None" data="%(text)s"/>

View File

@ -0,0 +1,114 @@
# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Copyright 2012 Nebula, Inc.
# Copyright 2013 IBM Corp.
#
# Licensed 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.
from nova import db
from nova.db.sqlalchemy import models
from nova.tests.integrated.v3 import api_sample_base
class AgentsJsonTest(api_sample_base.ApiSampleTestBaseV3):
extension_name = "os-agents"
def setUp(self):
super(AgentsJsonTest, self).setUp()
fake_agents_list = [{'url': 'xxxxxxxxxxxx',
'hypervisor': 'hypervisor',
'architecture': 'x86',
'os': 'os',
'version': '8.0',
'md5hash': 'add6bb58e139be103324d04d82d8f545',
'id': '1'}]
def fake_agent_build_create(context, values):
values['id'] = '1'
agent_build_ref = models.AgentBuild()
agent_build_ref.update(values)
return agent_build_ref
def fake_agent_build_get_all(context, hypervisor):
agent_build_all = []
for agent in fake_agents_list:
if hypervisor and hypervisor != agent['hypervisor']:
continue
agent_build_ref = models.AgentBuild()
agent_build_ref.update(agent)
agent_build_all.append(agent_build_ref)
return agent_build_all
def fake_agent_build_update(context, agent_build_id, values):
pass
def fake_agent_build_destroy(context, agent_update_id):
pass
self.stubs.Set(db, "agent_build_create",
fake_agent_build_create)
self.stubs.Set(db, "agent_build_get_all",
fake_agent_build_get_all)
self.stubs.Set(db, "agent_build_update",
fake_agent_build_update)
self.stubs.Set(db, "agent_build_destroy",
fake_agent_build_destroy)
def test_agent_create(self):
# Creates a new agent build.
project = {'url': 'xxxxxxxxxxxx',
'hypervisor': 'hypervisor',
'architecture': 'x86',
'os': 'os',
'version': '8.0',
'md5hash': 'add6bb58e139be103324d04d82d8f545'
}
response = self._do_post('os-agents', 'agent-post-req',
project)
project['agent_id'] = 1
self._verify_response('agent-post-resp', project, response, 201)
return project
def test_agent_list(self):
# Return a list of all agent builds.
response = self._do_get('os-agents')
project = {'url': 'xxxxxxxxxxxx',
'hypervisor': 'hypervisor',
'architecture': 'x86',
'os': 'os',
'version': '8.0',
'md5hash': 'add6bb58e139be103324d04d82d8f545',
'agent_id': 1
}
self._verify_response('agents-get-resp', project, response, 200)
def test_agent_update(self):
# Update an existing agent build.
agent_id = 1
subs = {'version': '7.0',
'url': 'xxx://xxxx/xxx/xxx',
'md5hash': 'add6bb58e139be103324d04d82d8f545'}
response = self._do_put('os-agents/%s' % agent_id,
'agent-update-put-req', subs)
subs['agent_id'] = 1
self._verify_response('agent-update-put-resp', subs, response, 200)
def test_agent_delete(self):
# Deletes an existing agent build.
agent_id = 1
response = self._do_delete('os-agents/%s' % agent_id)
self.assertEqual(response.status, 204)
class AgentsXmlTest(AgentsJsonTest):
ctype = "xml"

View File

@ -0,0 +1,85 @@
# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Copyright 2012 Nebula, Inc.
# Copyright 2013 IBM Corp.
#
# Licensed 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.
from nova.tests.integrated.v3 import api_sample_base
class AggregatesSampleJsonTest(api_sample_base.ApiSampleTestBaseV3):
extension_name = "os-aggregates"
def test_aggregate_create(self):
subs = {
"aggregate_id": '(?P<id>\d+)'
}
response = self._do_post('os-aggregates', 'aggregate-post-req', subs)
subs.update(self._get_regexes())
return self._verify_response('aggregate-post-resp',
subs, response, 201)
def test_list_aggregates(self):
self.test_aggregate_create()
response = self._do_get('os-aggregates')
subs = self._get_regexes()
self._verify_response('aggregates-list-get-resp', subs, response, 200)
def test_aggregate_get(self):
agg_id = self.test_aggregate_create()
response = self._do_get('os-aggregates/%s' % agg_id)
subs = self._get_regexes()
self._verify_response('aggregates-get-resp', subs, response, 200)
def test_add_metadata(self):
agg_id = self.test_aggregate_create()
response = self._do_post('os-aggregates/%s/action' % agg_id,
'aggregate-metadata-post-req',
{'action': 'set_metadata'})
subs = self._get_regexes()
self._verify_response('aggregates-metadata-post-resp', subs,
response, 200)
def test_add_host(self):
aggregate_id = self.test_aggregate_create()
subs = {
"host_name": self.compute.host,
}
response = self._do_post('os-aggregates/%s/action' % aggregate_id,
'aggregate-add-host-post-req', subs)
subs.update(self._get_regexes())
self._verify_response('aggregates-add-host-post-resp', subs,
response, 200)
def test_remove_host(self):
self.test_add_host()
subs = {
"host_name": self.compute.host,
}
response = self._do_post('os-aggregates/1/action',
'aggregate-remove-host-post-req', subs)
subs.update(self._get_regexes())
self._verify_response('aggregates-remove-host-post-resp',
subs, response, 200)
def test_update_aggregate(self):
aggregate_id = self.test_aggregate_create()
response = self._do_put('os-aggregates/%s' % aggregate_id,
'aggregate-update-post-req', {})
subs = self._get_regexes()
self._verify_response('aggregate-update-post-resp',
subs, response, 200)
class AggregatesSampleXmlTest(AggregatesSampleJsonTest):
ctype = 'xml'

View File

@ -0,0 +1,36 @@
# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Copyright 2012 Nebula, Inc.
# Copyright 2013 IBM Corp.
#
# Licensed 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.
from nova.tests.integrated.v3 import api_sample_base
class CertificatesSamplesJsonTest(api_sample_base.ApiSampleTestBaseV3):
extension_name = "os-certificates"
def test_create_certificates(self):
response = self._do_post('os-certificates',
'certificate-create-req', {})
subs = self._get_regexes()
self._verify_response('certificate-create-resp', subs, response, 201)
def test_get_root_certificate(self):
response = self._do_get('os-certificates/root')
subs = self._get_regexes()
self._verify_response('certificate-get-root-resp', subs, response, 200)
class CertificatesSamplesXmlTest(CertificatesSamplesJsonTest):
ctype = 'xml'