Beispiel #1
0
    def test_resource_save(self, mock_session):
        mock_session.configure_mock(base_url=BASE)
        mock_session.post_json.return_value = {
            'foo': {
                'uuid': '8240f9c7-0f28-4ca7-b92e-2f6441a0a6dd'
            }
        }
        r = Resource('foo', fq_name='domain:bar:foo')
        r['foo'] = 'bar'
        r.save()
        mock_session.post_json.assert_called_with(
            BASE + '/foos',
            {'foo': {
                'foo': 'bar',
                'fq_name': ['domain', 'bar', 'foo']
            }},
            cls=ResourceEncoder)

        mock_session.put_json.return_value = {
            'foo': {
                'uuid': '8240f9c7-0f28-4ca7-b92e-2f6441a0a6dd'
            }
        }
        r = Resource('foo', uuid='4c7dc905-3322-49c8-be5d-d4adb5571d41')
        r['foo'] = 'bar'
        r.save()
        mock_session.put_json.assert_called_with(
            BASE + '/foo/4c7dc905-3322-49c8-be5d-d4adb5571d41', {
                'foo': {
                    'foo': 'bar',
                    'uuid': '4c7dc905-3322-49c8-be5d-d4adb5571d41'
                }
            },
            cls=ResourceEncoder)
    def test_resource_save(self, mock_session):
        mock_session.configure_mock(base_url=BASE)
        mock_session.post_json.return_value = {
            'foo': {
                'uuid': '8240f9c7-0f28-4ca7-b92e-2f6441a0a6dd'
            }
        }
        r = Resource('foo', fq_name='domain:bar:foo')
        r['foo'] = 'bar'
        r.save()
        mock_session.post_json.assert_called_with(BASE + '/foos',
                                                  {'foo': {'foo': 'bar',
                                                           'fq_name': ['domain', 'bar', 'foo']}},
                                                  cls=ResourceEncoder)

        mock_session.put_json.return_value = {
            'foo': {
                'uuid': '8240f9c7-0f28-4ca7-b92e-2f6441a0a6dd'
            }
        }
        r = Resource('foo', uuid='4c7dc905-3322-49c8-be5d-d4adb5571d41')
        r['foo'] = 'bar'
        r.save()
        mock_session.put_json.assert_called_with(BASE + '/foo/4c7dc905-3322-49c8-be5d-d4adb5571d41',
                                                 {'foo': {
                                                     'foo': 'bar',
                                                     'uuid': '4c7dc905-3322-49c8-be5d-d4adb5571d41'
                                                 }},
                                                 cls=ResourceEncoder)
    def __call__(self, virtual_network_fqname=None, cidrs=None):
        vn = Resource('virtual-network',
                      fq_name=virtual_network_fqname,
                      fetch=True)

        cidrs = [netaddr.IPNetwork(cidr) for cidr in cidrs]
        ipam_subnets = self._get_network_ipam_subnets(vn)
        ipam_subnets_current = [{
            'subnet': {
                'ip_prefix': s['subnet']['ip_prefix'],
                'ip_prefix_len': s['subnet']['ip_prefix_len']
            }
        } for s in ipam_subnets]
        ipam_subnets_wanted = [{
            'subnet': {
                'ip_prefix': text_type(c.network),
                'ip_prefix_len': c.prefixlen
            }
        } for c in cidrs]

        modified = False
        for idx, subnet in enumerate(ipam_subnets_current):
            if subnet not in ipam_subnets_wanted:
                del ipam_subnets[idx]
                modified = True
        for subnet in ipam_subnets_wanted:
            if subnet not in ipam_subnets_current:
                ipam_subnets.append(subnet)
                modified = True
        if modified:
            vn.save()
Beispiel #4
0
 def _get_rt(self, fq_name, parent):
     rt = Resource('route-table', fq_name=fq_name, parent=parent)
     try:
         rt.fetch()
     except ResourceNotFound:
         rt['routes'] = {'route': []}
         if not self.dry_run:
             rt.save()
     return rt
 def __call__(self, appliance_set_name=None, driver=None):
     global_config = Resource('global-system-config',
                              fq_name='default-global-system-config')
     sas = Resource('service-appliance-set',
                    fq_name='default-global-system-config:%s' %
                    appliance_set_name,
                    parent=global_config,
                    service_appliance_driver=driver)
     sas.save()
    def __call__(self, analytics_name=None, analytics_ip=None):
        global_config = Resource('global-system-config',
                                 fq_name='default-global-system-config')
        analytics = Resource('analytics-node',
                             fq_name='default-global-system-config:%s' %
                             analytics_name,
                             parent=global_config,
                             analytics_node_ip_address=analytics_ip)

        analytics.save()
Beispiel #7
0
    def __call__(self, config_name=None, config_ip=None):

        global_config = Resource('global-system-config',
                                 fq_name='default-global-system-config')
        config = Resource('config-node',
                          fq_name='default-global-system-config:%s' %
                          config_name,
                          parent=global_config,
                          config_node_ip_address=config_ip)
        config.save()
Beispiel #8
0
class Linklocal(Command):
    service_name = Option(help='Linklocal service name', required=True)
    service_ip = Option(help='Linklocal service IP',
                        type=ip_type,
                        required=True)
    service_port = Option(help='Linklocal service port',
                          type=int,
                          required=True)
    fabric_dns_service_name = Option(help='DNS service name in the fabric')
    fabric_service_ip = Option(help='Service IP in the fabric', type=ip_type)
    fabric_service_port = Option(help='Service port in the fabric',
                                 type=int,
                                 required=True)

    def __call__(self,
                 service_name=None,
                 service_ip=None,
                 service_port=None,
                 fabric_dns_service_name=None,
                 fabric_service_ip=None,
                 fabric_service_port=None):

        if not fabric_dns_service_name and not fabric_service_ip:
            raise CommandError(
                '--fabric_dns_service_name or --fabric_service_ip required')

        self.linklocal_entry = {
            'ip_fabric_DNS_service_name': fabric_dns_service_name,
            'ip_fabric_service_ip': [],
            'ip_fabric_service_port': fabric_service_port,
            'linklocal_service_ip': service_ip,
            'linklocal_service_port': service_port,
            'linklocal_service_name': service_name
        }
        if fabric_service_ip:
            self.linklocal_entry['ip_fabric_service_ip'].append(
                fabric_service_ip)

        try:
            self.vrouter_config = Resource(
                'global-vrouter-config',
                fq_name=
                'default-global-system-config:default-global-vrouter-config',
                fetch=True)
        except ResourceNotFound:
            global_config = Resource('global-system-config',
                                     fq_name='default-global-system-config')
            self.vrouter_config = Resource(
                'global-vrouter-config',
                fq_name=
                'default-global-system-config:default-global-vrouter-config',
                parent=global_config)
            self.vrouter_config.save()
Beispiel #9
0
    def __call__(self, vrouter_ip=None, vrouter_name=None, vrouter_type=None):

        global_config = Resource('global-system-config',
                                 fq_name='default-global-system-config')
        vrouter = Resource('virtual-router',
                           fq_name='default-global-system-config:%s' %
                           vrouter_name,
                           parent=global_config,
                           virtual_router_ip_address=vrouter_ip)
        if vrouter_type:
            vrouter['virtual_router_type'] = [vrouter_type]
        vrouter.save()
Beispiel #10
0
    def __call__(self, modes=None):
        if len(modes) > 3:
            raise CommandError('Too much modes provided')
        try:
            vrouter_config = Resource(
                'global-vrouter-config',
                fq_name=
                'default-global-system-config:default-global-vrouter-config',
                fetch=True)
        except ResourceNotFound:
            global_config = Resource('global-system-config',
                                     fq_name='default-global-system-config')
            vrouter_config = Resource(
                'global-vrouter-config',
                fq_name=
                'default-global-system-config:default-global-vrouter-config',
                parent=global_config)

        vrouter_config['encapsulation_priorities'] = {'encapsulation': modes}
        vrouter_config.save()
    def test_resource_save(self, mock_session):
        mock_session.configure_mock(base_url=self.BASE)
        mock_session.fqname_to_id.return_value = '8240f9c7-0f28-4ca7-b92e-2f6441a0a6dd'
        mock_session.get_json.side_effect = [{
            'foo': {
                'uuid': '8240f9c7-0f28-4ca7-b92e-2f6441a0a6dd',
                'attr': 'bar',
                'fq_name': ['domain', 'bar', 'foo']
            }
        }, {
            'foo': {
                'uuid': '8240f9c7-0f28-4ca7-b92e-2f6441a0a6dd',
                'attr': 'foo',
                'fq_name': ['domain', 'bar', 'foo']
            }
        }]

        r1 = Resource('foo', fq_name='domain:bar:foo')
        r1['attr'] = 'bar'
        r1.save()
        mock_session.post_json.assert_called_with(
            self.BASE + '/foos',
            {'foo': {
                'attr': 'bar',
                'fq_name': ['domain', 'bar', 'foo']
            }},
            cls=ResourceEncoder)
        self.assertEqual(r1['attr'], 'bar')

        r1['attr'] = 'foo'
        r1.save()
        mock_session.put_json.assert_called_with(
            self.BASE + '/foo/8240f9c7-0f28-4ca7-b92e-2f6441a0a6dd', {
                'foo': {
                    'attr': 'foo',
                    'fq_name': ['domain', 'bar', 'foo'],
                    'uuid': '8240f9c7-0f28-4ca7-b92e-2f6441a0a6dd'
                }
            },
            cls=ResourceEncoder)
        self.assertEqual(r1['attr'], 'foo')
    def test_resource_save(self, mock_session):
        mock_session.configure_mock(base_url=BASE)
        mock_session.fqname_to_id.return_value = '8240f9c7-0f28-4ca7-b92e-2f6441a0a6dd'
        mock_session.get_json.side_effect = [
            {
                'foo': {
                    'uuid': '8240f9c7-0f28-4ca7-b92e-2f6441a0a6dd',
                    'attr': 'bar',
                    'fq_name': ['domain', 'bar', 'foo']
                }
            },
            {
                'foo': {
                    'uuid': '8240f9c7-0f28-4ca7-b92e-2f6441a0a6dd',
                    'attr': 'foo',
                    'fq_name': ['domain', 'bar', 'foo']
                }
            }
        ]

        r1 = Resource('foo', fq_name='domain:bar:foo')
        r1['attr'] = 'bar'
        r1.save()
        mock_session.post_json.assert_called_with(BASE + '/foos',
                                                  {'foo': {
                                                      'attr': 'bar',
                                                      'fq_name': ['domain', 'bar', 'foo']
                                                  }},
                                                  cls=ResourceEncoder)
        self.assertEqual(r1['attr'], 'bar')

        r1['attr'] = 'foo'
        r1.save()
        mock_session.put_json.assert_called_with(BASE + '/foo/8240f9c7-0f28-4ca7-b92e-2f6441a0a6dd',
                                                 {'foo': {
                                                     'attr': 'foo',
                                                     'fq_name': ['domain', 'bar', 'foo'],
                                                     'uuid': '8240f9c7-0f28-4ca7-b92e-2f6441a0a6dd'
                                                 }},
                                                 cls=ResourceEncoder)
        self.assertEqual(r1['attr'], 'foo')
Beispiel #13
0
    def __call__(self,
                 project_fqname=None,
                 virtual_network_name=None,
                 external=False,
                 shared=False):
        vn_fqname = '%s:%s' % (project_fqname, virtual_network_name)

        # fetch project to sync it from keystone if not already there
        project = Resource('project', fq_name=project_fqname, fetch=True)
        vn = Resource('virtual-network',
                      fq_name=vn_fqname,
                      parent=project,
                      router_external=external,
                      is_shared=shared)
        vn.save()

        if external:
            fip_pool = Resource('floating-ip-pool',
                                fq_name='%s:%s' %
                                (vn_fqname, 'floating-ip-pool'),
                                parent_type='virtual-network',
                                parent_uuid=vn.uuid)
            fip_pool.save()
    def __call__(self,
                 router_name=None,
                 router_ip=None,
                 router_port=None,
                 router_asn=None,
                 router_address_families=[],
                 router_type=None,
                 router_md5=None):

        default_ri = Resource('routing-instance',
                              fq_name=DEFAULT_RI_FQ_NAME,
                              check=True)
        router_fq_name = DEFAULT_RI_FQ_NAME + [router_name]

        bgp_router = Resource('bgp-router', fq_name=router_fq_name)
        if bgp_router.exists:
            raise CommandError("The BGP router %s already exists" %
                               FQName(router_fq_name))

        if router_type != 'contrail' and 'erm-vpn' in router_address_families:
            router_address_families.remove('erm-vpn')

        auth_data = None
        if router_md5:
            auth_data = {
                'key_items': [{
                    'key': router_md5,
                    'key_id': 0,
                }],
                'key_type': 'md5',
            }
        router_parameters = {
            'address': router_ip,
            'address_families': {
                'family': router_address_families,
            },
            'autonomous_system': router_asn,
            'identifier': router_ip,
            'port': router_port,
            'vendor': router_type,
            'auth_data': auth_data,
        }

        # full-mesh with existing BGP routers
        bgp_router_refs = []
        for bgp_router_neighbor in Collection('bgp-router',
                                              parent_uuid=default_ri.uuid,
                                              fetch=True):
            bgp_router_refs.append({
                'to': bgp_router_neighbor.fq_name,
                'attr': {
                    'session': [{
                        'attributes': [{
                            'address_families': {
                                'family': router_address_families,
                            },
                            'auth_data': auth_data,
                        }],
                    }],
                },
            })

        bgp_router = Resource('bgp-router',
                              fq_name=router_fq_name,
                              parent=default_ri,
                              bgp_router_parameters=router_parameters,
                              bgp_router_refs=bgp_router_refs)
        bgp_router.save()
 def __call__(self, asn=None):
     global_config = Resource('global-system-config',
                              fq_name='default-global-system-config',
                              check=True)
     global_config['autonomous_system'] = asn
     global_config.save()
Beispiel #16
0
from contrail_api_cli.resource import Resource

d = Resource('domain', fq_name=['default-domain']).fetch()
p = Resource('project', fq_name=['default-domain', 'service'], parent=d)
p.save()