コード例 #1
0
 public function getRoutingTable($type, $aws, $networkInterfaceId = null, $vpcId)
 {
     //Check for routing table
     $filter = array(array('name' => RouteTableFilterNameType::vpcId(), 'value' => $vpcId), array('name' => RouteTableFilterNameType::tagKey(), 'value' => 'scalr-rt-type'), array('name' => RouteTableFilterNameType::tagValue(), 'value' => $type));
     $list = $aws->ec2->routeTable->describe(null, $filter);
     if ($list->count() > 0) {
         if ($type == \Scalr_Role_Behavior_Router::INTERNET_ACCESS_FULL) {
             $routingTable = $list->get(0);
         } else {
             /* @var $routingTable \Scalr\Service\Aws\Ec2\DataType\RouteTableData */
             foreach ($list as $rTable) {
                 foreach ($rTable->tagSet as $tag) {
                     if ($tag->key == 'scalr-vpc-nid' && $tag->value == $networkInterfaceId) {
                         $routingTable = $rTable;
                         break;
                     }
                 }
                 if ($routingTable) {
                     break;
                 }
             }
         }
     }
     $tags = array(array('key' => "scalr-id", 'value' => SCALR_ID), array('key' => "scalr-rt-type", 'value' => $type), array('key' => "Name", 'value' => "Scalr System Routing table for {$type} internet access"));
     if (!$routingTable) {
         // Create routing table for FULL internet access
         $routingTable = $aws->ec2->routeTable->create($vpcId);
         // Add new route for internet
         if ($type == \Scalr_Role_Behavior_Router::INTERNET_ACCESS_FULL) {
             // GET IGW
             $igwList = $aws->ec2->internetGateway->describe(null, array(array('name' => InternetGatewayFilterNameType::attachmentVpcId(), 'value' => $vpcId)));
             $igw = $igwList->get(0);
             if (!$igw) {
                 $igw = $aws->ec2->internetGateway->create();
                 $aws->ec2->internetGateway->attach($igw->internetGatewayId, $vpcId);
                 try {
                     $igw->createTags(array(array('key' => "scalr-id", 'value' => SCALR_ID), array('key' => "Name", 'value' => 'Scalr System IGW')));
                 } catch (Exception $e) {
                 }
             }
             $igwId = $igw->internetGatewayId;
             // Add new route for internet
             $aws->ec2->routeTable->createRoute($routingTable->routeTableId, '0.0.0.0/0', $igwId);
         } else {
             //outbound-only
             $aws->ec2->routeTable->createRoute($routingTable->routeTableId, '0.0.0.0/0', null, null, $networkInterfaceId);
             $tags[] = array('key' => "scalr-vpc-nid", 'value' => $networkInterfaceId);
         }
         try {
             $routingTable->createTags($tags);
         } catch (Exception $e) {
         }
     }
     return $routingTable->routeTableId;
 }