public function getParentContainer(Container $container)
 {
     if (null !== $container->getParentId()) {
         return $this->parentContainer;
     }
     return $container;
 }
 public function __construct(Container $container, Container $parent = null)
 {
     $cmd = 'lxc-info -s -n ' . $container->getName();
     if (!empty($parent)) {
         $cmd = 'lxc-attach -n ' . $parent->getName() . ' -- ' . $cmd;
     }
     parent::__construct($cmd);
 }
    protected function createDummyProject()
    {
        $container = new Container();
        $container->setName('test')->setFriendlyName('Test')->setHostname('cluster.test.localdev')->setDomain('test.localdev')->setDnsZoneSerial('2015070501')->setLxcUtsName('test')->setLxcHwAddr('00:16:3e:e0:5c:c3')->setLxcRootFs('/var/lib/lxc/test/rootfs')->setNetworkAddress('10.100.1.0')->setIPAddress('10.100.1.1')->setDnsZoneTtl(604800)->setDnsZonePriMasterNs('ns.rainmaker.localdev')->setDnsZoneAdminEmail('hostmaster.rainmaker.localdev')->setDnsZoneRefresh(604800)->setDnsZoneRetry(86400)->setDnsZoneExpire(2419200)->setDnsZoneNegCacheTtl(604800)->setState(Container::STATE_RUNNING)->setProfileName('rainmaker/default-project');
        $json = '
{
  "mounts": [
    {
      "source": "/var/cache/lxc/rainmaker",
      "target": "{{container_rootfs}}/var/cache/lxc/rainmaker",
      "group": "bind"
    },
    {
      "source": "/srv/saltstack",
      "target": "{{container_rootfs}}/srv/saltstack",
      "group": "bind"
    }
  ],
  "exports": []
}
';
        $container->setProfileMetadata($json);
        return $container;
    }
 public function __construct(Container $project)
 {
     $cmd = 'lxc-destroy --name ' . escapeshellarg($project->getName());
     parent::__construct($cmd);
 }
    protected function createDummyProjectBranches()
    {
        $json = '
{
  "mounts": [
    {
      "source": "{{container_rootfs}}/var/www/html",
      "target": "/export/rainmaker/{{container_name}}",
      "group": "nfs"
    },
    {
      "source": "/srv/saltstack",
      "target": "{{container_rootfs}}/srv/saltstack",
      "group": "bind"
    }
  ],
  "exports": [
    {
      "source": "/export/rainmaker/{{container_name}}"
    }
  ]
}
';
        $containers = array();
        $container = new Container();
        $container->setName('test.prod')->setFriendlyName('Test [Prod]')->setHostname('test.localdev')->setDomain('test.localdev')->setDnsZoneSerial('2015070501')->setLxcUtsName('test.prod')->setLxcHwAddr('00:16:3e:e0:5c:c4')->setLxcRootFs('/var/lib/lxc/test.prod/rootfs')->setNetworkAddress('10.100.1.0')->setIPAddress('10.100.1.2')->setDnsZoneTtl(604800)->setDnsZonePriMasterNs('ns.rainmaker.localdev')->setDnsZoneAdminEmail('hostmaster.rainmaker.localdev')->setDnsZoneRefresh(604800)->setDnsZoneRetry(86400)->setDnsZoneExpire(2419200)->setDnsZoneNegCacheTtl(604800)->setState(Container::STATE_RUNNING)->setProfileName('rainmaker/default-branch')->setProfileMetadata($json)->setParentId(1);
        $containers[] = $container;
        $container = new Container();
        $container->setName('test.dev')->setFriendlyName('Test [Dev]')->setHostname('develop.test.localdev')->setDomain('test.localdev')->setDnsZoneSerial('2015070501')->setLxcUtsName('test.dev')->setLxcHwAddr('00:16:3e:e0:5c:c5')->setLxcRootFs('/var/lib/lxc/test.dev/rootfs')->setNetworkAddress('10.100.1.0')->setIPAddress('10.100.1.3')->setDnsZoneTtl(604800)->setDnsZonePriMasterNs('ns.rainmaker.localdev')->setDnsZoneAdminEmail('hostmaster.rainmaker.localdev')->setDnsZoneRefresh(604800)->setDnsZoneRetry(86400)->setDnsZoneExpire(2419200)->setDnsZoneNegCacheTtl(604800)->setState(Container::STATE_STOPPED)->setProfileName('rainmaker/default-branch')->setProfileMetadata($json)->setParentId(1);
        $containers[] = $container;
        return $containers;
    }
    protected function createDummyProjectBranchClone()
    {
        $container = new Container();
        $container->setName('test.dev')->setFriendlyName('Test [Dev]')->setHostname('develop.test.localdev')->setDomain('test.localdev')->setDnsZoneSerial('2015070501')->setParentId(1);
        $json = '
{
  "mounts": [
    {
      "source": "{{container_rootfs}}/var/www/html",
      "target": "/export/rainmaker/{{container_name}}",
      "group": "nfs"
    },
    {
      "source": "/srv/saltstack",
      "target": "{{container_rootfs}}/srv/saltstack",
      "group": "bind"
    }
  ],
  "exports": [
    {
      "source": "/export/rainmaker/{{container_name}}"
    }
  ]
}
';
        $container->setProfileMetadata($json);
        return $container;
    }
 public function __construct(Container $container)
 {
     $cmd = 'lxc-create --name ' . escapeshellarg($container->getName()) . ' --bdev btrfs --template rainmaker-project' . ' -- --profile ' . escapeshellarg($container->getProfileName()) . ' --version ' . escapeshellarg($container->getProfileVersion());
     parent::__construct($cmd);
 }
    protected function createDummyProjectBranch()
    {
        $container = new Container();
        $container->setName('test.prod')->setFriendlyName('Test [Prod]')->setHostname('test.localdev')->setDomain('test.localdev')->setDnsZoneSerial('2015070501')->setState(Container::STATE_PENDING_PROVISIONING)->setProfileName('rainmaker/default-branch')->setParentId(1);
        $json = '
{
  "mounts": [
    {
      "source": "{{container_rootfs}}/var/www/html",
      "target": "/export/rainmaker/{{container_name}}",
      "group": "nfs"
    },
    {
      "source": "/srv/saltstack",
      "target": "{{container_rootfs}}/srv/saltstack",
      "group": "bind"
    }
  ],
  "exports": [
    {
      "source": "/export/rainmaker/{{container_name}}"
    }
  ]
}
';
        $container->setProfileMetadata($json);
        return $container;
    }
 /**
  * Returns the (parent) project container for the given container. If the container is a project
  * branch container then its project container will be returned. If the container is a project
  * container then it will be returned.
  *
  * @param Container $container
  * @return Container
  */
 public function getParentContainer(Container $container)
 {
     if (null !== ($id = $container->getParentId())) {
         return $this->findOneById($id);
     }
     return $container;
 }
 /**
  * Stops a Rainmaker project Linux container.
  *
  * @param Container $container
  */
 public function stopProjectContainer(Container $container)
 {
     try {
         $process = new GetContainerStatusProcess($container);
         if (stristr($this->getProcessRunner()->run($process), 'running') === FALSE) {
             return;
         }
     } catch (ProcessFailedException $e) {
         echo $e->getMessage();
     }
     try {
         $process = new StopProjectContainerProcess($container);
         $this->getProcessRunner()->run($process);
         $container->setState(Container::STATE_STOPPED);
         $this->getEntityManager()->getRepository('Rainmaker:Container')->saveContainer($container);
     } catch (ProcessFailedException $e) {
         echo $e->getMessage();
     }
 }
 public function __construct(Container $branch, Container $project)
 {
     parent::__construct('lxc-attach -n ' . $project->getName() . ' -- lxc-start -d -n ' . $branch->getName());
 }
 public function __construct(Container $newBranchContainer, Container $sourceBranchContainer, Container $project)
 {
     parent::__construct('lxc-attach -n ' . $project->getName() . ' -- lxc-clone -s -B btrfs ' . escapeshellarg($sourceBranchContainer->getName()) . ' ' . escapeshellarg($newBranchContainer->getName()));
 }
 public function __construct(Container $container)
 {
     parent::__construct('lxc-stop -n ' . $container->getName());
 }
 public function __construct(Container $branch, Container $project)
 {
     $cmd = 'lxc-attach -n ' . $project->getName() . ' -- lxc-destroy --name ' . escapeshellarg($branch->getName());
     parent::__construct($cmd);
 }
 public function __construct(Container $branch, Container $project)
 {
     $cmd = 'lxc-attach -n ' . $project->getName() . ' -- lxc-create --name ' . escapeshellarg($branch->getName()) . ' --bdev btrfs --template rainmaker-project-branch' . ' -- --profile ' . escapeshellarg($branch->getProfileName()) . ' --version ' . escapeshellarg($branch->getProfileVersion());
     parent::__construct($cmd);
 }