From aca8d56e9f297e63e7888c381bda753ae51e259f Mon Sep 17 00:00:00 2001
From: Apollon Oikonomopoulos <apollon@noc.grnet.gr>
Date: Fri, 25 Jun 2010 13:19:10 +0300
Subject: [PATCH] Export instance tags to instance hooks

Instance hooks now get an INSTANCE_TAGS environment variable, which contains a
space-delimited list of the affected instance's tags.

Also update the documentation to reflect the change.

Signed-off-by: Apollon Oikonomopoulos <apollon@noc.grnet.gr>
---
 doc/hooks.rst |  3 +++
 lib/cmdlib.py | 11 ++++++++++-
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/doc/hooks.rst b/doc/hooks.rst
index f19e8b24c..95089938b 100644
--- a/doc/hooks.rst
+++ b/doc/hooks.rst
@@ -587,6 +587,9 @@ MASTER_CAPABLE
 VM_CAPABLE
   Whether the node can host instances.
 
+INSTANCE_TAGS
+  A space-delimited list of the instance's tags.
+
 NODE_NAME
   The target node of this operation (not the node on which the hook
   runs).
diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index d8220f78d..f693f7a8b 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -783,7 +783,7 @@ def _ExpandInstanceName(cfg, name):
 
 def _BuildInstanceHookEnv(name, primary_node, secondary_nodes, os_type, status,
                           memory, vcpus, nics, disk_template, disks,
-                          bep, hvp, hypervisor_name):
+                          bep, hvp, hypervisor_name, tags):
   """Builds instance related env variables for hooks
 
   This builds the hook environment from individual variables.
@@ -815,6 +815,8 @@ def _BuildInstanceHookEnv(name, primary_node, secondary_nodes, os_type, status,
   @param hvp: the hypervisor parameters for the instance
   @type hypervisor_name: string
   @param hypervisor_name: the hypervisor for the instance
+  @type tags: list
+  @param tags: list of instance tags as strings
   @rtype: dict
   @return: the hook environment for this instance
 
@@ -862,6 +864,11 @@ def _BuildInstanceHookEnv(name, primary_node, secondary_nodes, os_type, status,
 
   env["INSTANCE_DISK_COUNT"] = disk_count
 
+  if not tags:
+    tags = []
+
+  env["INSTANCE_TAGS"] = " ".join(tags)
+
   for source, kind in [(bep, "BE"), (hvp, "HV")]:
     for key, value in source.items():
       env["INSTANCE_%s_%s" % (kind, key)] = value
@@ -925,6 +932,7 @@ def _BuildInstanceHookEnvByObject(lu, instance, override=None):
     'bep': bep,
     'hvp': hvp,
     'hypervisor_name': instance.hypervisor,
+    'tags': instance.tags,
   }
   if override:
     args.update(override)
@@ -7517,6 +7525,7 @@ class LUInstanceCreate(LogicalUnit):
       bep=self.be_full,
       hvp=self.hv_full,
       hypervisor_name=self.op.hypervisor,
+      tags=self.op.tags,
     ))
 
     nl = ([self.cfg.GetMasterNode(), self.op.pnode] +
-- 
GitLab