Example #1
0
    def test_validate_volumeattach_valid(self):
        t = template_format.parse(test_template_volumeattach % 'vdq')
        stack = parser.Stack(None, 'test_stack', parser.Template(t))

        self.m.StubOutWithMock(db_api, 'resource_get_by_name_and_stack')
        db_api.resource_get_by_name_and_stack(None, 'test_resource_name',
                                              stack).AndReturn(None)

        self.m.ReplayAll()
        volumeattach = stack.resources['MountPoint']
        self.assertTrue(volumeattach.validate() is None)
Example #2
0
    def test_validate_volumeattach_valid(self):
        t = template_format.parse(test_template_volumeattach % 'vdq')
        stack = parser.Stack(None, 'test_stack', parser.Template(t))

        self.m.StubOutWithMock(db_api, 'resource_get_by_name_and_stack')
        db_api.resource_get_by_name_and_stack(None, 'test_resource_name',
                                              stack).AndReturn(None)

        self.m.ReplayAll()
        volumeattach = stack.resources['MountPoint']
        self.assertTrue(volumeattach.validate() is None)
Example #3
0
    def test_validate_volumeattach_invalid(self):
        t = template_format.parse(test_template_volumeattach % 'sda')
        stack = parser.Stack(None, 'test_stack', parser.Template(t))

        self.m.StubOutWithMock(db_api, 'resource_get_by_name_and_stack')
        db_api.resource_get_by_name_and_stack(None, 'test_resource_name',
                                              stack).AndReturn(None)

        self.m.ReplayAll()
        volumeattach = stack.resources['MountPoint']
        self.assertRaises(exception.StackValidationFailed,
                          volumeattach.validate)
Example #4
0
    def test_validate_volumeattach_invalid(self):
        t = template_format.parse(test_template_volumeattach % 'sda')
        stack = parser.Stack(None, 'test_stack', parser.Template(t))

        self.m.StubOutWithMock(db_api, 'resource_get_by_name_and_stack')
        db_api.resource_get_by_name_and_stack(None, 'test_resource_name',
                                              stack).AndReturn(None)

        self.m.ReplayAll()
        volumeattach = stack.resources['MountPoint']
        self.assertRaises(exception.StackValidationFailed,
                          volumeattach.validate)
Example #5
0
    def __init__(self, name, json_snippet, stack):
        if "/" in name:
            raise ValueError(_('Resource name may not contain "/"'))

        self.stack = stack
        self.context = stack.context
        self.name = name
        self.json_snippet = json_snippet
        self.t = stack.resolve_static_data(json_snippet)
        self.properties = Properties(
            self.properties_schema, self.t.get("Properties", {}), self.stack.resolve_runtime_data, self.name
        )
        self.attributes = Attributes(self.name, self.attributes_schema, self._resolve_attribute)

        resource = db_api.resource_get_by_name_and_stack(self.context, name, stack.id)
        if resource:
            self.resource_id = resource.nova_instance
            self.action = resource.action
            self.status = resource.status
            self.status_reason = resource.status_reason
            self.id = resource.id
            self.data = resource.data
        else:
            self.resource_id = None
            # if the stack is being deleted, assume we've already been deleted
            if stack.action == stack.DELETE:
                self.action = self.DELETE
            else:
                self.action = self.INIT
            self.status = self.COMPLETE
            self.status_reason = ""
            self.id = None
            self.data = []
Example #6
0
    def __init__(self, name, json_snippet, stack):
        if '/' in name:
            raise ValueError(_('Resource name may not contain "/"'))

        self.stack = stack
        self.context = stack.context
        self.name = name
        self.json_snippet = json_snippet
        self.t = stack.resolve_static_data(json_snippet)
        self.properties = Properties(self.properties_schema,
                                     self.t.get('Properties', {}),
                                     self.stack.resolve_runtime_data,
                                     self.name)
        self.attributes = Attributes(self.name,
                                     self.attributes_schema,
                                     self._resolve_attribute)

        resource = db_api.resource_get_by_name_and_stack(self.context,
                                                         name, stack.id)
        if resource:
            self.resource_id = resource.nova_instance
            self.action = resource.action
            self.status = resource.status
            self.status_reason = resource.status_reason
            self.id = resource.id
            self.data = resource.data
        else:
            self.resource_id = None
            self.action = self.INIT
            self.status = self.COMPLETE
            self.status_reason = ''
            self.id = None
            self.data = []
Example #7
0
 def get_by_name_and_stack(cls, context, resource_name, stack_id):
     resource_db = db_api.resource_get_by_name_and_stack(
         context,
         resource_name,
         stack_id)
     resource = cls._from_db_object(cls(context), context, resource_db)
     return resource
Example #8
0
    def __init__(self, name, json_snippet, stack):
        if "/" in name:
            raise ValueError(_('Resource name may not contain "/"'))

        self.stack = stack
        self.context = stack.context
        self.name = name
        self.json_snippet = json_snippet
        self.t = stack.resolve_static_data(json_snippet)
        self.cached_t = None
        self.properties = Properties(
            self.properties_schema, self.t.get("Properties", {}), self.stack.resolve_runtime_data, self.name
        )

        resource = db_api.resource_get_by_name_and_stack(self.context, name, stack.id)
        if resource:
            self.resource_id = resource.nova_instance
            self.state = resource.state
            self.state_description = resource.state_description
            self.id = resource.id
        else:
            self.resource_id = None
            self.state = None
            self.state_description = ""
            self.id = None
Example #9
0
 def event_create(self, context, event):
     stack_name = event['stack']
     resource_name = event['resource']
     stack = db_api.stack_get_by_name(context, stack_name)
     resource = db_api.resource_get_by_name_and_stack(
         context, resource_name, stack.id)
     if not resource:
         return ['Unknown resource', None]
     new_event = {
         'name': event['message'],
         'resource_status_reason': event['reason'],
         'StackId': stack.id,
         'LogicalResourceId': resource.name,
         'PhysicalResourceId': None,
         'ResourceType': event['resource_type'],
         'ResourceProperties': {},
     }
     try:
         result = db_api.event_create(context, new_event)
         new_event['id'] = result.id
         return [None, new_event]
     except Exception as ex:
         logger.warn('db error %s' % str(ex))
         msg = 'Error creating event'
         return [msg, None]
Example #10
0
 def event_create(self, context, event):
     stack_name = event['stack']
     resource_name = event['resource']
     stack = db_api.stack_get_by_name(context, stack_name)
     resource = db_api.resource_get_by_name_and_stack(context,
                                                      resource_name,
                                                      stack.id)
     if not resource:
         return ['Unknown resource', None]
     new_event = {
         'name': event['message'],
         'resource_status_reason': event['reason'],
         'StackId': stack.id,
         'LogicalResourceId': resource.name,
         'PhysicalResourceId': None,
         'ResourceType': event['resource_type'],
         'ResourceProperties': {},
     }
     try:
         result = db_api.event_create(context, new_event)
         new_event['id'] = result.id
         return [None, new_event]
     except Exception as ex:
         logger.warn('db error %s' % str(ex))
         msg = 'Error creating event'
         return [msg, None]
Example #11
0
    def __init__(self, name, json_snippet, stack):
        if '/' in name:
            raise ValueError(_('Resource name may not contain "/"'))

        self.stack = stack
        self.context = stack.context
        self.name = name
        self.json_snippet = json_snippet
        self.t = stack.resolve_static_data(json_snippet)
        self.cached_t = None
        self.properties = Properties(self.properties_schema,
                                     self.t.get('Properties', {}),
                                     self.stack.resolve_runtime_data,
                                     self.name)

        resource = db_api.resource_get_by_name_and_stack(
            self.context, name, stack.id)
        if resource:
            self.resource_id = resource.nova_instance
            self.state = resource.state
            self.state_description = resource.state_description
            self.id = resource.id
        else:
            self.resource_id = None
            self.state = None
            self.state_description = ''
            self.id = None
Example #12
0
    def __init__(self, name, json_snippet, stack):
        if '/' in name:
            raise ValueError(_('Resource name may not contain "/"'))

        self.references = []
        self.stack = stack
        self.context = stack.context
        self.name = name
        self.t = stack.resolve_static_data(json_snippet)
        self.properties = Properties(self.properties_schema,
                                     self.t.get('Properties', {}),
                                     self.stack.resolve_runtime_data,
                                     self.name)

        resource = db_api.resource_get_by_name_and_stack(self.context,
                                                         name, stack.id)
        if resource:
            self.resource_id = resource.nova_instance
            self.state = resource.state
            self.state_description = resource.state_description
            self.id = resource.id
        else:
            self.resource_id = None
            self.state = None
            self.state_description = ''
            self.id = None
        self._nova = {}
        self._keystone = None
        self._swift = None
        self._quantum = None
Example #13
0
    def __init__(self, name, json_snippet, stack):
        if '/' in name:
            raise ValueError(_('Resource name may not contain "/"'))

        self.stack = stack
        self.context = stack.context
        self.name = name
        self.json_snippet = json_snippet
        self.t = stack.resolve_static_data(json_snippet)
        self.properties = Properties(self.properties_schema,
                                     self.t.get('Properties', {}),
                                     self._resolve_runtime_data, self.name)
        self.attributes = Attributes(self.name, self.attributes_schema,
                                     self._resolve_attribute)

        resource = db_api.resource_get_by_name_and_stack(
            self.context, name, stack.id)
        if resource:
            self.resource_id = resource.nova_instance
            self.action = resource.action
            self.status = resource.status
            self.status_reason = resource.status_reason
            self.id = resource.id
            self.data = resource.data
        else:
            self.resource_id = None
            # if the stack is being deleted, assume we've already been deleted
            if stack.action == stack.DELETE:
                self.action = self.DELETE
            else:
                self.action = self.INIT
            self.status = self.COMPLETE
            self.status_reason = ''
            self.id = None
            self.data = []
Example #14
0
    def _update_resource(self, res_name):
        if res_name in self.current_snippets.keys():
            # Resource is in new template, update it if it's in old template
            # otherwise create a new one
            #old_resource = resource.Resource.load(self.context,
             #                                     res_name,
              #                                    self.stack)
            old_resource = db_api.resource_get_by_name_and_stack(self.context, res_name, self.stack_id)
            new_resource = self.stack.resources[res_name]
            if old_resource:
                # update this
                LOG.debug("==== Resource found in both template")
                return self._process_new_resource_update(new_resource,
                                                         old_resource.rsrc_defn,
                                                         old_resource.nova_instance,
                                                         old_resource.version + 1)
            else:
                # new resource to be created
                LOG.debug("==== Resource found in new template only...creating it")
                return self._create_resource(new_resource)
        else:
            LOG.debug("==== Resource not found in new template...deleting")
            # resource not in new template; mark as deleted
            old_resource = db_api.resource_get_by_name_and_stack(
                self.context, res_name, self.stack_id)
            new_resource = old_resource
            new_resource.version = old_resource.version + 1
            new_resource.resource_id = old_resource.resource_id
            new_resource.id = None
            new_resource.store_update(old_resource.DELETE,
                                      old_resource.INIT,
                                      "Resource not in new template")

            # set physical resource id to none for old resource
            old_resource.resource_id = None
            old_resource.store_update(old_resource.action,
                                      old_resource.status,
                                      old_resource.status_reason)
            self.stack.add_resource(new_resource)
            return
Example #15
0
    def load(cls, context, name, definition, stack):
        '''
        Create a resource and load any associated state from the DB.

        Note that this is really inefficient if you have to do it for a group
        of resources. Use Resource.load_all_from_stack() where possible
        instead.
        '''
        resource = cls(name, definition, stack)
        if stack.id is not None:
            db_res = db_api.resource_get_by_name_and_stack(context, name,
                                                           stack.id)
            if db_res is not None:
                resource._load_data(db_res)
        return resource
Example #16
0
    def load(cls, context, name, definition, stack):
        '''
        Create a resource and load any associated state from the DB.

        Note that this is really inefficient if you have to do it for a group
        of resources. Use Resource.load_all_from_stack() where possible
        instead.
        '''
        resource = cls(name, definition, stack)
        if stack.id is not None:
            db_res = db_api.resource_get_by_name_and_stack(
                context, name, stack.id)
            if db_res is not None:
                resource._load_data(db_res)
        return resource
    def test_private_key(self):
        stack_name = "test_private_key"
        (t, stack) = self._setup_test_stack(stack_name)
        cs = cloud_server.CloudServer("cs_private_key", t["Resources"]["WebServer"], stack)

        # This gives the fake cloud server an id and created_time attribute
        cs._store_or_update(cs.CREATE, cs.IN_PROGRESS, "test_store")

        cs.private_key = "fake private key"
        self.ctx = utils.dummy_context()
        rs = db_api.resource_get_by_name_and_stack(self.ctx, "cs_private_key", stack.id)
        encrypted_key = rs.data[0]["value"]
        self.assertNotEqual(encrypted_key, "fake private key")
        decrypted_key = cs.private_key
        self.assertEqual(decrypted_key, "fake private key")
Example #18
0
    def test_post_success_to_handle(self):
        self.stack = self.create_stack()
        wc.WaitConditionHandle.get_status().AndReturn([])
        wc.WaitConditionHandle.get_status().AndReturn([])
        wc.WaitConditionHandle.get_status().AndReturn(["SUCCESS"])

        self.m.ReplayAll()

        self.stack.create()

        rsrc = self.stack["WaitForTheHandle"]
        self.assertEqual((rsrc.CREATE, rsrc.COMPLETE), rsrc.state)

        r = db_api.resource_get_by_name_and_stack(None, "WaitHandle", self.stack.id)
        self.assertEqual("WaitHandle", r.name)
        self.m.VerifyAll()
Example #19
0
    def test_private_key(self):
        stack_name = 'test_private_key'
        (t, stack) = self._setup_test_stack(stack_name)
        cs = cloud_server.CloudServer('cs_private_key',
                                      t['Resources']['WebServer'], stack)

        # This gives the fake cloud server an id and created_time attribute
        cs._store_or_update(cs.CREATE, cs.IN_PROGRESS, 'test_store')

        cs.private_key = 'fake private key'
        rs = db_api.resource_get_by_name_and_stack(None, 'cs_private_key',
                                                   stack.id)
        encrypted_key = rs.data[0]['value']
        self.assertNotEqual(encrypted_key, "fake private key")
        decrypted_key = cs.private_key
        self.assertEqual(decrypted_key, "fake private key")
Example #20
0
    def test_post_success_to_handle(self):
        self.stack = self.create_stack()
        wc.WaitConditionHandle.get_status().AndReturn([])
        wc.WaitConditionHandle.get_status().AndReturn([])
        wc.WaitConditionHandle.get_status().AndReturn(['SUCCESS'])

        self.m.ReplayAll()

        self.stack.create()

        rsrc = self.stack['WaitForTheHandle']
        self.assertEqual((rsrc.CREATE, rsrc.COMPLETE), rsrc.state)

        r = db_api.resource_get_by_name_and_stack(None, 'WaitHandle',
                                                  self.stack.id)
        self.assertEqual('WaitHandle', r.name)
        self.m.VerifyAll()
Example #21
0
    def __init__(self, name, json_snippet, stack):
        if '/' in name:
            raise ValueError(_('Resource name may not contain "/"'))

        self.stack = stack
        self.context = stack.context
        self.name = name
        self.json_snippet = json_snippet
        self.reparse()
        self.attributes = Attributes(self.name,
                                     self.attributes_schema,
                                     self._resolve_attribute)

        self.abandon_in_progress = False

        if stack.id:
            resource = db_api.resource_get_by_name_and_stack(self.context,
                                                             name, stack.id)
        else:
            resource = None

        if resource:
            self.resource_id = resource.nova_instance
            self.action = resource.action
            self.status = resource.status
            self.status_reason = resource.status_reason
            self.id = resource.id
            try:
                self._data = db_api.resource_data_get_all(self, resource.data)
            except exception.NotFound:
                self._data = {}
            self.created_time = resource.created_at
            self.updated_time = resource.updated_at
        else:
            self.resource_id = None
            # if the stack is being deleted, assume we've already been deleted
            if stack.action == stack.DELETE:
                self.action = self.DELETE
            else:
                self.action = self.INIT
            self.status = self.COMPLETE
            self.status_reason = ''
            self.id = None
            self._data = {}
            self.created_time = None
            self.updated_time = None
    def test_private_key(self):
        stack_name = 'test_private_key'
        (t, stack) = self._setup_test_stack(stack_name)
        cs = cloud_server.CloudServer('cs_private_key',
                                      t['Resources']['WebServer'],
                                      stack)

        # This gives the fake cloud server an id and created_time attribute
        cs._store_or_update(cs.CREATE, cs.IN_PROGRESS, 'test_store')

        cs.private_key = 'fake private key'
        rs = db_api.resource_get_by_name_and_stack(None,
                                                   'cs_private_key',
                                                   stack.id)
        encrypted_key = rs.data[0]['value']
        self.assertNotEqual(encrypted_key, "fake private key")
        decrypted_key = cs.private_key
        self.assertEqual(decrypted_key, "fake private key")
Example #23
0
    def test_post_success_to_handle(self):
        self.stack = self.create_stack()
        wc.WaitConditionHandle.get_status().AndReturn([])
        wc.WaitConditionHandle.get_status().AndReturn([])
        wc.WaitConditionHandle.get_status().AndReturn(['SUCCESS'])

        self.m.ReplayAll()

        self.stack.create()

        rsrc = self.stack.resources['WaitForTheHandle']
        self.assertEqual(rsrc.state,
                         (rsrc.CREATE, rsrc.COMPLETE))

        r = db_api.resource_get_by_name_and_stack(None, 'WaitHandle',
                                                  self.stack.id)
        self.assertEqual(r.name, 'WaitHandle')
        self.m.VerifyAll()
Example #24
0
    def test_post_failure_to_handle_count(self):
        self.stack = self.create_stack(template=test_template_wc_count)
        wc.WaitConditionHandle.get_status().AndReturn([])
        wc.WaitConditionHandle.get_status().AndReturn(["SUCCESS"])
        wc.WaitConditionHandle.get_status().AndReturn(["SUCCESS", "FAILURE"])

        self.m.ReplayAll()

        self.stack.create()

        rsrc = self.stack["WaitForTheHandle"]
        self.assertEqual((rsrc.CREATE, rsrc.FAILED), rsrc.state)
        reason = rsrc.status_reason
        self.assertTrue(reason.startswith("WaitConditionFailure:"))

        r = db_api.resource_get_by_name_and_stack(None, "WaitHandle", self.stack.id)
        self.assertEqual("WaitHandle", r.name)
        self.m.VerifyAll()
Example #25
0
    def test_post_success_to_handle(self):
        self.stack = self.create_stack()
        wc.WaitConditionHandle.get_status().AndReturn([])
        scheduler.TaskRunner._sleep(mox.IsA(int)).AndReturn(None)
        wc.WaitConditionHandle.get_status().AndReturn([])
        scheduler.TaskRunner._sleep(mox.IsA(int)).AndReturn(None)
        wc.WaitConditionHandle.get_status().AndReturn(['SUCCESS'])

        self.m.ReplayAll()

        self.stack.create()

        rsrc = self.stack.resources['WaitForTheHandle']
        self.assertEqual(rsrc.state, 'CREATE_COMPLETE')

        r = db_api.resource_get_by_name_and_stack(None, 'WaitHandle',
                                                  self.stack.id)
        self.assertEqual(r.name, 'WaitHandle')
        self.m.VerifyAll()
    def test_private_key(self):
        stack_name = 'test_private_key'
        (t, stack) = self._setup_test_stack(stack_name)
        server = cloud_server.CloudServer('server_private_key',
                                          t['Resources']['WebServer'], stack)

        # This gives the fake cloud server an id and created_time attribute
        server._store_or_update(server.CREATE, server.IN_PROGRESS,
                                'test_store')

        server.private_key = 'fake private key'
        self.ctx = utils.dummy_context()
        rs = db_api.resource_get_by_name_and_stack(self.ctx,
                                                   'server_private_key',
                                                   stack.id)
        encrypted_key = rs.data[0]['value']
        self.assertNotEqual(encrypted_key, "fake private key")
        decrypted_key = server.private_key
        self.assertEqual("fake private key", decrypted_key)
Example #27
0
    def test_post_success_to_handle(self):
        self.stack = self.create_stack()
        wc.WaitConditionHandle.get_status().AndReturn([])
        eventlet.sleep(1).AndReturn(None)
        wc.WaitConditionHandle.get_status().AndReturn([])
        eventlet.sleep(1).AndReturn(None)
        wc.WaitConditionHandle.get_status().AndReturn(['SUCCESS'])

        self.m.ReplayAll()

        self.stack.create()

        resource = self.stack.resources['WaitForTheHandle']
        self.assertEqual(resource.state, 'CREATE_COMPLETE')

        r = db_api.resource_get_by_name_and_stack(None, 'WaitHandle',
                                                  self.stack.id)
        self.assertEqual(r.name, 'WaitHandle')
        self.m.VerifyAll()
Example #28
0
    def test_post_success_to_handle_count(self):
        self.stack = self.create_stack(template=test_template_wc_count)
        wc.WaitConditionHandle.get_status().AndReturn([])
        wc.WaitConditionHandle.get_status().AndReturn(['SUCCESS'])
        wc.WaitConditionHandle.get_status().AndReturn(['SUCCESS', 'SUCCESS'])
        wc.WaitConditionHandle.get_status().AndReturn(
            ['SUCCESS', 'SUCCESS', 'SUCCESS'])

        self.m.ReplayAll()

        self.stack.create()

        rsrc = self.stack.resources['WaitForTheHandle']
        self.assertEqual(rsrc.state, (rsrc.CREATE, rsrc.COMPLETE))

        r = db_api.resource_get_by_name_and_stack(None, 'WaitHandle',
                                                  self.stack.id)
        self.assertEqual(r.name, 'WaitHandle')
        self.m.VerifyAll()
Example #29
0
    def test_post_failure_to_handle(self):
        self.stack = self.create_stack()
        wc.WaitConditionHandle.get_status().AndReturn([])
        wc.WaitConditionHandle.get_status().AndReturn([])
        wc.WaitConditionHandle.get_status().AndReturn(['FAILURE'])

        self.m.ReplayAll()

        self.stack.create()

        rsrc = self.stack.resources['WaitForTheHandle']
        self.assertEqual(rsrc.state, (rsrc.CREATE, rsrc.FAILED))
        reason = rsrc.status_reason
        self.assertTrue(reason.startswith('WaitConditionFailure:'))

        r = db_api.resource_get_by_name_and_stack(None, 'WaitHandle',
                                                  self.stack.id)
        self.assertEqual(r.name, 'WaitHandle')
        self.m.VerifyAll()
Example #30
0
    def test_post_failure_to_handle_count(self):
        self.stack = self.create_stack(template=test_template_wc_count)
        wc.WaitConditionHandle.get_status().AndReturn([])
        wc.WaitConditionHandle.get_status().AndReturn(['SUCCESS'])
        wc.WaitConditionHandle.get_status().AndReturn(['SUCCESS', 'FAILURE'])

        self.m.ReplayAll()

        self.stack.create()

        rsrc = self.stack['WaitForTheHandle']
        self.assertEqual((rsrc.CREATE, rsrc.FAILED), rsrc.state)
        reason = rsrc.status_reason
        self.assertTrue(reason.startswith('WaitConditionFailure:'))

        r = db_api.resource_get_by_name_and_stack(None, 'WaitHandle',
                                                  self.stack.id)
        self.assertEqual('WaitHandle', r.name)
        self.m.VerifyAll()
Example #31
0
    def test_post_failure_to_handle(self):
        self.stack = self.create_stack()
        wc.WaitConditionHandle.get_status().AndReturn([])
        wc.WaitConditionHandle.get_status().AndReturn([])
        wc.WaitConditionHandle.get_status().AndReturn(['FAILURE'])

        self.m.ReplayAll()

        self.stack.create()

        rsrc = self.stack['WaitForTheHandle']
        self.assertEqual((rsrc.CREATE, rsrc.FAILED), rsrc.state)
        reason = rsrc.status_reason
        self.assertTrue(reason.startswith('WaitConditionFailure:'))

        r = db_api.resource_get_by_name_and_stack(None, 'WaitHandle',
                                                  self.stack.id)
        self.assertEqual('WaitHandle', r.name)
        self.m.VerifyAll()
Example #32
0
    def test_post_complete_to_handle(self):
        self.stack = self.create_stack()
        heat_wch.HeatWaitConditionHandle.get_status().AndReturn(['SUCCESS'])
        heat_wch.HeatWaitConditionHandle.get_status().AndReturn(
            ['SUCCESS', 'SUCCESS'])
        heat_wch.HeatWaitConditionHandle.get_status().AndReturn(
            ['SUCCESS', 'SUCCESS', 'SUCCESS'])

        self.m.ReplayAll()

        self.stack.create()

        rsrc = self.stack['wait_condition']
        self.assertEqual((rsrc.CREATE, rsrc.COMPLETE), rsrc.state)

        r = db_api.resource_get_by_name_and_stack(None, 'wait_handle',
                                                  self.stack.id)
        self.assertEqual('wait_handle', r.name)
        self.m.VerifyAll()
Example #33
0
    def test_post_failure_to_handle_count(self):
        self.stack = self.create_stack(template=test_template_wc_count)
        wc.WaitConditionHandle.get_status().AndReturn([])
        wc.WaitConditionHandle.get_status().AndReturn(['SUCCESS'])
        wc.WaitConditionHandle.get_status().AndReturn(['SUCCESS', 'FAILURE'])

        self.m.ReplayAll()

        self.stack.create()

        rsrc = self.stack.resources['WaitForTheHandle']
        self.assertEqual(rsrc.state, (rsrc.CREATE, rsrc.FAILED))
        reason = rsrc.status_reason
        self.assertTrue(reason.startswith('WaitConditionFailure:'))

        r = db_api.resource_get_by_name_and_stack(None, 'WaitHandle',
                                                  self.stack.id)
        self.assertEqual(r.name, 'WaitHandle')
        self.m.VerifyAll()
    def test_private_key(self):
        stack_name = 'test_private_key'
        (t, stack) = self._setup_test_stack(stack_name)
        server = cloud_server.CloudServer('server_private_key',
                                          t['Resources']['WebServer'],
                                          stack)

        # This gives the fake cloud server an id and created_time attribute
        server._store_or_update(server.CREATE, server.IN_PROGRESS,
                                'test_store')

        server.private_key = 'fake private key'
        self.ctx = utils.dummy_context()
        rs = db_api.resource_get_by_name_and_stack(self.ctx,
                                                   'server_private_key',
                                                   stack.id)
        encrypted_key = rs.data[0]['value']
        self.assertNotEqual(encrypted_key, "fake private key")
        decrypted_key = server.private_key
        self.assertEqual("fake private key", decrypted_key)
Example #35
0
    def test_post_success_to_handle_count(self):
        self.stack = self.create_stack(template=test_template_wc_count)
        wc.WaitConditionHandle.get_status().AndReturn([])
        wc.WaitConditionHandle.get_status().AndReturn(['SUCCESS'])
        wc.WaitConditionHandle.get_status().AndReturn(['SUCCESS', 'SUCCESS'])
        wc.WaitConditionHandle.get_status().AndReturn(['SUCCESS', 'SUCCESS',
                                                       'SUCCESS'])

        self.m.ReplayAll()

        self.stack.create()

        rsrc = self.stack['WaitForTheHandle']
        self.assertEqual((rsrc.CREATE, rsrc.COMPLETE),
                         rsrc.state)

        r = db_api.resource_get_by_name_and_stack(None, 'WaitHandle',
                                                  self.stack.id)
        self.assertEqual('WaitHandle', r.name)
        self.m.VerifyAll()
Example #36
0
    def test_post_success_to_handle(self):
        self.stack = self.create_stack()
        wc.WaitConditionHandle.get_status().AndReturn([])
        scheduler.TaskRunner._sleep(mox.IsA(int)).AndReturn(None)
        wc.WaitConditionHandle.get_status().AndReturn([])
        scheduler.TaskRunner._sleep(mox.IsA(int)).AndReturn(None)
        wc.WaitConditionHandle.get_status().AndReturn(['SUCCESS'])

        self.m.ReplayAll()

        self.stack.create()

        rsrc = self.stack.resources['WaitForTheHandle']
        self.assertEqual(rsrc.state,
                         'CREATE_COMPLETE')

        r = db_api.resource_get_by_name_and_stack(None, 'WaitHandle',
                                                  self.stack.id)
        self.assertEqual(r.name, 'WaitHandle')
        self.m.VerifyAll()
Example #37
0
    def test_post_complete_to_handle(self):
        self.stack = self.create_stack()
        wc.HeatWaitConditionHandle.get_status().AndReturn(['SUCCESS'])
        wc.HeatWaitConditionHandle.get_status().AndReturn(['SUCCESS',
                                                           'SUCCESS'])
        wc.HeatWaitConditionHandle.get_status().AndReturn(['SUCCESS',
                                                           'SUCCESS',
                                                           'SUCCESS'])

        self.m.ReplayAll()

        self.stack.create()

        rsrc = self.stack['wait_condition']
        self.assertEqual((rsrc.CREATE, rsrc.COMPLETE),
                         rsrc.state)

        r = db_api.resource_get_by_name_and_stack(None, 'wait_handle',
                                                  self.stack.id)
        self.assertEqual('wait_handle', r.name)
        self.m.VerifyAll()
Example #38
0
    def test_post_failure_to_handle(self):
        self.stack = self.create_stack()
        wc.WaitConditionHandle.get_status().AndReturn([])
        scheduler.TaskRunner._sleep(mox.IsA(int)).AndReturn(None)
        wc.WaitConditionHandle.get_status().AndReturn([])
        scheduler.TaskRunner._sleep(mox.IsA(int)).AndReturn(None)
        wc.WaitConditionHandle.get_status().AndReturn(['FAILURE'])

        self.m.ReplayAll()

        self.stack.create()

        rsrc = self.stack.resources['WaitForTheHandle']
        self.assertEqual(rsrc.state, (rsrc.CREATE, rsrc.FAILED))
        reason = rsrc.status_reason
        self.assertTrue(reason.startswith('WaitConditionFailure:'))

        r = db_api.resource_get_by_name_and_stack(None, 'WaitHandle',
                                                  self.stack.id)
        self.assertEqual(r.name, 'WaitHandle')
        self.m.VerifyAll()
Example #39
0
    def test_post_failure_to_handle_count(self):
        self.stack = self.create_stack(template=test_template_wc_count)
        wc.WaitConditionHandle.get_status().AndReturn([])
        eventlet.sleep(1).AndReturn(None)
        wc.WaitConditionHandle.get_status().AndReturn(['SUCCESS'])
        eventlet.sleep(1).AndReturn(None)
        wc.WaitConditionHandle.get_status().AndReturn(['SUCCESS', 'FAILURE'])

        self.m.ReplayAll()

        self.stack.create()

        resource = self.stack.resources['WaitForTheHandle']
        self.assertEqual(resource.state, resource.CREATE_FAILED)
        reason = resource.state_description
        self.assertTrue(reason.startswith('WaitConditionFailure:'))

        r = db_api.resource_get_by_name_and_stack(None, 'WaitHandle',
                                                  self.stack.id)
        self.assertEqual(r.name, 'WaitHandle')
        self.m.VerifyAll()
Example #40
0
    def test_post_failure_to_handle(self):
        self.stack = self.create_stack()
        wc.WaitConditionHandle.get_status().AndReturn([])
        eventlet.sleep(1).AndReturn(None)
        wc.WaitConditionHandle.get_status().AndReturn([])
        eventlet.sleep(1).AndReturn(None)
        wc.WaitConditionHandle.get_status().AndReturn(['FAILURE'])

        self.m.ReplayAll()

        self.stack.create()

        resource = self.stack.resources['WaitForTheHandle']
        self.assertEqual(resource.state, resource.CREATE_FAILED)
        reason = resource.state_description
        self.assertTrue(reason.startswith('WaitConditionFailure:'))

        r = db_api.resource_get_by_name_and_stack(None, 'WaitHandle',
                                                  self.stack.id)
        self.assertEqual(r.name, 'WaitHandle')
        self.m.VerifyAll()
Example #41
0
    def test_post_failed_to_handle(self):
        self.stack = self.create_stack()
        heat_wch.HeatWaitConditionHandle.get_status().AndReturn(['SUCCESS'])
        heat_wch.HeatWaitConditionHandle.get_status().AndReturn(
            ['SUCCESS', 'SUCCESS'])
        heat_wch.HeatWaitConditionHandle.get_status().AndReturn(
            ['SUCCESS', 'SUCCESS', 'FAILURE'])

        self.m.ReplayAll()

        self.stack.create()

        rsrc = self.stack['wait_condition']
        self.assertEqual((rsrc.CREATE, rsrc.FAILED), rsrc.state)
        reason = rsrc.status_reason
        self.assertTrue(reason.startswith('WaitConditionFailure:'))

        r = db_api.resource_get_by_name_and_stack(None, 'wait_handle',
                                                  self.stack.id)
        self.assertEqual('wait_handle', r.name)
        self.m.VerifyAll()
Example #42
0
    def __init__(self, name, json_snippet, stack):
        self.references = []
        self.stack = stack
        self.context = stack.context
        self.name = name
        self.t = stack.resolve_static_data(json_snippet)
        self.properties = checkeddict.Properties(name, self.properties_schema)

        resource = db_api.resource_get_by_name_and_stack(self.context,
                                                         name, stack.id)
        if resource:
            self.instance_id = resource.nova_instance
            self.state = resource.state
            self.state_description = resource.state_description
            self.id = resource.id
        else:
            self.instance_id = None
            self.state = None
            self.state_description = ''
            self.id = None
        self._nova = {}
        self._keystone = None
Example #43
0
    def __init__(self, name, json_snippet, stack):
        self.references = []
        self.stack = stack
        self.context = stack.context
        self.name = name
        self.t = stack.resolve_static_data(json_snippet)
        self.properties = checkeddict.Properties(name, self.properties_schema)

        resource = db_api.resource_get_by_name_and_stack(
            self.context, name, stack.id)
        if resource:
            self.instance_id = resource.nova_instance
            self.state = resource.state
            self.state_description = resource.state_description
            self.id = resource.id
        else:
            self.instance_id = None
            self.state = None
            self.state_description = ''
            self.id = None
        self._nova = {}
        self._keystone = None
        self._swift = None
Example #44
0
    def test_post_success_to_handle_count(self):
        self.stack = self.create_stack(template=test_template_wc_count)
        wc.WaitConditionHandle.get_status().AndReturn([])
        eventlet.sleep(1).AndReturn(None)
        wc.WaitConditionHandle.get_status().AndReturn(['SUCCESS'])
        eventlet.sleep(1).AndReturn(None)
        wc.WaitConditionHandle.get_status().AndReturn(['SUCCESS', 'SUCCESS'])
        eventlet.sleep(1).AndReturn(None)
        wc.WaitConditionHandle.get_status().AndReturn(['SUCCESS', 'SUCCESS',
                                                       'SUCCESS'])

        self.m.ReplayAll()

        self.stack.create()

        resource = self.stack.resources['WaitForTheHandle']
        self.assertEqual(resource.state,
                         'CREATE_COMPLETE')

        r = db_api.resource_get_by_name_and_stack(None, 'WaitHandle',
                                                  self.stack.id)
        self.assertEqual(r.name, 'WaitHandle')
        self.m.VerifyAll()
Example #45
0
    def __init__(self, name, json_snippet, stack):
        self.t = json_snippet
        self.depends_on = []
        self.references = []
        self.stack = stack
        self.name = name
        resource = db_api.resource_get_by_name_and_stack(None, name, stack.id)
        if resource:
            self.instance_id = resource.nova_instance
            self.state = resource.state
            self.id = resource.id
        else:
            self.instance_id = None
            self.state = None
            self.id = None
        self._nova = {}
        if not 'Properties' in self.t:
            # make a dummy entry to prevent having to check all over the
            # place for it.
            self.t['Properties'] = {}

        stack.resolve_static_refs(self.t)
        stack.resolve_find_in_map(self.t)
Example #46
0
    def __init__(self, name, json_snippet, stack):
        if '/' in name:
            raise ValueError(_('Resource name may not contain "/"'))

        self.stack = stack
        self.context = stack.context
        self.name = name
        self.json_snippet = json_snippet
        self.reparse()
        self.attributes = Attributes(self.name,
                                     self.attributes_schema,
                                     self._resolve_attribute)

        if stack.id:
            resource = db_api.resource_get_by_name_and_stack(self.context,
                                                             name, stack.id)
        else:
            resource = None

        if resource:
            self.resource_id = resource.nova_instance
            self.action = resource.action
            self.status = resource.status
            self.status_reason = resource.status_reason
            self.id = resource.id
            self.data = resource.data
        else:
            self.resource_id = None
            # if the stack is being deleted, assume we've already been deleted
            if stack.action == stack.DELETE:
                self.action = self.DELETE
            else:
                self.action = self.INIT
            self.status = self.COMPLETE
            self.status_reason = ''
            self.id = None
            self.data = []
Example #47
0
 def event_create(self, context, event):
     stack_name = event["stack"]
     resource_name = event["resource"]
     stack = db_api.stack_get(None, stack_name)
     resource = db_api.resource_get_by_name_and_stack(None, resource_name, stack.id)
     if not resource:
         return ["Unknown resource", None]
     new_event = {
         "name": event["message"],
         "resource_status_reason": event["reason"],
         "stack_id": stack.id,
         "logical_resource_id": resource.name,
         "physical_resource_id": None,
         "resource_type": event["resource_type"],
         "resource_properties": {},
     }
     try:
         result = db_api.event_create(None, new_event)
         new_event["id"] = result.id
         return [None, new_event]
     except Exception as ex:
         logger.warn("db error %s" % str(ex))
         msg = "Error creating event"
         return [msg, None]
Example #48
0
 def get_by_name_and_stack(cls, context, resource_name, stack_id):
     resource_db = db_api.resource_get_by_name_and_stack(
         context, resource_name, stack_id)
     return cls._from_db_object(cls(context), context, resource_db)
 def load(cls, context, res_name, stack):
     resource = db_api.resource_get_by_name_and_stack(context, res_name, stack.id)
     return cls._from_db(resource)