예제 #1
0
 /**
  * @depends testListsApplications
  */
 public function testAllowsMemberedListsInInputs(array $ids = array())
 {
     if (!count($ids)) {
         $this->markTestSkipped('No applications found on your account');
         return;
     }
     $command = $this->client->getCommand('DescribeApplications', array('ApplicationNames' => $ids));
     $result = $command->execute();
     $this->assertEquals(count($ids), count($result['Applications']));
 }
 public function testFactoryInitializesClient()
 {
     $client = ElasticBeanstalkClient::factory(array('key' => 'foo', 'secret' => 'bar', 'region' => 'us-west-2'));
     $this->assertInstanceOf('Aws\\Common\\Signature\\SignatureV4', $client->getSignature());
     $this->assertInstanceOf('Aws\\Common\\Credentials\\Credentials', $client->getCredentials());
     $this->assertEquals('https://elasticbeanstalk.us-west-2.amazonaws.com', $client->getBaseUrl());
 }
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $ebConfig = Yaml::parse(file_get_contents('.elasticbeanstalk/config.yml'));
     $applicationName = $ebConfig['global']['application_name'];
     $region = $ebConfig['global']['default_region'];
     $currentBranch = $this->_getCurrentBranch();
     if (!isset($ebConfig['branch-defaults'][$currentBranch]['environment'])) {
         $environmentName = null;
         $output->writeln("<comment>No environment set for '{$currentBranch}' in .elasticbeanstalk/config.yml</comment>");
         $output->writeln("<comment>Creating only new application version</comment>");
         $output->writeln("Set environment using 'eb use'");
     } else {
         $environmentName = $ebConfig['branch-defaults'][$currentBranch]['environment'];
     }
     $s3Bucket = $applicationName . '-eb-' . $region;
     $applicationVersion = trim(`git rev-parse --short HEAD`);
     $s3Key = "{$applicationName}-{$applicationVersion}.zip";
     $s3Client = S3Client::factory();
     $ebClient = ElasticBeanstalkClient::factory(array('region' => $region));
     $result = iterator_to_array($ebClient->getDescribeApplicationVersionsIterator(array('ApplicationName' => $applicationName, 'VersionLabels' => array($applicationVersion))));
     if (count($result) > 0) {
         $output->writeln("<error>Applicaton Version '{$applicationVersion}' already exists for '{$applicationName}'</error>");
         $output->writeln("You should commit changes before deployment.");
         return 1;
     }
     $output->writeln("Creating zip...");
     $cmd = "./vendor/bin/deploy create-archive";
     $this->_systemCheckRet($cmd, $input, $output);
     if (!$s3Client->doesBucketExist($s3Bucket)) {
         $output->writeln("Creating S3 Bucket '{$s3Bucket}...");
         $s3Client->createBucket(array('Bucket' => $s3Bucket, 'LocationConstraint' => $region));
     }
     $output->writeln("Uploading zip...");
     $s3Client->upload($s3Bucket, $s3Key, file_get_contents('deploy.zip'));
     $output->writeln("creating application version...");
     $ebClient->createApplicationVersion(array('ApplicationName' => $applicationName, 'VersionLabel' => $applicationVersion, 'SourceBundle' => array('S3Bucket' => $s3Bucket, 'S3Key' => $s3Key), 'AutoCreateApplication' => false));
     if ($environmentName) {
         $output->writeln("Updating environment...");
         $ebClient->updateEnvironment(array('EnvironmentName' => $environmentName, 'VersionLabel' => $applicationVersion));
     } else {
         $output->writeln("Now update (or create) environment using AWS console and use application version '{$applicationVersion}'.");
     }
 }
 /**
  * Get environment status.
  *
  * @param array $config
  *
  * @return array
  */
 protected function getStatus($config)
 {
     $client = ElasticBeanstalkClient::factory(['key' => $config['key'], 'secret' => $config['secret'], 'region' => $config['region']]);
     $environmentInfo = $client->describeEnvironments(['EnvironmentNames' => [$config['environment']]])->get('Environments');
     $environmentInfo = array_shift($environmentInfo);
     return ['elasticbeanstalk.html.twig', ['environment' => $config['environment'], 'status' => $environmentInfo['Status'], 'icon' => $this->statusToIcon($environmentInfo['Status']), 'class' => $this->statusToClass($environmentInfo['Status'])]];
 }