def get_subnet(self, ctx, l3outside, gw_ip_mask):
     l3outside = self.mgr.get(ctx, l3outside)
     if l3outside:
         nat_bd = self._get_nat_bd(ctx, l3outside)
         sub = resource.Subnet(tenant_name=nat_bd.tenant_name,
                               bd_name=nat_bd.name,
                               gw_ip_mask=gw_ip_mask)
         return self.mgr.get(ctx, sub)
 def create_subnet(self, ctx, l3outside, gw_ip_mask):
     l3outside = self.mgr.get(ctx, l3outside)
     if l3outside:
         nat_bd = self._get_nat_bd(ctx, l3outside)
         sub = resource.Subnet(tenant_name=nat_bd.tenant_name,
                               bd_name=nat_bd.name,
                               gw_ip_mask=gw_ip_mask)
         if not self.mgr.get(ctx, sub):
             self.mgr.create(ctx, sub)
    def test_subnet(self):
        l3out = a_res.L3Outside(tenant_name='t1', name='o1',
                                display_name='OUT')
        self.ns.create_l3outside(self.ctx, l3out)

        self.ns.create_subnet(self.ctx, l3out, '200.10.20.1/28')
        sub = a_res.Subnet(tenant_name='t1', bd_name='EXT-o1',
                           gw_ip_mask='200.10.20.1/28')
        self._verify(present=[sub])

        self._assert_res_eq(sub,
                            self.ns.get_subnet(self.ctx, l3out,
                                               '200.10.20.1/28'))

        self.ns.delete_subnet(self.ctx, l3out, '200.10.20.1/28')
        self._verify(absent=[sub])

        self.assertIsNone(self.ns.get_subnet(self.ctx, l3out,
                                             '200.10.20.1/28'))
 def _check_delete_l3outside_with_vrf(self, stage):
     objs = [a_res.L3Outside(tenant_name='t1', name='o1',
                             display_name='OUT', vrf_name='EXT-o1'),
             a_res.Subnet(tenant_name='t1', bd_name='EXT-o1',
                          gw_ip_mask='200.10.20.1/28'),
             a_res.ExternalNetwork(
                 tenant_name='t1', l3out_name='o1', name='inet1',
                 display_name='INET1',
                 provided_contract_names=['EXT-o1'],
                 consumed_contract_names=['EXT-o1']),
             a_res.ExternalNetwork(
                 tenant_name='t1', l3out_name='o1', name='inet1_1',
                 display_name='INET1_1',
                 provided_contract_names=['EXT-o1'],
                 consumed_contract_names=['EXT-o1'])]
     objs += self._get_vrf_1_ext_net_1_objects()
     objs += self._get_l3out_objects()
     if stage == 'stage1':
         self._verify(present=objs)
     elif stage == 'stage2':
         self._verify(absent=objs)
     else:
         self.assertFalse(True, 'Unknown test stage %s' % stage)
    def test_update(self):
        htree = tree.StructuredHashTree()
        exp_tree = tree.StructuredHashTree()

        bd = self._get_example_aim_bd(tenant_name='t1', name='bd1')
        subnet = resource.Subnet(tenant_name='t1',
                                 bd_name='bd1',
                                 gw_ip_mask='10.0.0.1/24')

        fvBD_attr = {
            'arpFlood': 'no',
            'epMoveDetectMode': '',
            'limitIpLearnToSubnets': 'no',
            'ipLearning': 'yes',
            'unicastRoute': 'yes',
            'unkMacUcastAct': 'proxy',
            'nameAlias': ''
        }
        fvRsCtx_attr = {'tnFvCtxName': 'default'}
        fvSubnet_attr = {'scope': 'public', 'nameAlias': ''}

        self.maker.update(htree, [bd, subnet])

        bd_key = ('fvTenant|t1', 'fvBD|bd1')
        rsctx_key = ('fvTenant|t1', 'fvBD|bd1', 'fvRsCtx|rsctx')
        subnet_key = ('fvTenant|t1', 'fvBD|bd1', 'fvSubnet|10.0.0.1/24')

        exp_tree.add(bd_key, **fvBD_attr)
        exp_tree.add(rsctx_key, **fvRsCtx_attr)
        exp_tree.add(subnet_key, **fvSubnet_attr)
        self.assertEqual(exp_tree, htree)
        self.assertEqual({
            "attributes": mock.ANY,
            "monitored": False
        },
                         htree.find(bd_key).metadata.to_dict())
        self.assertEqual(
            {
                'related': True,
                "attributes": mock.ANY,
                "monitored": False
            },
            htree.find(rsctx_key).metadata.to_dict())
        self.assertEqual({
            "attributes": mock.ANY,
            "monitored": False
        },
                         htree.find(subnet_key).metadata.to_dict())

        bd.name = 'bd2'
        subnet.bd_name = 'bd2'
        self.maker.update(htree, [bd, subnet])

        bd_key = ('fvTenant|t1', 'fvBD|bd2')
        rsctx_key = ('fvTenant|t1', 'fvBD|bd2', 'fvRsCtx|rsctx')
        subnet_key = ('fvTenant|t1', 'fvBD|bd2', 'fvSubnet|10.0.0.1/24')
        exp_tree.add(bd_key, **fvBD_attr)
        exp_tree.add(rsctx_key, **fvRsCtx_attr)
        exp_tree.add(subnet_key, **fvSubnet_attr)
        self.assertEqual(exp_tree, htree)

        fvBD_attr['unkMacUcastAct'] = 'flood'
        fvRsCtx_attr = {'tnFvCtxName': 'shared'}
        bd.l2_unknown_unicast_mode = 'flood'
        bd.vrf_name = 'shared'
        self.maker.update(htree, [bd])

        exp_tree = exp_tree.add(('fvTenant|t1', 'fvBD|bd2'), **fvBD_attr)
        exp_tree.add(('fvTenant|t1', 'fvBD|bd2', 'fvRsCtx|rsctx'),
                     **fvRsCtx_attr)
        self.assertEqual(exp_tree, htree)
        self.assertEqual(exp_tree, htree)
        self.assertEqual({
            "attributes": mock.ANY,
            "monitored": False
        },
                         htree.find(bd_key).metadata.to_dict())
        self.assertEqual(
            {
                "attributes": mock.ANY,
                "monitored": False,
                'related': True
            },
            htree.find(rsctx_key).metadata.to_dict())
        self.assertEqual({
            "attributes": mock.ANY,
            "monitored": False
        },
                         htree.find(subnet_key).metadata.to_dict())
Пример #6
0
 def _get_example_aim_subnet(cls, **kwargs):
     example = resource.Subnet(
         tenant_name='t1', bd_name='test', gw_ip_mask='10.10.10.0/28')
     example.__dict__.update(kwargs)
     return example