示例#1
0
 def test_set_directory_config(self, _):
     target = MockContext({
         'instance': MockNodeInstanceContext(
             id='terra_install-1',
             runtime_properties=self.get_terraform_conf_props(
                 test_dir2).get("terraform_config")
         ),
         'node': MockNodeContext(
             id='1',
             properties=self.get_terraform_conf_props(test_dir2)
         ), '_context': {
             'node_id': '1'
         }})
     source_work_dir = mkdtemp()
     source = MockContext({
         'instance': MockNodeInstanceContext(
             id='terra_module-1',
             runtime_properties={}),
         'node': MockNodeContext(
             id='2',
             properties=self.get_terraform_module_conf_props(
                 source_work_dir)
         ), '_context': {
             'node_id': '2'
         }})
     ctx = MockCloudifyContextRels(source=source, target=target)
     current_ctx.set(ctx=ctx)
     kwargs = {
         'ctx': ctx
     }
     set_directory_config(**kwargs)
     self.assertEqual(
         ctx.source.instance.runtime_properties.get("executable_path"),
         ctx.target.instance.runtime_properties.get("executable_path"))
示例#2
0
    def test_evaluate_negative(self):
        # given
        value = 5
        runtime_properties = {
            'key': {
                'nested_key1': {
                    'nested_key2': value
                }
            },
            'other_key': 'blahblahblah'
        }

        node_ctx = MockNodeContext()
        node_ctx.type_hierarchy = ['cloudify.nodes.Root']

        relationship_ctx = MockRelationshipContext(target=None,
                                                   type=self.relationship_type)
        relationship_ctx.type_hierarchy = [
            'cloudify.relationships.connected_to', self.relationship_type
        ]

        instance_ctx = MockNodeInstanceContext(
            runtime_properties=runtime_properties)

        # when
        result = self.full_rule.evaluate(relationship_ctx, node_ctx,
                                         instance_ctx)

        # then
        self.assertEquals((False, None), result)
示例#3
0
 def mock_ctx(self, test_vars, test_id,
              test_deployment_id, runtime_properties=None):
     ctx = MockContext()
     ctx.node = MockNodeContext(properties=test_vars)
     ctx.instance = MockNodeInstanceContext(
         id=test_id, runtime_properties=runtime_properties or {})
     ctx.deployment = mock.Mock()
     ctx.deployment.id = test_deployment_id
     ctx.type = NODE_INSTANCE
     return ctx
 def _get_ctx_mock(self, instance_id, boot):
     rel_specs = [MockRelationshipContext(
         target=MockRelationshipSubjectContext(node=MockNodeContext(
             properties={'boot': boot}), instance=MockNodeInstanceContext(
             runtime_properties={
                 OPENSTACK_TYPE_PROPERTY: VOLUME_OPENSTACK_TYPE,
                 OPENSTACK_ID_PROPERTY: instance_id,
                 VOLUME_BOOTABLE: False
             })))]
     ctx = mock.MagicMock()
     ctx.instance = MockNodeInstanceContext(relationships=rel_specs)
     ctx.logger = setup_logger('mock-logger')
     return ctx
 def mock_ctx(self,
              test_vars,
              test_id,
              test_deployment_id,
              runtime_properties=None):
     ctx = MockContext()
     ctx.node = MockNodeContext(properties=test_vars)
     ctx.bootstrap_context = BootstrapContext(
         common_test.BOOTSTRAP_CONTEXTS_WITHOUT_PREFIX[0])
     ctx.instance = MockNodeInstanceContext(
         id=test_id, runtime_properties=runtime_properties or {})
     ctx.deployment = mock.Mock()
     ctx.deployment.id = test_deployment_id
     ctx.type = NODE_INSTANCE
     ctx.logger = mock.Mock()
     return ctx
    def mock_ctx(self,
                 test_vars,
                 test_id,
                 test_deployment_id,
                 runtime_properties=None):

        ctx = MockContext()
        ctx.node = MockNodeContext(properties=test_vars)
        ctx.instance = MockNodeInstanceContext(
            id=test_id, runtime_properties=runtime_properties or {})
        ctx.deployment = mock.Mock()
        ctx.deployment.id = test_deployment_id
        ctx.bootstrap_context = mock.Mock()
        setattr(ctx.bootstrap_context, 'resources_prefix', '')
        ctx.type = NODE_INSTANCE
        ctx.logger = mock.Mock()

        return ctx
    def _make_vm_ctx_with_relationships(self, rel_specs, properties=None):
        """Prepare a mock CloudifyContext from the given relationship spec.

        rel_specs is an ordered collection of relationship specs - dicts
        with the keys "node" and "instance" used to construct the
        MockNodeContext and the MockNodeInstanceContext, and optionally a
        "type" key.
        Examples: [
            {},
            {"node": {"id": 5}},
            {
                "type": "some_type",
                "instance": {
                    "id": 3,
                    "runtime_properties":{}
                }
            }
        ]
        """
        if properties is None:
            properties = {}
        relationships = []
        for rel_spec in rel_specs:
            node = rel_spec.get('node', {})
            node_id = node.pop('id', uuid.uuid4().hex)

            instance = rel_spec.get('instance', {})
            instance_id = instance.pop(
                'id', '{0}_{1}'.format(node_id,
                                       uuid.uuid4().hex))
            if 'properties' not in node:
                node['properties'] = {}
            node_ctx = MockNodeContext(id=node_id, **node)
            instance_ctx = MockNodeInstanceContext(id=instance_id, **instance)

            rel_subject_ctx = MockRelationshipSubjectContext(
                node=node_ctx, instance=instance_ctx)
            rel_type = rel_spec.get('type')
            rel_ctx = MockRelationshipContext(target=rel_subject_ctx,
                                              type=rel_type)
            relationships.append(rel_ctx)
        return MockCloudifyContext(node_id='vm',
                                   properties=properties,
                                   relationships=relationships)
    def test_relationship_key_pair(self, *_):
        """tests finding a key file via relationship
        """

        name = 'test_relationship_key_pair'
        ctx = self.mock_ctx(name)
        current_ctx.set(ctx=ctx)

        ctx.node.properties['use_password'] = True
        private_key_dir = tempfile.mkdtemp()
        private_key_path = '{0}/{1}.pem' \
            .format(private_key_dir, name)
        open(private_key_path, 'w').close()

        key_pair_node = MockNodeContext(
            properties={'private_key_path': private_key_path})

        with mock.patch('ec2.utils.get_single_connected_node_by_type') \
                as mock_get_single_connected_node_by_type:
            mock_get_single_connected_node_by_type.return_value = key_pair_node
            output = instance._get_private_key('')
            self.assertEqual(private_key_path, output)
示例#9
0
    def setUp(self):
        self.properties = {'a': 1, 'b': 2}
        self.runtime_properties = {'a': 1, 'b': 2, 'c': 3}
        self.input_args = {'b': 11, 'c': 4, 'd': 5, 'e': 6}
        self.resolved_values = {'a': 10, 'd': 7, 'e': 8, 'f': 9}
        self.expected_result = {'a': 1, 'b': 2, 'c': 3, 'd': 5, 'e': 6, 'f': 9}

        self.mocked_node = MockNodeContext(properties=self.properties)
        self.mocked_instance = MockNodeInstanceContext(
            runtime_properties=self.runtime_properties)
        self.mocked_logger = Mock()
        self.mocked_logger_warn = Mock()
        self.mocked_logger.warn = self.mocked_logger_warn

        self.mocked_ctx = Mock()
        self.mocked_ctx.node = self.mocked_node
        self.mocked_ctx.instance = self.mocked_instance
        self.mocked_ctx.logger = self.mocked_logger

        self.mocked_resolver = Mock()
        self.mocked_resolver_resolve = Mock(return_value=self.resolved_values)
        self.mocked_resolver.resolve = self.mocked_resolver_resolve
    def _mock_item_to_resources_list_rel_ctx(self):
        # target
        tar_rel_subject_ctx = MockRelationshipSubjectContext(
            node=MockNodeContext(
                id='test_resources',
                type='cloudify.nodes.resources.List',
                properties={
                    'resource_config': [
                        '10.0.1.0/24',
                        '10.0.2.0/24',
                        '10.0.3.0/24'
                    ]
                }
            ),
            instance=MockNodeInstanceContext(
                id='test_resources_123456',
                runtime_properties={},
            )
        )

        rel_ctx = MockRelationshipContext(
            type='cloudify.relationships.resources.reserve_list_item',
            target=tar_rel_subject_ctx
        )

        # source
        src_ctx = MockCloudifyContext(
            node_id='test_item_123456',
            node_type='cloudify.nodes.resources.ListItem',
            source=self,
            target=tar_rel_subject_ctx,
            relationships=rel_ctx
        )

        current_ctx.set(src_ctx)
        return src_ctx
示例#11
0
    def test_remove_external_interface_from_router(self, mock_connection):
        target = MockContext({
            'instance':
            MockNodeInstanceContext(id='router-1',
                                    runtime_properties={
                                        RESOURCE_ID:
                                        'a95b5509-c122-4c2f-823e-884bb559afe2',
                                        OPENSTACK_TYPE_PROPERTY:
                                        OPENSTACK_TYPE_PROPERTY,
                                        OPENSTACK_NAME_PROPERTY: 'node-router',
                                    }),
            'node':
            MockNodeContext(id='1',
                            properties={
                                'client_config': self.client_config,
                                'resource_config': self.resource_config,
                                'use_external_resource': True,
                            }),
            '_context': {
                'node_id': '1'
            }
        })

        source = MockContext({
            'instance':
            MockNodeInstanceContext(id='subnet-1',
                                    runtime_properties={
                                        RESOURCE_ID:
                                        'a95b5509-c122-4c2f-823e-884bb559afe8',
                                        OPENSTACK_TYPE_PROPERTY:
                                        SUBNET_OPENSTACK_TYPE,
                                        OPENSTACK_NAME_PROPERTY: 'node-subnet',
                                    }),
            'node':
            MockNodeContext(id='1',
                            properties={
                                'client_config': self.client_config,
                                'resource_config': self.resource_config,
                                'use_external_resource': True,
                            }),
            '_context': {
                'node_id': '1'
            }
        })

        self._pepare_relationship_context_for_operation(
            deployment_id='RouterTest',
            source=source,
            target=target,
            ctx_operation_name='cloudify.interfaces.'
            'relationship_lifecycle.unlink',
            node_id='1')

        router_instance = openstack.network.v2.router.Router(
            **{
                'id': 'a95b5509-c122-4c2f-823e-884bb559afe8',
                'name': 'test_router',
                'description': 'test_description',
                'availability_zone_hints': ['1'],
                'availability_zones': ['2'],
                'created_at': 'timestamp1',
                'distributed': False,
                'external_gateway_info': {
                    'network_id': 'a95b5509-c122-4c2f-823e-884bb559afe4'
                },
                'flavor_id': '5',
                'ha': False,
                'revision': 7,
                'routes': [],
                'status': '9',
                'tenant_id': '10',
                'updated_at': 'timestamp2',
            })
        # Mock get router response
        mock_connection().network.get_router = \
            mock.MagicMock(return_value=router_instance)

        # Call remove interface from router
        router.remove_interface_from_router(
            **{'subnet_id': 'a95b5509-c122-4c2f-823e-884bb559afe8'})
示例#12
0
    def test_add_external_interface_to_router(self, mock_connection):
        target = MockContext({
            'instance':
            MockNodeInstanceContext(id='router-1',
                                    runtime_properties={
                                        RESOURCE_ID:
                                        'a95b5509-c122-4c2f-823e-884bb559afe2',
                                        OPENSTACK_TYPE_PROPERTY:
                                        OPENSTACK_TYPE_PROPERTY,
                                        OPENSTACK_NAME_PROPERTY: 'node-router',
                                    }),
            'node':
            MockNodeContext(id='1',
                            properties={
                                'client_config': self.client_config,
                                'resource_config': self.resource_config,
                                'use_external_resource': True,
                            }),
            '_context': {
                'node_id': '1'
            }
        })

        source = MockContext({
            'instance':
            MockNodeInstanceContext(id='subnet-1',
                                    runtime_properties={
                                        RESOURCE_ID:
                                        'a95b5509-c122-4c2f-823e-884bb559afe8',
                                        OPENSTACK_TYPE_PROPERTY:
                                        SUBNET_OPENSTACK_TYPE,
                                        OPENSTACK_NAME_PROPERTY: 'node-subnet',
                                    }),
            'node':
            MockNodeContext(id='1',
                            properties={
                                'client_config': self.client_config,
                                'resource_config': self.resource_config,
                                'use_external_resource': True,
                            }),
            '_context': {
                'node_id': '1'
            }
        })

        self._pepare_relationship_context_for_operation(
            deployment_id='RouterTest',
            source=source,
            target=target,
            ctx_operation_name='cloudify.interfaces.'
            'relationship_lifecycle.postconfigure',
            node_id='1')

        router_instance = openstack.network.v2.router.Router(
            **{
                'id': 'a95b5509-c122-4c2f-823e-884bb559afe8',
                'name': 'test_router',
                'description': 'test_description',
                'availability_zone_hints': ['1'],
                'availability_zones': ['2'],
                'created_at': 'timestamp1',
                'distributed': False,
                'external_gateway_info': {
                    'network_id': 'a95b5509-c122-4c2f-823e-884bb559afe4'
                },
                'flavor_id': '5',
                'ha': False,
                'revision': 7,
                'routes': [],
                'status': '9',
                'tenant_id': '10',
                'updated_at': 'timestamp2',
            })

        ports = [
            openstack.network.v2.port.Port(
                **{
                    'id':
                    'a95b5509-c122-4c2f-823e-884bb559afe1',
                    'name':
                    'test_port_1',
                    'admin_state_up':
                    True,
                    'binding_host_id':
                    '3',
                    'binding_profile': {
                        '4': 4
                    },
                    'binding_vif_details': {
                        '5': 5
                    },
                    'binding_vif_type':
                    '6',
                    'binding_vnic_type':
                    '7',
                    'created_at':
                    '2016-03-09T12:14:57.233772',
                    'data_plane_status':
                    '32',
                    'description':
                    'port_description_2',
                    'device_id':
                    '9',
                    'device_owner':
                    '10',
                    'dns_assignment': [{
                        '11': 11
                    }],
                    'dns_domain':
                    'a11',
                    'dns_name':
                    '12',
                    'extra_dhcp_opts': [{
                        '13': 13
                    }],
                    'fixed_ips':
                    [{
                        'subnet_id': 'a95b5509-c122-4c2f-823e-884bb559afe8'
                    }, {
                        'subnet_id': 'a95b5509-c122-4c2f-823e-884bb559afa7'
                    }],
                    'allowed_address_pairs': [{
                        'ip_address': '10.0.0.3'
                    }, {
                        'ip_address': '10.0.0.4'
                    }],
                    'mac_address':
                    '00-14-22-01-23-45',
                    'network_id':
                    '18',
                    'port_security_enabled':
                    True,
                    'qos_policy_id':
                    '21',
                    'revision_number':
                    22,
                    'security_groups': ['23'],
                    'status':
                    '25',
                    'tenant_id':
                    '26',
                    'updated_at':
                    '2016-07-09T12:14:57.233772',
                }),
            openstack.network.v2.port.Port(
                **{
                    'id':
                    'a95b5509-c122-4c2f-823e-884bb559afe2',
                    'name':
                    'test_port_1',
                    'admin_state_up':
                    True,
                    'binding_host_id':
                    '3',
                    'binding_profile': {
                        '4': 4
                    },
                    'binding_vif_details': {
                        '5': 5
                    },
                    'binding_vif_type':
                    '6',
                    'binding_vnic_type':
                    '7',
                    'created_at':
                    '2016-03-09T12:14:57.233772',
                    'data_plane_status':
                    '32',
                    'description':
                    'port_description_2',
                    'device_id':
                    '9',
                    'device_owner':
                    '10',
                    'dns_assignment': [{
                        '11': 11
                    }],
                    'dns_domain':
                    'a11',
                    'dns_name':
                    '12',
                    'extra_dhcp_opts': [{
                        '13': 13
                    }],
                    'fixed_ips': [{
                        'subnet_id':
                        'a95b5509-c122-4c2f-823e-884bb559afe5'
                    }, {
                        'subnet_id':
                        'a95b5509-c122-4c2f-823e-884bb559afa4'
                    }],
                    'allowed_address_pairs': [{
                        'ip_address': '10.0.0.3'
                    }, {
                        'ip_address': '10.0.0.4'
                    }],
                    'mac_address':
                    '00-41-23-23-23-24',
                    'network_id':
                    '18',
                    'port_security_enabled':
                    True,
                    'qos_policy_id':
                    '21',
                    'revision_number':
                    22,
                    'security_groups': ['23'],
                    'status':
                    '25',
                    'tenant_id':
                    '26',
                    'updated_at':
                    '2016-07-09T12:14:57.233772',
                }),
        ]

        # Mock list port response
        mock_connection().network.ports = mock.MagicMock(return_value=ports)

        # Mock get router response
        mock_connection().network.get_router = \
            mock.MagicMock(return_value=router_instance)

        # Call add interface to router
        router.add_interface_to_router(
            **{'subnet_id': 'a95b5509-c122-4c2f-823e-884bb559afe8'})
    def test_set_directory_config(self, _):
        def get_terraform_conf_props(module_root=test_dir2):
            return {
                "terraform_config": {
                    "executable_path": path.join(module_root, "terraform"),
                    "storage_path": module_root,
                    "plugins_dir": path.join(module_root, '.terraform',
                                             "plugins"),
                },
                "resource_config": {
                    "use_existing_resource":
                    False,
                    "installation_source":
                    "https://releases.hashicorp.com/terraform/0.11.7/"
                    "terraform_0.11.7_linux_amd64.zip",
                    "plugins": []
                }
            }

        def get_terraform_module_conf_props(module_root=test_dir2):
            return {
                "resource_config": {
                    "source": path.join(module_root, "template"),
                    "variables": {
                        "a": "var1",
                        "b": "var2"
                    },
                    "environment_variables": {
                        "EXEC_PATH": path.join(module_root, "execution"),
                    }
                }
            }

        target = MockContext({
            'instance':
            MockNodeInstanceContext(
                id='terra_install-1',
                runtime_properties=get_terraform_conf_props().get(
                    "terraform_config")),
            'node':
            MockNodeContext(id='1', properties=get_terraform_conf_props()),
            '_context': {
                'node_id': '1'
            }
        })
        source_work_dir = mkdtemp()
        source = MockContext({
            'instance':
            MockNodeInstanceContext(id='terra_module-1',
                                    runtime_properties={}),
            'node':
            MockNodeContext(
                id='2',
                properties=get_terraform_module_conf_props(source_work_dir)),
            '_context': {
                'node_id': '2'
            }
        })
        ctx = MockCloudifyContextRels(source=source, target=target)
        current_ctx.set(ctx=ctx)
        kwargs = {'ctx': ctx}
        set_directory_config(**kwargs)
        self.assertEqual(
            ctx.source.instance.runtime_properties.get("executable_path"),
            ctx.target.instance.runtime_properties.get("executable_path"))