Пример #1
0
    def up(self):
        """
        Set up the topology.
        """

        nova = novaclient.Client('2', session=self.session)
        neutron = neutronclient.Client(endpoint_url=self.neutron_endpoint,
            token=self.token)
        neutron_if = NeutronIF()

        # Create nets
        logging.info('Creating networks...')
        try:
            for i in range(len(self.instances)):
                self.nets.append(self._create_net(neutron=neutron,
                    net_name=self.net_names[i]))
        except Exception as e:
            logging.error('ERROR at creating networks:')
            logging.error(e)
        else:
            logging.info('Success!')

        # Create subnets into the created nets
        logging.info('Creating subnetworks...')
        try:
            for i in range(len(self.instances)):
                self.subnets.append(self._create_subnet(neutron=neutron,
                    subnet_name=self.subnet_names[i],
                    subnet_prefix=self.net_prefixes[i],
                    net_id=self.nets[i]['id']))
        except Exception as e:
            logging.error('ERROR at creating subnetworks')
            logging.error(e)
        else:
            logging.info('Success!')

        # Create router and connect to net
        logging.info('Creating router...')
        try:
            self._create_router(neutron=neutron, nova=nova,
                net_name=self.net_names[0],
                router_name=self.router_name[0],
                port_names=self.router_ports)

            self._create_router(neutron=neutron, nova=nova,
                               net_name=self.net_names[1:],
                               router_name=self.router_name[1])
        except Exception as e:
            logging.error('ERROR at creating router')
            logging.error(e)
        else:
            logging.info('Success!')

        # Boot the load balancer instance
        logging.info('Booting load balancer instance')
        self._boot_instance(nova=nova, image=self.images[0],
                           flavor=self.flavors[0], nets=self.net_names[:2],
                           key_name=self.key_names[0],
                           secgroups=self.secgroups[0],
                           name='loadbalancer', userdata=self.userdata[0],
                           count=self.instances[0])
        logging.info('Success!')

        # Boot the server instances
        logging.info("Booting server instances")
        try:
            self._boot_instance(nova=nova, image=self.images[1],
                flavor=self.flavors[1], nets=self.net_names[1:],
                key_name=self.key_names[1],
                secgroups=self.secgroups[1],
                name='server', userdata=self.userdata[1],
                count=self.instances[1] )
        except Exception as e:
            logging.error('ERROR when creating servers')
            logging.error(e)
        else:
            logging.info('Success!')

        # Boot the storage instances
        logging.info('Booting storage instances')
        try:
            self._boot_instance(nova=nova, image=self.images[2],
                flavor=self.flavors[2], nets=self.net_names[2],
                key_name=self.key_names[2],
                secgroups=self.secgroups[2],
                name='persist_1', count=1,
                userdata=self.userdata[2],
                fixed_ip=[self.fixed_ips[2]])
            self._boot_instance(nova=nova, image=self.images[2],
                flavor=self.flavors[2], nets=self.net_names[2],
                key_name=self.key_names[2],
                secgroups=self.secgroups[2],
                name='persist_2', count=1,
                userdata=self.userdata[3],
                fixed_ip=[self.fixed_ips[3]])
        except Exception as e:
            logging.error('ERROR when creating storage instances')
            logging.error(e)
        else:
            logging.info('Success!')

        # Allocate a floating IP and associate to balancer instance
        logging.info('Allocating IP')
        try:
            for server in nova.servers.list():
                if server.name == 'loadbalancer':
                    id_ = server.id
            nova.floating_ips.create(pool='ExtNet')
            floating_ips = nova.floating_ips.list()
            floating_ip = floating_ips[0].ip
            nova.servers.add_floating_ip(server=id_,
                                         address=floating_ip)

        except Exception as e:
            logging.error('ERROR when allocating IP')
            logging.error(e)
        else:
            logging.info('Success!')

        # Create Firewall
        logging.info('Creating FWaaS')
        try:
            for fw_rule in self.fw_opts['rules']:
                neutron_if.firewall_rule_create(fw_rule)
            neutron_if.firewall_policy_create(name=self.fw_opts['policy_name'],
                                             fw_rules=self.fw_opts['policy_rules'])

            neutron_if.firewall_create(name=self.fw_opts['fw_name'],
                                      fw_policy=self.fw_opts['policy_name'],
                                      router=self.fw_opts['fw_router'])
        except Exception as e:
            logging.error('ERROR at creating FWaaS')
            logging.error(e)
        else:
            logging.info('Success!')