Example #1
0
 def play_service(self, nodes, name):
     service = self.services[name]
     schedules = service.schedule(nodes)
     if len(schedules):
         L.info("Starting service %s %s times on %d nodes"%(
             name, len(schedules), len(nodes)))
         for node, schedule in schedules:
             self.play_by_schedule(node, schedule)
         L.ok("Service %s started OK"%name)
     else:
         L.ok("Service %s was running OK"%name)
     return schedules
Example #2
0
 def create_node(self, name, cfg=None, options=None):
     if not cfg: cfg = {}
     if not options: options = {}
     else: cfg.update(options)
     options['provider'] = cfg.get('provider', {'name': 'local'})
     iaas = options['provider'].get('driver', 'virtualbox')
     services = options['services'] = options.get('services', [])
     L.info("Creating new machine %s on %s"%(name, iaas))
     swarm = cfg.get('swarm-token', '')
     extra = ' '.join(options['provider'].get('extra', []))
     if not len(self.running_nodes):
         swarm_extra = ' --swarm --swarm-master --swarm-discovery token://%s'%swarm
     else:
         swarm_extra = ' --swarm --swarm-discovery token://%s'%swarm
     command = "docker-machine create --driver %s %s %s"%(
         iaas, extra, name)
     output = call(command)
     L.ok("Done creating %s on %s!"%(name, iaas))
     self.update_nodes()
Example #3
0
    def bootstrap(self):
        self.update_nodes()
        _updated = False
        for name, node in self.nodes.items():
            try: node.connect()
            except: pass
            if not node.exists or not node.name:
                L.info("Node not found, creating a new node")
                self.create_node(name, self.cfg)
                # Unset it so we really refresh it
                _updated = True
            node.cleanup_dead()
            L.ok("Node %s alive and ready!"%name)
        if _updated: self.update_nodes()

        played = []
        for s in self.base_services:
            played += self.play_service(self.nodes, s)

        if played:
            L.ok("Base services setup, cooling down while everything starts...")
            time.sleep(30)
        for s in self.dj_services + self.user_services:
            self.play_service(self.nodes, s)

        L.ok("Node setup OK!")
        return True