示例#1
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;
 }
 /**
  * {@inheritdoc}
  * @see Scalr\Service\Aws.LoaderInterface::load()
  */
 public function load($xml)
 {
     if (isset($this->result)) {
         unset($this->result);
     }
     $this->result = new LoadBalancerDescriptionList();
     $this->result->setElb($this->elb);
     /* @var $simpleXmlElement \SimpleXmlElement */
     $simpleXmlElement = simplexml_load_string($xml);
     if (!isset($simpleXmlElement->DescribeLoadBalancersResult)) {
         throw new LoaderException('An attempt has been made to load inappropriate XML.');
     }
     if (!empty($simpleXmlElement->DescribeLoadBalancersResult->LoadBalancerDescriptions->member)) {
         /* @var $lb \SimpleXmlElement */
         foreach ($simpleXmlElement->DescribeLoadBalancersResult->LoadBalancerDescriptions->member as $lb) {
             $loadBalancerName = (string) $lb->LoadBalancerName;
             //Tries to look loadBalancer in the repository
             /* @var $loadBalancer LoadBalancerDescriptionData */
             $loadBalancer = $this->elb->loadBalancer->get($loadBalancerName);
             if ($loadBalancer !== null) {
                 //We load information directly into the same object, so we need to reset it before.
                 $loadBalancer->resetObject();
             } else {
                 //Object couldn't be found in the repository and it's to be created.
                 $loadBalancer = new LoadBalancerDescriptionData();
             }
             $loadBalancer->setElb($this->elb);
             $loadBalancer->securityGroups = array();
             if (!empty($lb->SecurityGroups->member)) {
                 foreach ($lb->SecurityGroups->member as $v) {
                     $loadBalancer->securityGroups[] = (string) $v;
                 }
             }
             $loadBalancer->loadBalancerName = $loadBalancerName;
             $loadBalancer->createdTime = new \DateTime((string) $lb->CreatedTime);
             $loadBalancer->canonicalHostedZoneName = (string) $lb->CanonicalHostedZoneName;
             $loadBalancer->canonicalHostedZoneNameId = (string) $lb->CanonicalHostedZoneNameID;
             $loadBalancer->scheme = (string) $lb->Scheme;
             $loadBalancer->dnsName = (string) $lb->DNSName;
             if (isset($lb->HealthCheck->Interval)) {
                 $loadBalancer->healthCheck = new HealthCheckData();
                 $loadBalancer->healthCheck->setElb($this->elb);
                 $loadBalancer->healthCheck->setLoadBalancerName($loadBalancerName);
                 $loadBalancer->healthCheck->interval = (int) $lb->HealthCheck->Interval;
                 $loadBalancer->healthCheck->target = (string) $lb->HealthCheck->Target;
                 $loadBalancer->healthCheck->healthyThreshold = (int) $lb->HealthCheck->HealthyThreshold;
                 $loadBalancer->healthCheck->timeout = (int) $lb->HealthCheck->Timeout;
                 $loadBalancer->healthCheck->unhealthyThreshold = (int) $lb->HealthCheck->UnhealthyThreshold;
             }
             $loadBalancer->listenerDescriptions = new ListenerDescriptionList();
             $loadBalancer->listenerDescriptions->setElb($this->elb);
             $loadBalancer->listenerDescriptions->setLoadBalancerName($loadBalancerName);
             if (!empty($lb->ListenerDescriptions->member)) {
                 /* @var $ld \SimpleXmlElement */
                 foreach ($lb->ListenerDescriptions->member as $ld) {
                     $listenerDescription = new ListenerDescriptionData();
                     $listenerDescription->setElb($this->elb);
                     $listenerDescription->setLoadBalancerName($loadBalancerName);
                     $listenerDescription->listener = new ListenerData();
                     $listenerDescription->listener->setElb($this->elb);
                     $listenerDescription->listener->setLoadBalancerName($loadBalancerName);
                     if (isset($ld->Listener->InstancePort)) {
                         $listenerDescription->listener->instancePort = (int) $ld->Listener->InstancePort;
                         $listenerDescription->listener->instanceProtocol = (string) $ld->Listener->InstanceProtocol;
                         $listenerDescription->listener->loadBalancerPort = (int) $ld->Listener->LoadBalancerPort;
                         $listenerDescription->listener->protocol = (string) $ld->Listener->Protocol;
                         $listenerDescription->listener->sslCertificateId = (string) $ld->Listener->SslCertificateId;
                     }
                     $listenerDescription->policyNames = array();
                     if (!empty($ld->PolicyNames->member)) {
                         foreach ($ld->PolicyNames->member as $v) {
                             $listenerDescription->policyNames[] = (string) $v;
                         }
                     }
                     $loadBalancer->listenerDescriptions->append($listenerDescription);
                     unset($listenerDescription);
                 }
             }
             $loadBalancer->instances = new InstanceList();
             $loadBalancer->instances->setElb($this->elb);
             if (!empty($lb->Instances->member)) {
                 foreach ($lb->Instances->member as $v) {
                     $instance = new InstanceData();
                     $instance->setElb($this->elb);
                     $instance->instanceId = (string) $v->InstanceId;
                     $loadBalancer->instances->append($instance);
                     unset($instance);
                 }
             }
             $loadBalancer->availabilityZones = array();
             if (!empty($lb->AvailabilityZones->member)) {
                 foreach ($lb->AvailabilityZones->member as $v) {
                     $loadBalancer->availabilityZones[] = (string) $v;
                 }
             }
             if (!empty($lb->SourceSecurityGroup)) {
                 $loadBalancer->sourceSecurityGroup = new SourceSecurityGroupData();
                 $loadBalancer->sourceSecurityGroup->setElb($this->elb);
                 $loadBalancer->sourceSecurityGroup->groupName = (string) $lb->SourceSecurityGroup->GroupName;
                 $loadBalancer->sourceSecurityGroup->ownerAlias = (string) $lb->SourceSecurityGroup->OwnerAlias;
             }
             $loadBalancer->backendServerDescriptions = new BackendServerDescriptionList();
             $loadBalancer->backendServerDescriptions->setElb($this->elb);
             if (!empty($lb->BackendServerDescriptions->member)) {
                 foreach ($lb->BackendServerDescriptions->member as $v) {
                     $backendServerDescription = new BackendServerDescriptionData();
                     $backendServerDescription->setElb($this->elb);
                     $backendServerDescription->instancePort = (int) $v->InstancePort;
                     $backendServerDescription->policyNames = array();
                     if (!empty($v->PolicyNames->member)) {
                         foreach ($v->PolicyNames->member as $t) {
                             $backendServerDescription->policyNames[] = (string) $t;
                         }
                     }
                     $loadBalancer->backendServerDescriptions->append($backendServerDescription);
                     unset($backendServerDescription);
                 }
             }
             $loadBalancer->subnets = array();
             if (!empty($lb->Subnets->member)) {
                 foreach ($lb->Subnets->member as $v) {
                     $loadBalancer->subnets[] = (string) $v;
                 }
             }
             if (isset($lb->VPCId)) {
                 $loadBalancer->vpcId = (string) $lb->VPCId;
             }
             $loadBalancer->policies = new PoliciesData();
             $loadBalancer->policies->setElb($this->elb);
             $loadBalancer->policies->setLoadBalancerName($loadBalancerName);
             $loadBalancer->policies->appCookieStickinessPolicies = new AppCookieStickinessPolicyList();
             $loadBalancer->policies->appCookieStickinessPolicies->setElb($this->elb);
             $loadBalancer->policies->appCookieStickinessPolicies->setLoadBalancerName($loadBalancerName);
             $loadBalancer->policies->lbCookieStickinessPolicies = new LbCookieStickinessPolicyList();
             $loadBalancer->policies->lbCookieStickinessPolicies->setElb($this->elb);
             $loadBalancer->policies->lbCookieStickinessPolicies->setLoadBalancerName($loadBalancerName);
             $loadBalancer->policies->otherPolicies = array();
             if (!empty($lb->Policies->AppCookieStickinessPolicies->member)) {
                 foreach ($lb->Policies->AppCookieStickinessPolicies->member as $v) {
                     $object = new AppCookieStickinessPolicyData();
                     $object->setElb($this->elb);
                     $object->setLoadBalancerName($loadBalancerName);
                     $object->cookieName = (string) $v->CookieName;
                     $object->policyName = (string) $v->PolicyName;
                     $loadBalancer->policies->appCookieStickinessPolicies->append($object);
                     unset($object);
                 }
             }
             if (!empty($lb->Policies->LBCookieStickinessPolicies->member)) {
                 foreach ($lb->Policies->LBCookieStickinessPolicies->member as $v) {
                     $object = new LbCookieStickinessPolicyData();
                     $object->setElb($this->elb);
                     $object->setLoadBalancerName($loadBalancerName);
                     $object->policyName = (string) $v->PolicyName;
                     //Long int
                     $object->cookieExpirationPeriod = (string) $v->CookieExpirationPeriod - 0;
                     $loadBalancer->policies->lbCookieStickinessPolicies->append($object);
                     unset($object);
                 }
             }
             if (!empty($lb->Policies->OtherPolicies)) {
                 if (!empty($lb->Policies->OtherPolicies->member)) {
                     foreach ($lb->Policies->OtherPolicies->member as $v) {
                         $loadBalancer->policies->otherPolicies[] = (string) $v;
                     }
                 }
             }
             $this->result->append($loadBalancer);
             unset($loadBalancer);
         }
     }
     return $this->result;
 }