/************************************************************************* * Copyright 2009-2016 Eucalyptus Systems, Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see http://www.gnu.org/licenses/. * * Please contact Eucalyptus Systems, Inc., 6755 Hollister Ave., Goleta * CA 93117, USA or visit http://www.eucalyptus.com/licenses/ if you need * additional information or have any questions. ************************************************************************/ package com.eucalyptus.loadbalancing.workflow; import java.util.List; import java.util.Map; import com.amazonaws.services.simpleworkflow.flow.annotations.Activities; import com.amazonaws.services.simpleworkflow.flow.annotations.ActivityRegistrationOptions; import com.amazonaws.services.simpleworkflow.flow.common.FlowConstants; import com.eucalyptus.loadbalancing.common.msgs.HealthCheck; import com.eucalyptus.loadbalancing.common.msgs.Listener; import com.eucalyptus.loadbalancing.common.msgs.LoadBalancerServoDescription; import com.eucalyptus.loadbalancing.common.msgs.PolicyDescription; /** * @author Sang-Min Park (sangmin.park@hpe.com) * */ @Activities(version="1.0") @ActivityRegistrationOptions( defaultTaskHeartbeatTimeoutSeconds = FlowConstants.NONE, defaultTaskScheduleToCloseTimeoutSeconds = 180, defaultTaskScheduleToStartTimeoutSeconds = 120, defaultTaskStartToCloseTimeoutSeconds = 60) public interface LoadBalancingActivities { /***** CreateLoadBalancer activities *****/ boolean createLbAdmissionControl(String accountNumber, String lbName, String[] zones) throws LoadBalancingActivityException; String iamRoleSetup(String accountNumber, String lbName) throws LoadBalancingActivityException; String instanceProfileSetup(String accountNumber, String lbName, String roleName) throws LoadBalancingActivityException; String iamPolicySetup(String accountNumber, String lbName, String roleName) throws LoadBalancingActivityException; SecurityGroupSetupActivityResult securityGroupSetup(String accountNumber, String lbName) throws LoadBalancingActivityException; void securityGroupSetupRollback(String accountNumber, String lbName, SecurityGroupSetupActivityResult result); CreateTagActivityResult createLbTagCreator(String accountNumber, String lbName, String sgroupId) throws LoadBalancingActivityException; void createLbTagCreatorRollback(CreateTagActivityResult result); AutoscalingGroupSetupActivityResult autoscalingGroupSetup(String accountNumber, String lbName, String instanceProfileName, String securityGroupName, List<String> zones, Map<String,String> zoneToSubnetIdMap) throws LoadBalancingActivityException; void autoscalingGroupSetupRollback(String accountNumber, String lbName, AutoscalingGroupSetupActivityResult result ); /***** END of CreateLoadBalancer activities *****/ /***** EnableZone activities *****/ /// returned list contains the availability zones that's persisted List<String> enableAvailabilityZonesPersistUpdatedZones(String accountNumber, String lbName, List<String> zonesToEnable, Map<String,String> zoneToSubnetIdMap) throws LoadBalancingActivityException; void enableAvailabilityZonesPersistUpdatedZonesRollback(String accountNumber, String lbName, List<String> zonesToRollback); void enableAvailabilityZonesPersistBackendInstanceState(String accountNumber, String lbName, List<String> enabledZones) throws LoadBalancingActivityException; /***** END of EnableZone activities *****/ /***** DisableZone activities *****/ /// returned list contains the instance IDs that's updated List<String> disableAvailabilityZonesPersistRetiredServoInstances(String accountNumber, String lbName, List<String> zonesToDisable) throws LoadBalancingActivityException; void disableAvailabilityZonesPersistRetiredServoInstancesRollback(String accountNumber, String lbName, List<String> updatedInstanceIds) ; /// returned list contains the AZ whose corresponding autoscaling group is updated List<String> disableAvailabilityZonesUpdateAutoScalingGroup(String accountNumber, String lbName, List<String> zonesToDisable) throws LoadBalancingActivityException; void disableAvailabilityZonesUpdateAutoScalingGroupRollback(String accountNumber, String lbName, List<String> updatedZones); void disableAvailabilityZonesPersistUpdatedZones(String accountNumber, String lbName, List<String> zonesToDisable) throws LoadBalancingActivityException; void disableAvailabilityZonesPersistBackendInstanceState(String accountNumber, String lbName, List<String> zonesToDisable) throws LoadBalancingActivityException; /***** END of DisableZone activities *****/ /***** CreateListener activities *****/ void createListenerCheckSSLCertificateId(String accountNumber, String lbName, Listener[] listeners) throws LoadBalancingActivityException; /// returned list contains the list of policy names added AuthorizeSSLCertificateActivityResult createListenerAuthorizeSSLCertificate(String accountNumber, String lbName, Listener[] listeners) throws LoadBalancingActivityException; void createListenerAuthorizeSSLCertificateRollback(String accountNumber, String lbName, AuthorizeSSLCertificateActivityResult result); AuthorizeIngressRuleActivityResult createListenerAuthorizeIngressRule(String accountNumber, String lbName, Listener[] listeners) throws LoadBalancingActivityException; void createListenerAuthorizeIngressRuleRollback(String accountNumber, String lbName, AuthorizeIngressRuleActivityResult result); void createListenerUpdateHealthCheckConfig(String accountNumber, String lbName, Listener[] listeners) throws LoadBalancingActivityException; void createListenerAddDefaultSSLPolicy(String accountNumber, String lbName, Listener[] listeners) throws LoadBalancingActivityException; /***** END of CreateListener activities *****/ /***** DeleteListener activities *****/ void deleteListenerRevokeSSLCertificatePolicy(String accountNumber, String lbName, List<Integer> portsToDelete) throws LoadBalancingActivityException; void deleteListenerRevokeIngressRule(String accountNumber, String lbName, List<Integer> portsToDelete) throws LoadBalancingActivityException; /***** END of DeleteListener activities *****/ /***** DeleteLoadBalancer activities *****/ void deleteLoadBalancerDeactivateDns(String accountNumber, String lbName); void deleteLoadBalancerDeleteScalingGroup(String accountNumber, String lbName) throws LoadBalancingActivityException; void deleteLoadBalancerDeleteInstanceProfile(String accountNumber, String lbName); void deleteLoadBalancerDeleteIamRole(String accountNumber, String lbName); void deleteLoadBalancerDeleteSecurityGroup(String accountNumber, String lbName); /***** END of DeleteLoadBalancer activities *****/ /***** ModifyAttributes activities *****/ AccessLogPolicyActivityResult modifyLoadBalancerAttributesCreateAccessLogPolicy(String accountNumber, String lbName, Boolean accessLogEnabled, String s3BucketName, String s3BucketPrefix, Integer emitInterval) throws LoadBalancingActivityException; void modifyLoadBalancerAttributesCreateAccessLogPolicyRollback(String accountNumber, String lbName, AccessLogPolicyActivityResult result); void modifyLoadBalancerAttributesDeleteAccessLogPolicy(String accountNumber, String lbName, Boolean accessLogEnabled, String s3BucketName, String s3BucketPrefix, Integer emitInterval) throws LoadBalancingActivityException; void modifyLoadBalancerAttributesPersistAttributes(String accountNumber, String lbName, Boolean accessLogEnabled, String s3BucketName, String s3BucketPrefix, Integer emitInterval) throws LoadBalancingActivityException; /***** END ModifyAttributes activities *****/ /***** ApplySecurityGroups activities *****/ void applySecurityGroupUpdateSecurityGroup(String accountNumber, String lbName, Map<String,String> groupIdToNames) throws LoadBalancingActivityException; /***** END ApplySecurityGroups activities ****/ /***** ModifyProperties activities *****/ void modifyServicePropertiesValidateRequest(String emi, String instanceType, String keyname, String initScript) throws LoadBalancingActivityException; void modifyServicePropertiesUpdateScalingGroup(String emi, String instanceType, String keyname, String initScript) throws LoadBalancingActivityException; /***** Activities for ELB VMs *****/ /// to update servo VMs with the latest ELB List<String> lookupServoInstances(String accountNumber, String lbName) throws LoadBalancingActivityException; List<String> listLoadBalancerPolicies(String accountNumber, String lbName) throws LoadBalancingActivityException; PolicyDescription getLoadBalancerPolicy(String accountNumber, String lbName, String policyName) throws LoadBalancingActivityException; Map<String, LoadBalancerServoDescription> lookupLoadBalancerDescription(String accountNumber, String lbName) throws LoadBalancingActivityException; /// backend instance status update /// Because servo VM is not aware of avaiability zones of the registered instances (in cross-zone lb), /// it monitors and reports the status info. about all registered instances. /// This activity is to filter out reports for which the servo VM is not responsible for reporting the status /// In other words, servo VM in AZ A should only report the status about instances in AZ A. HealthCheck lookupLoadBalancerHealthCheck(String accountNumber, String lbName) throws LoadBalancingActivityException; Map<String, String> filterInstanceStatus(final String accountNumber, final String lbName, final String servoInstanceId, final String status) throws LoadBalancingActivityException; void updateInstanceStatus(String accountNumber, String lbName, Map<String,String> statusList) throws LoadBalancingActivityException; /// cloudwatch put metrics void putCloudWatchInstanceHealth(String accountNumber, String lbName) throws LoadBalancingActivityException; public void putCloudWatchMetrics(String accountNumber, String lbName, Map<String,String> metric) throws LoadBalancingActivityException; /***** END of Activities for ELB VMs *****/ /***** Activities for monitoring all ELBs in the system *****/ // discover new servos, update the state of existing ones, or delete the terminated servo VMs void checkServoInstances() throws LoadBalancingActivityException; void checkServoInstanceDns() throws LoadBalancingActivityException; void checkServoElasticIp() throws LoadBalancingActivityException; void checkBackendInstances() throws LoadBalancingActivityException; void cleanupSecurityGroups() throws LoadBalancingActivityException; void cleanupServoInstances() throws LoadBalancingActivityException; void runContinousWorkflows() throws LoadBalancingActivityException; void recycleFailedServoInstances() throws LoadBalancingActivityException; // for each LB, there are workflows that must continue to run // if for any reason the workflows are terminated, this actvity should re-run it /**** END Activities for monitoring all ELBs in the system *****/ void recordInstanceTaskFailure(String instanceId) throws LoadBalancingActivityException; /***** Upgrade activities *****/ void upgrade4_4() throws LoadBalancingActivityException; // to make sure that all ELB VMs have the right role policy /***** END Upgrade activities *****/ }