Scalr\Modules\Platforms\Ec2\Ec2PlatformModule::getRoutingTable PHP Method

getRoutingTable() public method

public getRoutingTable ( $type, $aws, $networkInterfaceId = null, $vpcId )
    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;
    }