Support condition for output

Provides output condition for cfn/hot templates,
if the condition of output evaluates to false, will
set output value to None.

Change-Id: I0398e39541a4176ef5699331c10536c59f1cb3e7
Blueprint: support-conditions-function
diff --git a/functional/test_conditions.py b/functional/test_conditions.py
index d0f49a8..8850c49 100644
--- a/functional/test_conditions.py
+++ b/functional/test_conditions.py
@@ -32,6 +32,10 @@
     Properties:
       value: prod_res
     Condition: Prod
+Outputs:
+  res_value:
+    Value: {"Fn::GetAtt": [prod_res, output]}
+    Condition: Prod
 '''
 
 hot_template = '''
@@ -54,6 +58,10 @@
     properties:
       value: prod_res
     condition: prod
+outputs:
+  res_value:
+    value: {get_attr: [prod_res, output]}
+    condition: prod
 '''
 
 
@@ -74,10 +82,21 @@
         self.assertIn('test_res', res_names)
         self.assertNotIn('prod_res', res_names)
 
+    def output_assert_for_prod(self, stack_id):
+        output = self.client.stacks.output_show(stack_id,
+                                                'res_value')['output']
+        self.assertEqual('prod_res', output['output_value'])
+
+    def output_assert_for_test(self, stack_id):
+        output = self.client.stacks.output_show(stack_id,
+                                                'res_value')['output']
+        self.assertIsNone(output['output_value'])
+
     def test_stack_create_update_cfn_template_test_to_prod(self):
         stack_identifier = self.stack_create(template=cfn_template)
         resources = self.client.resources.list(stack_identifier)
         self.res_assert_for_test(resources)
+        self.output_assert_for_test(stack_identifier)
 
         parms = {'env_type': 'prod'}
         self.update_stack(stack_identifier,
@@ -86,6 +105,7 @@
 
         resources = self.client.resources.list(stack_identifier)
         self.res_assert_for_prod(resources)
+        self.output_assert_for_prod(stack_identifier)
 
     def test_stack_create_update_cfn_template_prod_to_test(self):
         parms = {'env_type': 'prod'}
@@ -93,6 +113,7 @@
                                              parameters=parms)
         resources = self.client.resources.list(stack_identifier)
         self.res_assert_for_prod(resources)
+        self.output_assert_for_prod(stack_identifier)
 
         parms = {'env_type': 'test'}
         self.update_stack(stack_identifier,
@@ -101,11 +122,13 @@
 
         resources = self.client.resources.list(stack_identifier)
         self.res_assert_for_test(resources)
+        self.output_assert_for_test(stack_identifier)
 
     def test_stack_create_update_hot_template_test_to_prod(self):
         stack_identifier = self.stack_create(template=hot_template)
         resources = self.client.resources.list(stack_identifier)
         self.res_assert_for_test(resources)
+        self.output_assert_for_test(stack_identifier)
 
         parms = {'env_type': 'prod'}
         self.update_stack(stack_identifier,
@@ -114,6 +137,7 @@
 
         resources = self.client.resources.list(stack_identifier)
         self.res_assert_for_prod(resources)
+        self.output_assert_for_prod(stack_identifier)
 
     def test_stack_create_update_hot_template_prod_to_test(self):
         parms = {'env_type': 'prod'}
@@ -121,6 +145,7 @@
                                              parameters=parms)
         resources = self.client.resources.list(stack_identifier)
         self.res_assert_for_prod(resources)
+        self.output_assert_for_prod(stack_identifier)
 
         parms = {'env_type': 'test'}
         self.update_stack(stack_identifier,
@@ -129,3 +154,4 @@
 
         resources = self.client.resources.list(stack_identifier)
         self.res_assert_for_test(resources)
+        self.output_assert_for_test(stack_identifier)