Example #1
0
    def test_getnumberunits(self):
        # no units
        bundle = BundleParser(self.nounit)
        self.assertRaises(BundleError, bundle.getnumberunits, "mysql")

        # has units
        bundle = BundleParser(self.correct)
        self.assertEqual(1, bundle.getnumberunits("mysql"))
Example #2
0
    def deploybundle(self, bundle_data):
        self.logger.debug("Start the bundle deployment")

        bundle_parser = BundleParser(bundle_data)

        # generate a new bundle ID
        # [a-z] user_id timestamp
        import random
        import string
        import time
        bundle_id = ''.join([random.choice(string.ascii_lowercase), self.user_id, str(int(time.time() * 1000))])
        # replace all service names
        for service_name in list(bundle_parser.listservices()):
            service_id = ''.join([bundle_id, service_name])
            bundle_parser.setservicename(service_name, service_id)

        # adding entry to the database for the bundle
        bundle = Bundle(bundle_id, self.user_id, str(bundle_data))
        self.dbsession.add(bundle)

         # Deploy services
        self.logger.info("Deploying services for the bundle")
        for service_name in bundle_parser.listservices():
            service_charm = bundle_parser.getcharmname(service_name)
            service_units = bundle_parser.getnumberunits(service_name)

            # deploy the service for the given charm
            self.logger.debug("Deploying the service (%s) with the charm (%s) with (%s) unit(s)",
                              service_name, service_charm, service_units)
            self.logger.debug(self.juju_communication.deployservice(service_name, service_charm,
                                                                    num_units=service_units))

            if bundle_parser.isexposed(service_name):
                self.logger.debug("Exposing the service (%s)", service_name)
                self.logger.debug(self.juju_communication.expose(service_name))

            # adding entry to the database for the service
            self.logger.debug("Adding entry to the database")
            service = Service(service_name, bundle_id, service_units)
            self.dbsession.add(service)

        # Create relations
        self.logger.info("Deploying relations for the bundle")
        for relations in bundle_parser.getrelations():
            if len(relations) == 2:
                # add relation
                self.logger.debug("Adding relation between (%s and %s)", relations[0], relations[1])
                self.logger.debug(self.juju_communication.addrelation(relations[0], relations[1]))
            else:
                # skip relation
                self.logger.warn("Incomplete relation detected and won't be added")

        return bundle_id