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
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()
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