diff -uNr a/fence/agents/compute/fence_compute.py b/fence/agents/compute/fence_compute.py
--- a/fence/agents/compute/fence_compute.py 2016-06-02 13:10:27.846973373 +0200
+++ b/fence/agents/compute/fence_compute.py 2016-06-02 13:11:47.642169455 +0200
@@ -89,7 +89,8 @@
# Since the detailed view for all flavors doesn't provide the extra specs,
# we need to call each of the flavor to get them.
for flavor in flavors:
- if flavor.get_keys().get(EVACUABLE_TAG).strip().lower() in TRUE_TAGS:
+ tag = flavor.get_keys().get(EVACUABLE_TAG)
+ if tag.strip().lower() in TRUE_TAGS:
result.append(flavor.id)
return result
@@ -98,23 +99,30 @@
images = nova.images.list(detailed=True)
for image in images:
if hasattr(image, 'metadata'):
- if image.metadata.get(EVACUABLE_TAG).strip.lower() in TRUE_TAGS:
+ tag = image.metadata.get(EVACUABLE_TAG)
+ if tag and tag.strip().lower() in TRUE_TAGS:
result.append(image.id)
return result
def _host_evacuate(options):
result = True
+ images = _get_evacuable_images()
+ flavors = _get_evacuable_flavors()
servers = nova.servers.list(search_opts={'host': options["--plug"], 'all_tenants': 1 })
+
if options["--instance-filtering"] == "False":
- logging.debug("Evacuating all images and flavors")
- evacuables = servers
- else:
- logging.debug("Filtering images and flavors")
- flavors = _get_evacuable_flavors()
- images = _get_evacuable_images()
+ logging.debug("Not evacuating anything")
+ evacuables = []
+ elif len(flavors) or len(images):
+ logging.debug("Filtering images and flavors: %s %s" % (repr(flavors), repr(images)))
# Identify all evacuable servers
+ logging.debug("Checking %s" % repr(servers))
evacuables = [server for server in servers
if _is_server_evacuable(server, flavors, images)]
+ logging.debug("Evacuating %s" % repr(evacuables))
+ else:
+ logging.debug("Evacuating all images and flavors")
+ evacuables = servers
if options["--no-shared-storage"] != "False":
on_shared_storage = False
@@ -267,10 +275,10 @@
all_opt["instance-filtering"] = {
"getopt" : "",
"longopt" : "instance-filtering",
- "help" : "--instance-filtering Only evacuate instances create from images and flavors with evacuable=true",
+ "help" : "--instance-filtering Allow instances created from images and flavors with evacuable=true to be evacuated (or all if no images/flavors have been tagged)",
"required" : "0",
- "shortdesc" : "Only evacuate flagged instances",
- "default" : "False",
+ "shortdesc" : "Allow instances to be evacuated",
+ "default" : "True",
"order": 5,
}
all_opt["no-shared-storage"] = {
diff -uNr a/tests/data/metadata/fence_compute.xml b/tests/data/metadata/fence_compute.xml
--- a/tests/data/metadata/fence_compute.xml 2016-06-02 13:10:27.830973534 +0200
+++ b/tests/data/metadata/fence_compute.xml 2016-06-02 13:11:47.642169455 +0200
@@ -50,8 +50,8 @@
-
- Only evacuate flagged instances
+
+ Allow instances to be evacuated