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'])]]; }