diff options
13 files changed, 51 insertions, 6 deletions
diff --git a/doc/api_samples/os-services/service-disable-put-req.xml b/doc/api_samples/os-services/service-disable-put-req.xml new file mode 100644 index 000000000..598ffc0ca --- /dev/null +++ b/doc/api_samples/os-services/service-disable-put-req.xml @@ -0,0 +1,2 @@ +<?xml version='1.0' encoding='UTF-8'?> +<service host="host1" binary="nova-compute" /> diff --git a/doc/api_samples/os-services/service-disable-put-resp.xml b/doc/api_samples/os-services/service-disable-put-resp.xml new file mode 100644 index 000000000..f7569159d --- /dev/null +++ b/doc/api_samples/os-services/service-disable-put-resp.xml @@ -0,0 +1,2 @@ +<?xml version='1.0' encoding='UTF-8'?> +<service host="host1" binary="nova-compute" status="disabled" /> diff --git a/doc/api_samples/os-services/service-enable-put-req.json b/doc/api_samples/os-services/service-enable-put-req.json index d11afaed9..ffe896999 100644 --- a/doc/api_samples/os-services/service-enable-put-req.json +++ b/doc/api_samples/os-services/service-enable-put-req.json @@ -1,4 +1,4 @@ { "host": "host1", "service": "nova-compute" -}
\ No newline at end of file +} diff --git a/doc/api_samples/os-services/service-enable-put-req.xml b/doc/api_samples/os-services/service-enable-put-req.xml new file mode 100644 index 000000000..598ffc0ca --- /dev/null +++ b/doc/api_samples/os-services/service-enable-put-req.xml @@ -0,0 +1,2 @@ +<?xml version='1.0' encoding='UTF-8'?> +<service host="host1" binary="nova-compute" /> diff --git a/doc/api_samples/os-services/service-enable-put-resp.xml b/doc/api_samples/os-services/service-enable-put-resp.xml new file mode 100644 index 000000000..04c29ffa0 --- /dev/null +++ b/doc/api_samples/os-services/service-enable-put-resp.xml @@ -0,0 +1,2 @@ +<?xml version='1.0' encoding='UTF-8'?> +<service host="host1" binary="nova-compute" status="enabled" /> diff --git a/doc/api_samples/os-services/services-list-get-resp.xml b/doc/api_samples/os-services/services-list-get-resp.xml new file mode 100644 index 000000000..68809e9aa --- /dev/null +++ b/doc/api_samples/os-services/services-list-get-resp.xml @@ -0,0 +1,6 @@ +<services> + <service status="disabled" binary="nova-scheduler" zone="internal" state="up" host="host1" updated_at="2012-10-29T13:42:02.000000"/> + <service status="disabled" binary="nova-compute" zone="nova" state="up" host="host1" updated_at="2012-10-29T13:42:05.000000" /> + <service status="enabled" binary="nova-scheduler" zone="internal" state="down" host="host2" updated_at="2012-09-19T06:55:34.000000"/> + <service status="disabled" binary="nova-compute" zone="nova" state="down" host="host2" updated_at="2012-09-18T08:03:38.000000"/> +</services> diff --git a/nova/api/openstack/compute/contrib/services.py b/nova/api/openstack/compute/contrib/services.py index 558c31586..5b382f892 100644 --- a/nova/api/openstack/compute/contrib/services.py +++ b/nova/api/openstack/compute/contrib/services.py @@ -42,14 +42,14 @@ class ServicesIndexTemplate(xmlutil.TemplateBuilder): elem.set('zone') elem.set('status') elem.set('state') - elem.set('update_at') + elem.set('updated_at') return xmlutil.MasterTemplate(root, 1) -class ServicesUpdateTemplate(xmlutil.TemplateBuilder): +class ServiceUpdateTemplate(xmlutil.TemplateBuilder): def construct(self): - root = xmlutil.TemplateElement('host') + root = xmlutil.TemplateElement('service', selector='service') root.set('host') root.set('binary') root.set('status') @@ -57,6 +57,19 @@ class ServicesUpdateTemplate(xmlutil.TemplateBuilder): return xmlutil.MasterTemplate(root, 1) +class ServiceUpdateDeserializer(wsgi.XMLDeserializer): + def default(self, string): + node = xmlutil.safe_minidom_parse_string(string) + service = {} + service_node = self.find_first_child_named(node, 'service') + if service_node is None: + return service + service['host'] = service_node.getAttribute('host') + service['binary'] = service_node.getAttribute('binary') + + return dict(body=service) + + class ServiceController(object): def __init__(self): @@ -98,7 +111,8 @@ class ServiceController(object): 'updated_at': svc['updated_at']}) return {'services': svcs} - @wsgi.serializers(xml=ServicesUpdateTemplate) + @wsgi.deserializers(xml=ServiceUpdateDeserializer) + @wsgi.serializers(xml=ServiceUpdateTemplate) def update(self, req, id, body): """Enable/Disable scheduling for a service.""" context = req.environ['nova.context'] @@ -110,7 +124,6 @@ class ServiceController(object): disabled = True else: raise webob.exc.HTTPNotFound("Unknown action") - try: host = body['host'] binary = body['binary'] diff --git a/nova/tests/integrated/api_samples/os-services/service-disable-put-req.xml.tpl b/nova/tests/integrated/api_samples/os-services/service-disable-put-req.xml.tpl new file mode 100644 index 000000000..fc297bcd3 --- /dev/null +++ b/nova/tests/integrated/api_samples/os-services/service-disable-put-req.xml.tpl @@ -0,0 +1,2 @@ +<?xml version='1.0' encoding='UTF-8'?> +<service host="%(host)s" binary="%(binary)s" /> diff --git a/nova/tests/integrated/api_samples/os-services/service-disable-put-resp.xml.tpl b/nova/tests/integrated/api_samples/os-services/service-disable-put-resp.xml.tpl new file mode 100644 index 000000000..cc03298c5 --- /dev/null +++ b/nova/tests/integrated/api_samples/os-services/service-disable-put-resp.xml.tpl @@ -0,0 +1,2 @@ +<?xml version='1.0' encoding='UTF-8'?> +<service host="%(host)s" binary="%(binary)s" status="disabled" /> diff --git a/nova/tests/integrated/api_samples/os-services/service-enable-put-req.xml.tpl b/nova/tests/integrated/api_samples/os-services/service-enable-put-req.xml.tpl new file mode 100644 index 000000000..fc297bcd3 --- /dev/null +++ b/nova/tests/integrated/api_samples/os-services/service-enable-put-req.xml.tpl @@ -0,0 +1,2 @@ +<?xml version='1.0' encoding='UTF-8'?> +<service host="%(host)s" binary="%(binary)s" /> diff --git a/nova/tests/integrated/api_samples/os-services/service-enable-put-resp.xml.tpl b/nova/tests/integrated/api_samples/os-services/service-enable-put-resp.xml.tpl new file mode 100644 index 000000000..3cbf51b77 --- /dev/null +++ b/nova/tests/integrated/api_samples/os-services/service-enable-put-resp.xml.tpl @@ -0,0 +1,2 @@ +<?xml version='1.0' encoding='UTF-8'?> +<service host="%(host)s" binary="%(binary)s" status="enabled" /> diff --git a/nova/tests/integrated/api_samples/os-services/services-list-get-resp.xml.tpl b/nova/tests/integrated/api_samples/os-services/services-list-get-resp.xml.tpl new file mode 100644 index 000000000..e708aa78d --- /dev/null +++ b/nova/tests/integrated/api_samples/os-services/services-list-get-resp.xml.tpl @@ -0,0 +1,6 @@ +<services> + <service status="disabled" binary="nova-scheduler" zone="internal" state="up" host="host1" updated_at="%(timestamp)s"/> + <service status="disabled" binary="nova-compute" zone="nova" state="up" host="host1" updated_at="%(timestamp)s" /> + <service status="enabled" binary="nova-scheduler" zone="internal" state="down" host="host2" updated_at="%(timestamp)s"/> + <service status="disabled" binary="nova-compute" zone="nova" state="down" host="host2" updated_at="%(timestamp)s"/> +</services> diff --git a/nova/tests/integrated/test_api_samples.py b/nova/tests/integrated/test_api_samples.py index 8e816766d..0f893d551 100644 --- a/nova/tests/integrated/test_api_samples.py +++ b/nova/tests/integrated/test_api_samples.py @@ -2012,6 +2012,10 @@ class ServicesJsonTest(ApiSampleTestBase): subs, response) +class ServicesXmlTest(ServicesJsonTest): + ctype = 'xml' + + class SimpleTenantUsageSampleJsonTest(ServersSampleBase): extension_name = ("nova.api.openstack.compute.contrib.simple_tenant_usage." "Simple_tenant_usage") |