示例#1
0
文件: Elb.php 项目: rickb838/scalr
 public function xCreateAction()
 {
     $this->request->defineParams(array('listeners' => array('type' => 'json'), 'healthcheck' => array('type' => 'json'), 'zones' => array('type' => 'array'), 'subnets' => array('type' => 'array'), 'scheme' => array('type' => 'string')));
     $healthCheck = $this->getParam('healthcheck');
     $elb = $this->environment->aws($this->getParam('cloudLocation'))->elb;
     //prepare listeners
     $listenersList = new ListenerList();
     $li = 0;
     foreach ($this->getParam('listeners') as $listener) {
         $listener_chunks = explode("#", $listener);
         $listenersList->append(new ListenerData(trim($listener_chunks[1]), trim($listener_chunks[2]), trim($listener_chunks[0]), null, trim($listener_chunks[3])));
     }
     $availZones = $this->getParam('zones');
     $subnets = $this->getParam('subnets');
     $scheme = $this->getParam('scheme');
     $elb_name = sprintf("scalr-%s-%s", Scalr_Util_CryptoTool::sault(10), rand(100, 999));
     $healthCheckType = new HealthCheckData();
     $healthCheckType->target = $healthCheck['target'];
     $healthCheckType->healthyThreshold = $healthCheck['healthyThreshold'];
     $healthCheckType->interval = $healthCheck['interval'];
     $healthCheckType->timeout = $healthCheck['timeout'];
     $healthCheckType->unhealthyThreshold = $healthCheck['unhealthyThreshold'];
     //Creates a new ELB
     $dnsName = $elb->loadBalancer->create($elb_name, $listenersList, !empty($availZones) ? $availZones : null, !empty($subnets) ? $subnets : null, null, !empty($scheme) ? $scheme : null);
     try {
         $elb->loadBalancer->configureHealthCheck($elb_name, $healthCheckType);
     } catch (Exception $e) {
         $elb->loadBalancer->delete($elb_name);
         throw $e;
     }
     // return all as in xListElb
     $this->response->data(array('elb' => array('name' => $elb_name, 'dnsName' => $dnsName)));
 }
示例#2
0
 public function xCreateAction()
 {
     $this->request->defineParams(array('listeners' => array('type' => 'json'), 'healthcheck' => array('type' => 'json'), 'zones' => array('type' => 'array'), 'subnets' => array('type' => 'array'), 'scheme' => array('type' => 'string')));
     $healthCheck = $this->getParam('healthcheck');
     $elb = $this->environment->aws($this->getParam('cloudLocation'))->elb;
     //prepare listeners
     $listenersList = new ListenerList();
     $li = 0;
     foreach ($this->getParam('listeners') as $listener) {
         $listener_chunks = explode("#", $listener);
         $listenersList->append(new ListenerData(trim($listener_chunks[1]), trim($listener_chunks[2]), trim($listener_chunks[0]), null, trim($listener_chunks[3])));
     }
     $availZones = $this->getParam('zones');
     $subnets = $this->getParam('subnets');
     $scheme = $this->getParam('scheme');
     $elb_name = sprintf("scalr-%s-%s", CryptoTool::sault(10), rand(100, 999));
     $healthCheckType = new HealthCheckData();
     $healthCheckType->target = $healthCheck['target'];
     $healthCheckType->healthyThreshold = $healthCheck['healthyThreshold'];
     $healthCheckType->interval = $healthCheck['interval'];
     $healthCheckType->timeout = $healthCheck['timeout'];
     $healthCheckType->unhealthyThreshold = $healthCheck['unhealthyThreshold'];
     //Creates a new ELB
     $dnsName = $elb->loadBalancer->create($elb_name, $listenersList, !empty($availZones) ? $availZones : null, !empty($subnets) ? $subnets : null, null, !empty($scheme) ? $scheme : null);
     $tags = [['key' => \Scalr_Governance::SCALR_META_TAG_NAME, 'value' => $this->environment->applyGlobalVarsToValue(\Scalr_Governance::SCALR_META_TAG_VALUE)]];
     //Tags governance
     $governance = new \Scalr_Governance($this->environment->id);
     $gTags = (array) $governance->getValue('ec2', \Scalr_Governance::AWS_TAGS);
     if (count($gTags) > 0) {
         foreach ($gTags as $tKey => $tValue) {
             $tags[] = array('key' => $tKey, 'value' => $this->environment->applyGlobalVarsToValue($tValue));
         }
     }
     $elb->loadBalancer->addTags($elb_name, $tags);
     try {
         $elb->loadBalancer->configureHealthCheck($elb_name, $healthCheckType);
     } catch (Exception $e) {
         $elb->loadBalancer->delete($elb_name);
         throw $e;
     }
     // return all as in xListElb
     $this->response->data(array('elb' => array('name' => $elb_name, 'dnsName' => $dnsName)));
 }
示例#3
0
文件: ElbApi.php 项目: rickb838/scalr
 /**
  * CreateLoadBalancerListeners action
  *
  * Creates one or more listeners on a LoadBalancer for the specified port. If a listener with the given port
  * does not already exist, it will be created; otherwise, the properties of the new listener must match the
  * properties of the existing listener.
  *
  * @param    string           $loadBalancerName  A load balancer name.
  * @param    ListenerList     $listenersList     An ListenerList object that holds list of LoadBalancerPort,
  *                                               InstancePort, Protocol, Yes and SSLCertificateId items.
  * @return   boolean          Returns TRUE if listeners are successfully created.
  * @throws   ClientException
  */
 public function createLoadBalancerListeners($loadBalancerName, ListenerList $listenersList)
 {
     $result = false;
     $options = array('LoadBalancerName' => (string) $loadBalancerName);
     $options = array_merge($options, $listenersList->getQueryArray());
     $response = $this->client->call('CreateLoadBalancerListeners', $options);
     if ($response->getError() === false) {
         //Success
         /* @var $loadBalancer LoadBalancerDescriptionData */
         $loadBalancer = $this->elb->loadBalancer->get($options['LoadBalancerName']);
         if ($loadBalancer !== null) {
             //Updates listenerDescriptions for the LoadBalancer object.
             if ($loadBalancer->listenerDescriptions instanceof ListenerDescriptionList || $loadBalancer->listenerDescriptions !== $listenersList) {
                 $old = array();
                 /* @var $listener ListenerData */
                 foreach ($loadBalancer->listenerDescriptions->getComputed() as $listener) {
                     //Listeners are removed by loadBalancerPort, so we use it as primary key
                     //to compare.
                     $old[$listener->loadBalancerPort] = $listener;
                 }
                 //Append to existing load balancer new listeners which have just been created.
                 foreach ($listenersList as $listener) {
                     if (!array_key_exists($listener->loadBalancerPort, $old)) {
                         $listenerDescription = new ListenerDescriptionData();
                         $listenerDescription->setElb($this->elb);
                         $listenerDescription->listener = $listener;
                         $loadBalancer->listenerDescriptions->append($listenerDescription);
                         unset($listenerDescription);
                     }
                     //It's not allowed to change an existing lisntener properties
                     //in this api method. It will cause DuplicateListener error, therefore
                     //it's no sence to update listener's properties which are received from response.
                 }
                 unset($old);
             }
         }
         $result = true;
     }
     return $result;
 }
示例#4
0
 /**
  * {@inheritdoc}
  * @see Scalr\Service\Aws\DataType.ListDataType::getQueryArray()
  */
 public function getQueryArray($uriParameterName = 'Listeners', $member = true)
 {
     //Returns listeners parameters
     $listenerList = new ListenerList($this->getComputed());
     return $listenerList->getQueryArray($uriParameterName);
 }
示例#5
0
文件: Elb.php 项目: mheydt/scalr
 /**
  * @param string     $cloudLocation                     Ec2 Region
  * @param JsonData   $listeners                         Listeners list
  * @param bool       $crossLoadBalancing                Enable Cross balancing
  * @param JsonData   $healthcheck                       Health check data
  * @param string     $scheme                            optional Scheme
  * @param JsonData   $securityGroups                    optional Security groups
  * @param string     $vpcId                             optional Vpc id
  * @param JsonData   $zones                             optional Availability zones
  * @param JsonData   $subnets                           optional Subnets
  * @param string     $name                              optional Name
  * @throws Exception
  */
 public function xCreateAction($cloudLocation, JsonData $listeners, $crossLoadBalancing, JsonData $healthcheck, $scheme = null, JsonData $securityGroups = null, $vpcId = null, JsonData $zones = null, JsonData $subnets = null, $name = null)
 {
     $this->request->restrictAccess(Acl::RESOURCE_AWS_ELB, Acl::PERM_AWS_ELB_MANAGE);
     $elb = $this->environment->aws($cloudLocation)->elb;
     //prepare listeners
     $listenersList = new ListenerList();
     foreach ($listeners as $listener) {
         $listener_chunks = explode("#", $listener);
         $listenersList->append(new ListenerData(trim($listener_chunks[1]), trim($listener_chunks[2]), trim($listener_chunks[0]), null, trim($listener_chunks[3])));
     }
     $zones = !empty($zones) ? (array) $zones : null;
     $subnets = !empty($subnets) ? (array) $subnets : null;
     if (empty($name)) {
         $name = sprintf("scalr-%s-%s", CryptoTool::sault(10), rand(100, 999));
     } else {
         if (!preg_match('/^[-a-zA-Z0-9]+$/', $name)) {
             throw new Exception('Load Balancer names must only contain alphanumeric characters or dashes.');
         }
     }
     $healthCheckType = new HealthCheckData();
     $healthCheckType->target = $healthcheck['target'];
     $healthCheckType->healthyThreshold = $healthcheck['healthyThreshold'];
     $healthCheckType->interval = $healthcheck['interval'];
     $healthCheckType->timeout = $healthcheck['timeout'];
     $healthCheckType->unhealthyThreshold = $healthcheck['unhealthyThreshold'];
     $securityGroupIds = [];
     foreach ($securityGroups as $securityGroup) {
         $securityGroupIds[] = $securityGroup['id'];
     }
     $result = self::loadController('Aws', 'Scalr_UI_Controller_Tools')->checkSecurityGroupsPolicy($securityGroups, Aws::SERVICE_INTERFACE_ELB);
     if ($result === true) {
         $result = self::loadController('Aws', 'Scalr_UI_Controller_Tools')->checkVpcPolicy($vpcId, $subnets, $cloudLocation);
     }
     if ($result !== true) {
         throw new Exception($result);
     }
     //Creates a new ELB
     $dnsName = $elb->loadBalancer->create($name, $listenersList, $zones, $subnets, !empty($securityGroupIds) ? $securityGroupIds : null, !empty($scheme) ? $scheme : null);
     if ($crossLoadBalancing) {
         $attributes = new AttributesData();
         $attributes->setCrossZoneLoadBalancing(new CrossZoneLoadBalancingData($crossLoadBalancing));
         $requestData = new ModifyLoadBalancerAttributes($name, $attributes);
         $elb->loadBalancer->modifyAttributes($requestData);
     }
     $elb->loadBalancer->addTags($name, $this->getEnvironment()->getAwsTags());
     try {
         $elb->loadBalancer->configureHealthCheck($name, $healthCheckType);
     } catch (Exception $e) {
         $elb->loadBalancer->delete($name);
         throw $e;
     }
     $lb = $elb->loadBalancer->describe($name)->get(0);
     // return all as in xListElb
     $this->response->data(['elb' => ['name' => $name, 'dnsName' => $dnsName, 'dtcreated' => $lb->createdTime->format('c'), 'subnets' => $lb->subnets]]);
 }