예제 #1
0
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $config = $this->get('config');
     $projectName = $config->get('[project][name]');
     $services = $config->get('[project][public_services]');
     $em = $this->get('entity_manager');
     $projectRepository = $em->getRepository('Mindgruve\\Gruver\\Entity\\Project');
     $serviceRepository = $em->getRepository('Mindgruve\\Gruver\\Entity\\Service');
     $project = $projectRepository->loadProjectByName($projectName);
     if (!$project) {
         $output->writeln('<info>Adding PROJECT: ' . $projectName);
         $project = new Project();
         $project->setName($projectName);
         $project->setStatus(StatusInterface::STATUS_ENABLED);
         $em->persist($project);
         $em->flush();
     }
     foreach ($services as $item) {
         $serviceName = $item['name'];
         $hosts = $item['hosts'];
         $ports = $item['ports'];
         $haproxyBackend = isset($item['haproxy_append']['backend']) ? implode("\n    ", $item['haproxy_append']['backend']) : '';
         /**
          * @todo open up so more flexible
          */
         if ($hosts == array()) {
             throw new \Exception('Each service must have a host right now');
         }
         if ($ports != array(80)) {
             throw new \Exception('Only port 80 is supported right now');
         }
         $service = $serviceRepository->findOneBy(array('name' => $serviceName, 'project' => $project));
         if (!$service) {
             $output->writeln('<info>Adding SERVICE: ' . $serviceName);
             $service = new Service();
             $service->setStatus(StatusInterface::STATUS_ENABLED);
             if ($ports != array(80)) {
                 throw new \Exception('Only port 80 is supported at this time.');
             }
             $service->setName($serviceName);
             $service->setProject($project);
             $project->addService($service);
             $em->persist($service);
         }
         if ($service->getPublicHosts() != $hosts) {
             $service->setPublicHosts($hosts);
             $output->writeln('<info>Modifying hosts for SERVICE: ' . $serviceName . '</info>');
         }
         if ($service->getPublicPorts() != $ports) {
             $service->setPublicPorts($ports);
             $output->writeln('<info>Modifying ports for SERVICE: ' . $serviceName . '</info>');
         }
         if ($service->getHAProxyBackend() != $haproxyBackend) {
             $service->setHAProxyBackend($haproxyBackend);
             $output->writeln('<info>Modifying haproxy_backend for SERVICE: ' . $serviceName . '</info>');
         }
         $project->setConfigHash($config->getConfigHash());
         $em->flush();
     }
 }
 /**
  * {@inheritDoc}
  */
 public function updateTimestamps()
 {
     $this->__initializer__ && $this->__initializer__->__invoke($this, 'updateTimestamps', []);
     return parent::updateTimestamps();
 }