mirror of
https://github.com/certbot/certbot.git
synced 2026-07-30 18:04:31 +02:00
[letstest] create & reuse a persistent boulder server
Reduces minimum multitester.py runtime to just a bit under 10 minutes
This commit is contained in:
@@ -77,6 +77,12 @@ parser.add_argument('--saveinstances',
|
|||||||
parser.add_argument('--alt_pip',
|
parser.add_argument('--alt_pip',
|
||||||
default='',
|
default='',
|
||||||
help="server from which to pull candidate release packages")
|
help="server from which to pull candidate release packages")
|
||||||
|
parser.add_argument('--killboulder',
|
||||||
|
action='store_true',
|
||||||
|
help="do not leave a persistent boulder server running")
|
||||||
|
parser.add_argument('--boulderonly',
|
||||||
|
action='store_true',
|
||||||
|
help="only make a boulder server")
|
||||||
cl_args = parser.parse_args()
|
cl_args = parser.parse_args()
|
||||||
|
|
||||||
# Credential Variables
|
# Credential Variables
|
||||||
@@ -292,6 +298,29 @@ def grab_letsencrypt_log():
|
|||||||
sudo('if [ -f ./letsencrypt.log ]; then \
|
sudo('if [ -f ./letsencrypt.log ]; then \
|
||||||
cat ./letsencrypt.log; else echo "[nolocallog]"; fi')
|
cat ./letsencrypt.log; else echo "[nolocallog]"; fi')
|
||||||
|
|
||||||
|
def create_client_instances(targetlist):
|
||||||
|
"Create a fleet of client instances"
|
||||||
|
instances = []
|
||||||
|
print("Creating instances: ", end="")
|
||||||
|
for target in targetlist:
|
||||||
|
if target['virt'] == 'hvm':
|
||||||
|
machine_type = 't2.micro'
|
||||||
|
else:
|
||||||
|
machine_type = 't1.micro'
|
||||||
|
if 'userdata' in target.keys():
|
||||||
|
userdata = target['userdata']
|
||||||
|
else:
|
||||||
|
userdata = ''
|
||||||
|
name = 'le-%s'%target['name']
|
||||||
|
print(name, end=" ")
|
||||||
|
instances.append(make_instance(name,
|
||||||
|
target['ami'],
|
||||||
|
KEYNAME,
|
||||||
|
machine_type=machine_type,
|
||||||
|
userdata=userdata))
|
||||||
|
print()
|
||||||
|
return instances
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
# SCRIPT BEGINS
|
# SCRIPT BEGINS
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
@@ -352,30 +381,28 @@ if not sg_exists:
|
|||||||
make_security_group()
|
make_security_group()
|
||||||
time.sleep(30)
|
time.sleep(30)
|
||||||
|
|
||||||
|
boulder_preexists = False
|
||||||
|
boulder_servers = EC2.instances.filter(Filters=[
|
||||||
|
{'Name': 'tag:Name', 'Values': ['le-boulderserver']},
|
||||||
|
{'Name': 'instance-state-name', 'Values': ['running']}])
|
||||||
|
|
||||||
|
boulder_server = next(iter(boulder_servers), None)
|
||||||
|
|
||||||
print("Requesting Instances...")
|
print("Requesting Instances...")
|
||||||
boulder_server = make_instance('le-boulderserver',
|
if boulder_server:
|
||||||
BOULDER_AMI,
|
print("Found existing boulder server:", boulder_server)
|
||||||
KEYNAME,
|
boulder_preexists = True
|
||||||
#machine_type='t2.micro',
|
else:
|
||||||
machine_type='t2.medium',
|
print("Can't find a boulder server, starting one...")
|
||||||
security_groups=['letsencrypt_test'])
|
boulder_server = make_instance('le-boulderserver',
|
||||||
|
BOULDER_AMI,
|
||||||
instances = []
|
|
||||||
for target in targetlist:
|
|
||||||
if target['virt'] == 'hvm':
|
|
||||||
machine_type = 't2.micro'
|
|
||||||
else:
|
|
||||||
machine_type = 't1.micro'
|
|
||||||
if 'userdata' in target.keys():
|
|
||||||
userdata = target['userdata']
|
|
||||||
else:
|
|
||||||
userdata = ''
|
|
||||||
instances.append(make_instance('le-%s'%target['name'],
|
|
||||||
target['ami'],
|
|
||||||
KEYNAME,
|
KEYNAME,
|
||||||
machine_type=machine_type,
|
machine_type='t2.micro',
|
||||||
userdata=userdata))
|
#machine_type='t2.medium',
|
||||||
|
security_groups=['letsencrypt_test'])
|
||||||
|
|
||||||
|
if not cl_args.boulderonly:
|
||||||
|
instances = create_client_instances(targetlist)
|
||||||
|
|
||||||
# Configure and launch boulder server
|
# Configure and launch boulder server
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
@@ -383,21 +410,24 @@ print("Waiting on Boulder Server")
|
|||||||
boulder_server = block_until_instance_ready(boulder_server)
|
boulder_server = block_until_instance_ready(boulder_server)
|
||||||
print(" server %s"%boulder_server)
|
print(" server %s"%boulder_server)
|
||||||
|
|
||||||
print("Configuring and Launching Boulder")
|
|
||||||
|
|
||||||
# env.host_string defines the ssh user and host for connection
|
# env.host_string defines the ssh user and host for connection
|
||||||
env.host_string = "ubuntu@%s"%boulder_server.public_ip_address
|
env.host_string = "ubuntu@%s"%boulder_server.public_ip_address
|
||||||
print("Boulder Server at (SSH):", env.host_string)
|
print("Boulder Server at (SSH):", env.host_string)
|
||||||
config_and_launch_boulder(boulder_server)
|
if not boulder_preexists:
|
||||||
# blocking often unnecessary, but cheap EC2 VMs can get very slow
|
print("Configuring and Launching Boulder")
|
||||||
block_until_http_ready('http://%s:4000'%boulder_server.public_ip_address,
|
config_and_launch_boulder(boulder_server)
|
||||||
wait_time=10,
|
# blocking often unnecessary, but cheap EC2 VMs can get very slow
|
||||||
timeout=500)
|
block_until_http_ready('http://%s:4000'%boulder_server.public_ip_address,
|
||||||
|
wait_time=10, timeout=500)
|
||||||
|
|
||||||
boulder_url = "http://%s:4000/directory"%boulder_server.private_ip_address
|
boulder_url = "http://%s:4000/directory"%boulder_server.private_ip_address
|
||||||
print("Boulder Server at (public ip): http://%s:4000/directory"%boulder_server.public_ip_address)
|
print("Boulder Server at (public ip): http://%s:4000/directory"%boulder_server.public_ip_address)
|
||||||
print("Boulder Server at (EC2 private ip): %s"%boulder_url)
|
print("Boulder Server at (EC2 private ip): %s"%boulder_url)
|
||||||
|
|
||||||
|
if cl_args.boulderonly:
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
# Install and launch client scripts in parallel
|
# Install and launch client scripts in parallel
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
print("Uploading and running test script in parallel: %s"%cl_args.test_script)
|
print("Uploading and running test script in parallel: %s"%cl_args.test_script)
|
||||||
@@ -480,7 +510,8 @@ results_file.close()
|
|||||||
if not cl_args.saveinstances:
|
if not cl_args.saveinstances:
|
||||||
print('Logs in ', LOGDIR)
|
print('Logs in ', LOGDIR)
|
||||||
print('Terminating EC2 Instances and Cleaning Dangling EBS Volumes')
|
print('Terminating EC2 Instances and Cleaning Dangling EBS Volumes')
|
||||||
boulder_server.terminate()
|
if cl_args.killboulder:
|
||||||
|
boulder_server.terminate()
|
||||||
terminate_and_clean(instances)
|
terminate_and_clean(instances)
|
||||||
else:
|
else:
|
||||||
# print login information for the boxes for debugging
|
# print login information for the boxes for debugging
|
||||||
|
|||||||
Reference in New Issue
Block a user