Example #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"))
Example #2
0
    def test_add_microservice_proxy(self):

        ctx = MockCloudifyContext(
            source=MockContext(
                {'instance': MockContext({'runtime_properties': {}})}),
            target=MockContext({
                'node':
                MockContext({'type': 'cloudify.nodes.DeploymentProxy'}),
                'instance':
                MockContext({
                    'runtime_properties': {
                        'swarm_info': {
                            'manager_ip': '1.1.1.1',
                            'manager_port': '1231'
                        }
                    }
                })
            }))
        current_ctx.set(ctx=ctx)
        tasks.add_microservice(
            proxy_ip_prop='["swarm_info"]["manager_ip"]',
            proxy_port_prop='["swarm_info"]["manager_port"]')
        self.assertEquals(ctx.source.instance.runtime_properties['ip'],
                          '1.1.1.1')
        self.assertEquals(ctx.source.instance.runtime_properties['port'],
                          '1231')
    def setUp(self):
        ctx = MockCloudifyContext(
            target=MockContext({
                'instance': MockNodeInstanceContext(
                    'sg1', {
                        OPENSTACK_ID_PROPERTY: 'test-sg',
                        OPENSTACK_NAME_PROPERTY: 'test-sg-name'
                    })
            }),
            source=MockContext({
                'node': mock.MagicMock(),
                'instance': MockNodeInstanceContext(
                    'server', {
                        OPENSTACK_ID_PROPERTY: 'server'
                    }
                )})
        )

        current_ctx.set(ctx)
        self.addCleanup(current_ctx.clear)
        findctx = mock.patch(
            'openstack_plugin_common._find_context_in_kw',
            return_value=ctx,
        )
        findctx.start()
        self.addCleanup(findctx.stop)
Example #4
0
    def test_bootstrap_context_key_pair(self, *_):
        """tests finding a key file via bootstrap context
        """

        name = 'test_bootstrap_context_key_pair'
        private_key_dir = tempfile.mkdtemp()
        private_key_path = '{0}/{1}.pem' \
            .format(private_key_dir, name)
        open(private_key_path, 'w').close()

        cloudify_agent = MockContext()
        cloudify_agent['agent_key_path'] = private_key_path

        bootstrap_ctx = BootstrapContext({'cloudify_agent': cloudify_agent})

        ctx = MockCloudifyContext(bootstrap_context=bootstrap_ctx,
                                  node_name=name)
        current_ctx.set(ctx=ctx)

        with mock.patch(
                'cloudify_aws.utils.get_single_connected_node_by_type') \
                as mock_get_connected:
            with mock.patch('cloudify_aws.ec2.instance.Instance.__init__') \
                    as mock_instance_init:
                mock_instance_init.return_value = None
                mock_get_connected.return_value = None
                output = instance.Instance()._get_private_key('')
                self.assertEqual(private_key_path, output)
 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
Example #6
0
    def test_add_microservice_node(self):

        ctx = MockCloudifyContext(source=MockContext(
            {'instance': MockContext({'runtime_properties': {}})}),
                                  target=MockContext({
                                      'node':
                                      MockContext({
                                          'type': 'cloudify.swarm.Manager',
                                          'properties': {
                                              'ip': '1.1.1.1',
                                              'port': '1232'
                                          }
                                      }),
                                      'instance':
                                      MockContext({})
                                  }))
        current_ctx.set(ctx=ctx)
        tasks.add_microservice()

        self.assertEquals(ctx.source.instance.runtime_properties['ip'],
                          '1.1.1.1')
        self.assertEquals(ctx.source.instance.runtime_properties['port'],
                          '1232')
Example #7
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 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
Example #9
0
    def mock_relationship_context(self, testname):

        instance_context = MockContext({
            'node': MockContext({
                'properties': {
                    constants.AWS_CONFIG_PROPERTY: {},
                    'use_external_resource': False,
                    'resource_id': ''
                }
            }),
            'instance': MockContext({
                'runtime_properties': {
                    'aws_resource_id': 'i-abc1234',
                    'public_ip_address': '127.0.0.1'
                }
            })
        })

        elasticip_context = MockContext({
            'node': MockContext({
                'properties': {
                    constants.AWS_CONFIG_PROPERTY: {},
                    'use_external_resource': False,
                    'resource_id': '',
                    'domain': '',
                }
            }),
            'instance': MockContext({
                'runtime_properties': {
                    'aws_resource_id': ''
                }
            })
        })

        relationship_context = MockCloudifyContext(
                node_id=testname, source=instance_context,
                target=elasticip_context)

        setattr(relationship_context.source.node,
                'type_hierarchy',
                ['cloudify.nodes.Compute', 'cloudify.aws.nodes.Instance']
                )

        return relationship_context
Example #10
0
    def mock_relationship_context(self, testname):

        source_context = MockContext({
            'node': MockContext({
                'properties': {
                    constants.AWS_CONFIG_PROPERTY: {},
                    'use_external_resource': False,
                    'resource_id': ''
                }
            }),
            'instance': MockContext({
                'runtime_properties': {
                    'aws_resource_id': 'r-abc1234'
                }
            })
        })

        target_context = MockContext({
            'node': MockContext({
                'properties': {
                    constants.AWS_CONFIG_PROPERTY: {},
                    'use_external_resource': False,
                    'resource_id': 'r-abc12345'
                }
            }),
            'instance': MockContext({
                'runtime_properties': {
                    'aws_resource_id': 'r-abc12346',
                    'relationships':
                        'cloudify.aws.relationships.root_connected_to_root'
                }
            })
        })

        relationship_context = MockCloudifyContext(
                node_id=testname, source=source_context,
                target=target_context)

        setattr(relationship_context.source.node,
                'type_hierarchy',
                ['cloudify.nodes.Root', 'cloudify.nodes.Root']
                )

        return relationship_context
    def mock_volume_relationship_context(self, testname):

        instance_context = MockContext({
            'node':
            MockContext({
                'properties': {
                    constants.AWS_CONFIG_PROPERTY: self._get_aws_config(),
                    'use_external_resource': False,
                    'resource_id': ''
                }
            }),
            'instance':
            MockContext({
                'runtime_properties': {
                    'aws_resource_id': 'i-abc1234',
                    'public_ip_address': '127.0.0.1'
                }
            })
        })

        volume_context = MockContext({
            'node':
            MockContext({
                'properties': {
                    constants.AWS_CONFIG_PROPERTY: self._get_aws_config(),
                    'use_external_resource': False,
                    'resource_id': '',
                    'zone': self.env.availability_zone,
                    'size': TEST_SIZE,
                    'device': TEST_DEVICE,
                }
            }),
            'instance':
            MockContext({'runtime_properties': {
                'aws_resource_id': ''
            }})
        })

        relationship_context = MockCloudifyContext(node_id=testname,
                                                   source=volume_context,
                                                   target=instance_context)

        return relationship_context
Example #12
0
    def mock_relationship_context(self, testname):

        instance_context = MockContext({
            'node':
            MockContext({
                'properties': {
                    constants.AWS_CONFIG_PROPERTY: {},
                    'use_external_resource': False,
                    'resource_id': ''
                }
            }),
            'instance':
            MockContext(
                {'runtime_properties': {
                    'aws_resource_id': 'i-abc1234'
                }})
        })

        volume_context = MockContext({
            'node':
            MockContext({
                'properties': {
                    constants.AWS_CONFIG_PROPERTY: {},
                    'use_external_resource': False,
                    'resource_id': '',
                    'zone': '',
                    'size': '',
                    'device': TEST_DEVICE
                }
            }),
            'instance':
            MockContext({'runtime_properties': {
                'aws_resource_id': ''
            }})
        })

        relationship_context = MockCloudifyContext(node_id=testname,
                                                   source=volume_context,
                                                   target=instance_context)

        return relationship_context
    def mock_relationship_context(self, testname):

        instance_context = MockContext({
            'node':
            MockContext({
                'properties': {
                    constants.AWS_CONFIG_PROPERTY: self._get_aws_config(),
                    'use_external_resource': False,
                    'resource_id': ''
                }
            }),
            'instance':
            MockContext({
                'runtime_properties': {
                    'aws_resource_id': 'i-abc1234',
                    'public_ip_address': '127.0.0.1'
                }
            })
        })

        elasticip_context = MockContext({
            'node':
            MockContext({
                'properties': {
                    constants.AWS_CONFIG_PROPERTY: self._get_aws_config(),
                    'use_external_resource': False,
                    'resource_id': '',
                }
            }),
            'instance':
            MockContext({'runtime_properties': {
                'aws_resource_id': ''
            }})
        })

        relationship_context = MockCloudifyContext(node_id=testname,
                                                   source=instance_context,
                                                   target=elasticip_context)

        return relationship_context
Example #14
0
    def mock_relationship_context(self, testname):

        server_context = MockContext({
            'node':
            MockContext({
                'properties': {
                    constants.AZURE_CONFIG_PROPERTY: self._get_azure_config()
                }
            }),
            'instance':
            MockContext({
                'runtime_properties': {
                    'azure_resource_id': 'i-abc1234',
                    'public_ip_address': '127.0.0.1'
                }
            })
        })

        publicip_context = MockContext({
            'node':
            MockContext({
                'properties': {
                    constants.AZURE_CONFIG_PROPERTY: self._get_azure_config(),
                    'use_external_resource': False,
                    'existing_pip_name': '',
                }
            }),
            'instance':
            MockContext({'runtime_properties': {
                PUBLIC_IP_KEY: 'public_ip_'
            }})
        })

        relationship_context = MockCloudifyContext(node_id=testname,
                                                   source=instance_context,
                                                   target=publicip_context)

        return relationship_context
    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"))
Example #16
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'})
Example #17
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'})