Skip to content

Commit

Permalink
Merge 0e56ee5 into 37cdc25
Browse files Browse the repository at this point in the history
  • Loading branch information
taoistmath committed Aug 3, 2018
2 parents 37cdc25 + 0e56ee5 commit 8bff575
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 32 deletions.
1 change: 1 addition & 0 deletions CHANGES
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
v0.0.1 First working version
v0.2.0 python 3 compatibility, add cli entrypoint
v0.3.0 Updates to pass ASG and ELB names via command line
16 changes: 5 additions & 11 deletions License2Deploy/rolling_deploy.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ def __init__(self,
ready_wait=[10, 30],
health_wait=[10, 30],
only_new_wait=[10, 30],
asg_logical_name=None):
asg_logical_name=None,
load_balancer=False):
self.env = env
self.session = session
self.project = project.replace('-','')
Expand All @@ -46,12 +47,12 @@ def __init__(self,
self.conn_cloudwatch = AWSConn.aws_conn_cloudwatch(self.region, self.profile_name)
self.cloudformation_client = AWSConn.get_boto3_client('cloudformation', self.region, self.profile_name, session)
self.exit_error_code = 2
self.load_balancer = False
self.creation_wait = creation_wait
self.ready_wait = ready_wait
self.health_wait = health_wait
self.only_new_wait = only_new_wait
self.asg_logical_name = asg_logical_name
self.load_balancer = load_balancer
self.existing_instance_ids = []
self.new_desired_capacity = None

Expand Down Expand Up @@ -115,13 +116,6 @@ def get_stack_resources(self):
self.stack_resources = self.cloudformation_client.list_stack_resources(StackName=self.stack_name)['StackResourceSummaries']
return self.stack_resources

def get_lb(self):
try:
return next(n.name for n in self.conn_elb.get_all_load_balancers() if self.project in str(n.name) and self.env in str(n.name))
except Exception as e:
logging.error("Unable to pull down ELB info: {0}".format(e))
exit(self.exit_error_code)

def calculate_autoscale_desired_instance_count(self, group_name, desired_state):
""" Search via specific autoscale group name to return modified desired instance count """
try:
Expand Down Expand Up @@ -355,7 +349,6 @@ def stop_deploy(self, message='an error has occurred', e=None, error_code=2):
exit(error_code)

def deploy(self): # pragma: no cover
self.load_balancer = self.get_lb()
""" Rollin Rollin Rollin, Rawhide! """
group_name = self.get_autoscale_group_name()
self.wait_ami_availability(self.ami_id)
Expand Down Expand Up @@ -404,6 +397,7 @@ def get_args(): # pragma: no cover
parser.add_argument('-H', '--health-wait', action='store', dest='health_wait', help='Wait time for ec2 instance health check', type=int, nargs=2, default=[10, 30])
parser.add_argument('-o', '--only-new-wait', action='store', dest='only_new_wait', help='Wait time for old ec2 instances to terminate', type=int, nargs=2, default=[10, 30])
parser.add_argument('-A', '--asg-logical-name', action='store', dest='asg_logical_name', help='ASG Logical Name from CFN', type=str)
parser.add_argument('-L', '--load_balancer', action='store', dest='load_balancer', help='LoadBalancerName', type=str)
return parser.parse_args()


Expand All @@ -412,7 +406,7 @@ def main(): # pragma: no cover
SetLogging.setup_logging()
deployObj = RollingDeploy(args.env, args.project, args.build_number, args.ami_id, args.profile, args.config,
args.stack_name, args.force_redeploy, None, args.creation_wait, args.ready_wait,
args.health_wait, args.only_new_wait, args.asg_logical_name)
args.health_wait, args.only_new_wait, args.asg_logical_name, args.load_balancer)
deployObj.deploy()


Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ def read(fname):

setup(
name="License2Deploy",
version="0.2.0",
version="0.3.0",
author="Dun and Bradstreet",
author_email="license2deploy@dandb.com",
description="Rolling deploys by changing desired amount of instances AWS EC2 Autoscale Group",
Expand Down
25 changes: 5 additions & 20 deletions tests/rolling_deploy_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ class RollingDeployTest(unittest.TestCase):

autoscaling_group_name = 'autoscaling_group_name'
launch_configuration_name = 'launch_configuration_name'
load_balancer_name = 'load_balancer_name'

GMS_LAUNCH_CONFIGURATION_STG = 'server-backend-stg-servergmsextenderLCstg-46TIE5ZFQTLB'
GMS_LAUNCH_CONFIGURATION_PRD = 'server-backend-prd-servergmsextenderLCprd-46TIE5ZFQTLB'
Expand Down Expand Up @@ -46,7 +47,7 @@ def setUpAutoScaleGroup(self, configurations, env="stg"):
image_id='ami-abcd1234',
instance_type='m1.medium',
)
load_balancer_name = 'servergmsextenderELB{0}'.format(env)
load_balancer_name = self.load_balancer_name
group = AutoScalingGroup(
name=configuration[self.autoscaling_group_name],
availability_zones=['us-east-1a'],
Expand All @@ -69,7 +70,7 @@ def setUpELB(self, env='stg'):
conn_elb = boto.connect_elb()
zones = ['us-east-1a']
ports = [(80, 8080, 'http')]
load_balancer_name = 'servergmsextenderELB{0}'.format(env)
load_balancer_name = self.load_balancer_name
conn_elb.create_load_balancer(load_balancer_name, zones, ports)
balancers = conn_elb.get_all_load_balancers(load_balancer_names=[load_balancer_name])
self.assertEqual(balancers[0].name, load_balancer_name)
Expand All @@ -87,7 +88,7 @@ def setUpEC2(self, tag=True):
if tag:
instance.add_tag('BUILD', 0)
instance_id_list.append(instance.id)
elb = conn_elb.get_all_load_balancers(load_balancer_names=['servergmsextenderELBstg'])[0]
elb = conn_elb.get_all_load_balancers(load_balancer_names=[self.load_balancer_name])[0]
elb.register_instances(instance_id_list)
elb_ids = [instance.id for instance in elb.instances]
self.assertEqual(instance_id_list.sort(), elb_ids.sort())
Expand Down Expand Up @@ -206,25 +207,9 @@ def test_wait_ami_availability(self):
@mock_elb_deprecated
def test_confirm_lb_has_only_new_instances(self):
instance_ids = self.setUpEC2()[1]
self.rolling_deploy.load_balancer = self.rolling_deploy.get_lb()
self.rolling_deploy.load_balancer = self.load_balancer_name
self.assertEqual(len(instance_ids), len(self.rolling_deploy.confirm_lb_has_only_new_instances())) #Return All LB's with the proper build number

@mock_elb_deprecated
def test_get_lb(self):
self.setUpELB()
self.assertEqual('servergmsextenderELBstg', self.rolling_deploy.get_lb()) #Return All LB's with the proper build number

# assertRaises is a context manager since Python 2.7. Only testing in Python 2.7
# https://docs.python.org/2.7/library/unittest.html
@mock_elb_deprecated
def test_get_lb_failure(self):
if sys.version_info >= (2, 7):
self.setUpELB()
with self.assertRaises(SystemExit) as rolling_deploy:
bad_rolling_deploy = RollingDeploy('stg', 'fake-gms-extender', '0', 'bad', None, './regions.yml')
bad_rolling_deploy.load_balancer = bad_rolling_deploy.get_lb()
self.assertEqual(2, rolling_deploy.exception.code)

@mock_ec2_deprecated
@mock_elb_deprecated
def test_lb_healthcheck(self):
Expand Down

0 comments on commit 8bff575

Please sign in to comment.