1
0
mirror of https://github.com/certbot/certbot.git synced 2026-01-26 07:41:33 +03:00

Make our test farm tests instances self-destruct (#8536)

* remove unused user data

* have instance self-destruct in case cleanup fails

* correct kwargs

* fix param order
This commit is contained in:
Brad Warren
2020-12-15 03:00:00 -08:00
committed by GitHub
parent 5151e2afee
commit 7febc18bb0
2 changed files with 34 additions and 25 deletions

View File

@@ -31,10 +31,6 @@ targets:
virt: hvm
user: admin
machine_type: a1.medium
# userdata: |
# #cloud-init
# runcmd:
# - [ apt-get, install, -y, curl ]
#-----------------------------------------------------------------------------
# Other Redhat Distros
- ami: ami-0916c408cb02e310b

View File

@@ -147,22 +147,32 @@ def make_instance(ec2_client,
keyname,
security_group_id,
subnet_id,
machine_type='t2.micro',
userdata=""): #userdata contains bash or cloud-init script
self_destruct,
machine_type='t2.micro'):
"""Creates an instance using the given parameters.
If self_destruct is True, the instance will be configured to shutdown after
1 hour and to terminate itself on shutdown.
"""
block_device_mappings = _get_block_device_mappings(ec2_client, ami_id)
tags = [{'Key': 'Name', 'Value': instance_name}]
tag_spec = [{'ResourceType': 'instance', 'Tags': tags}]
return ec2_client.create_instances(
BlockDeviceMappings=block_device_mappings,
ImageId=ami_id,
SecurityGroupIds=[security_group_id],
SubnetId=subnet_id,
KeyName=keyname,
MinCount=1,
MaxCount=1,
UserData=userdata,
InstanceType=machine_type,
TagSpecifications=tag_spec)[0]
kwargs = {
'BlockDeviceMappings': block_device_mappings,
'ImageId': ami_id,
'SecurityGroupIds': [security_group_id],
'SubnetId': subnet_id,
'KeyName': keyname,
'MinCount': 1,
'MaxCount': 1,
'InstanceType': machine_type,
'TagSpecifications': tag_spec
}
if self_destruct:
kwargs['InstanceInitiatedShutdownBehavior'] = 'terminate'
kwargs['UserData'] = '#!/bin/bash\nshutdown -P +60\n'
return ec2_client.create_instances(**kwargs)[0]
def _get_block_device_mappings(ec2_client, ami_id):
"""Returns the list of block device mappings to ensure cleanup.
@@ -313,7 +323,7 @@ def grab_certbot_log(cxn):
'cat ./certbot.log; else echo "[nolocallog]"; fi\'')
def create_client_instance(ec2_client, target, security_group_id, subnet_id):
def create_client_instance(ec2_client, target, security_group_id, subnet_id, self_destruct):
"""Create a single client instance for running tests."""
if 'machine_type' in target:
machine_type = target['machine_type']
@@ -322,10 +332,6 @@ def create_client_instance(ec2_client, target, security_group_id, subnet_id):
else:
# 32 bit systems
machine_type = 'c1.medium'
if 'userdata' in target:
userdata = target['userdata']
else:
userdata = ''
name = 'le-%s'%target['name']
print(name, end=" ")
return make_instance(ec2_client,
@@ -335,7 +341,7 @@ def create_client_instance(ec2_client, target, security_group_id, subnet_id):
machine_type=machine_type,
security_group_id=security_group_id,
subnet_id=subnet_id,
userdata=userdata)
self_destruct=self_destruct)
def test_client_process(fab_config, inqueue, outqueue, boulder_url, log_dir):
@@ -490,6 +496,9 @@ def main():
boulder_preexists = True
else:
print("Can't find a boulder server, starting one...")
# If we want to kill boulder on shutdown, have it self-destruct in case
# cleanup fails.
self_destruct = cl_args.killboulder
boulder_server = make_instance(ec2_client,
'le-boulderserver',
BOULDER_AMI,
@@ -497,16 +506,20 @@ def main():
machine_type='t2.micro',
#machine_type='t2.medium',
security_group_id=security_group_id,
subnet_id=subnet_id)
subnet_id=subnet_id,
self_destruct=self_destruct)
instances = []
try:
if not cl_args.boulderonly:
print("Creating instances: ", end="")
# If we want to preserve instances, do not have them self-destruct.
self_destruct = not cl_args.saveinstances
for target in targetlist:
instances.append(
create_client_instance(ec2_client, target,
security_group_id, subnet_id)
security_group_id, subnet_id,
self_destruct)
)
print()