Beispiel #1
0
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $regions = ['eu-west-1', 'us-east-1'];
     /** @var QuestionHelper $helper */
     $helper = $this->getHelper('question');
     $required = function ($value) {
         if (!trim($value)) {
             throw new \Exception('Must not be empty');
         }
         return $value;
     };
     $validRegion = function ($value) use($regions) {
         if (!in_array($value, $regions)) {
             throw new \Exception('Not a valid region');
         }
         return $value;
     };
     $question = (new Question('Access Key: '))->setValidator($required);
     $accessKey = $helper->ask($input, $output, $question);
     $question = (new Question('Secret Key: '))->setValidator($required)->setHidden(true)->setHiddenFallback(true);
     $secretKey = $helper->ask($input, $output, $question);
     $question = (new Question('Default Region: '))->setValidator($validRegion)->setAutocompleterValues($regions);
     $region = $helper->ask($input, $output, $question);
     $this->configuration->write(compact('accessKey', 'secretKey', 'region'));
     $output->writeln('Credentials Saved.');
     return 1;
     // stops the runner from continuing
 }
Beispiel #2
0
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $configuration = $this->configuration->read();
     if (!$configuration) {
         $output->writeln('<error>No credentials stored. Run "ec2ssh config" first.</error>');
         return 1;
         // stops the runner from continuing
     }
     $client = new Ec2Client(['credentials' => ['key' => $configuration['accessKey'], 'secret' => $configuration['secretKey']], 'region' => $configuration['region'], 'version' => 'latest']);
     $response = $client->describeInstances();
     $instances = [];
     foreach ($response['Reservations'] as $reservation) {
         foreach ($reservation['Instances'] as $instance) {
             $key = $instance['KeyName'];
             $id = $instance['InstanceId'];
             $dns = $instance['PublicDnsName'];
             $zone = $instance['Placement']['AvailabilityZone'];
             $type = $instance['InstanceType'];
             $name = '';
             $role = '';
             $system = '';
             foreach ($instance['Tags'] as $tag) {
                 if ($tag['Key'] === 'System') {
                     $system = $tag['Value'];
                 }
                 if ($tag['Key'] === 'Name') {
                     $name = $tag['Value'];
                 }
                 if ($tag['Key'] === 'Role') {
                     $role = $tag['Value'];
                 }
             }
             $instances[$role . ' ' . $id] = compact('key', 'id', 'dns', 'zone', 'type', 'name', 'role', 'system');
         }
     }
     ksort($instances);
     $instances = array_values($instances);
     $table = new Table($output);
     $table->setHeaders(['', 'Role', 'ID', 'Size', 'DNS']);
     $lastRole = null;
     foreach ($instances as $i => $instance) {
         if ($instance['role'] !== $lastRole && $lastRole !== null) {
             $table->addRow(new TableSeparator());
         }
         $table->addRow([$i + 1, '<options=bold>' . $instance['role'] . '</>', $instance['id'], $instance['type'], $instance['dns']]);
         $lastRole = $instance['role'];
     }
     $table->render();
     $range = range(1, count($instances));
     $question = (new Question('Which box to SSH to? '))->setAutocompleterValues($range)->setValidator(function ($value) use($range) {
         if (!in_array($value, $range)) {
             throw new \Exception('Invalid choice');
         }
         return $value;
     });
     $choice = $this->getHelper('question')->ask($input, $output, $question);
     $instance = $instances[$choice - 1];
     $name = $instance['role'] . ' (' . $instance['id'] . ')';
     file_put_contents('/tmp/ec2ssh-tmp-server', 'ubuntu@' . $instance['dns']);
     $output->writeln('');
     $output->writeln('<info>Connecting to ' . $name . '...</info>');
 }