Commit 571bbcf9 by Feanil Patel

Merge pull request #2994 from edx/feanil/abbey_update

Feanil/abbey update
parents 69ebe196 535aecda
import argparse import argparse
import boto import boto.ec2
from boto.utils import get_instance_metadata from boto.utils import get_instance_metadata, get_instance_identity
from boto.exception import AWSConnectionError from boto.exception import AWSConnectionError
import hipchat import hipchat
import os import os
...@@ -27,12 +27,14 @@ HIPCHAT_USER = "PreSupervisor" ...@@ -27,12 +27,14 @@ HIPCHAT_USER = "PreSupervisor"
MAX_BACKOFF = 120 MAX_BACKOFF = 120
INITIAL_BACKOFF = 1 INITIAL_BACKOFF = 1
REGION = get_instance_identity()['document']['region']
def services_for_instance(instance_id): def services_for_instance(instance_id):
""" """
Get the list of all services named by the services tag in this Get the list of all services named by the services tag in this
instance's tags. instance's tags.
""" """
ec2 = boto.connect_ec2() ec2 = boto.ec2.connect_to_region(REGION)
reservations = ec2.get_all_instances(instance_ids=[instance_id]) reservations = ec2.get_all_instances(instance_ids=[instance_id])
for reservation in reservations: for reservation in reservations:
for instance in reservation.instances: for instance in reservation.instances:
...@@ -47,7 +49,7 @@ def services_for_instance(instance_id): ...@@ -47,7 +49,7 @@ def services_for_instance(instance_id):
yield service yield service
def edp_for_instance(instance_id): def edp_for_instance(instance_id):
ec2 = boto.connect_ec2() ec2 = boto.ec2.connect_to_region(REGION)
reservations = ec2.get_all_instances(instance_ids=[instance_id]) reservations = ec2.get_all_instances(instance_ids=[instance_id])
for reservation in reservations: for reservation in reservations:
for instance in reservation.instances: for instance in reservation.instances:
...@@ -164,8 +166,7 @@ if __name__ == '__main__': ...@@ -164,8 +166,7 @@ if __name__ == '__main__':
instance_id = get_instance_metadata()['instance-id'] instance_id = get_instance_metadata()['instance-id']
prefix = instance_id prefix = instance_id
ec2 = boto.ec2.connect_to_region(REGION)
ec2 = boto.connect_ec2()
reservations = ec2.get_all_instances(instance_ids=[instance_id]) reservations = ec2.get_all_instances(instance_ids=[instance_id])
instance = reservations[0].instances[0] instance = reservations[0].instances[0]
if instance.instance_profile['arn'].endswith('/abbey'): if instance.instance_profile['arn'].endswith('/abbey'):
......
...@@ -110,6 +110,16 @@ if [[ ! -z "$callback_url" ]]; then ...@@ -110,6 +110,16 @@ if [[ ! -z "$callback_url" ]]; then
fi fi
fi fi
region_params=""
if [[ ! -z "$region" ]]; then
region_params="--region $region"
fi
identity_params="--identity /edx/var/jenkins/.ssh/id_rsa"
if [[ ! -z "$identity_path" ]]; then
identity_params="--identity $identity_path"
fi
cd configuration cd configuration
pip install -r requirements.txt pip install -r requirements.txt
...@@ -117,4 +127,4 @@ cd util/vpc-tools/ ...@@ -117,4 +127,4 @@ cd util/vpc-tools/
echo "$vars" > /var/tmp/$BUILD_ID-extra-vars.yml echo "$vars" > /var/tmp/$BUILD_ID-extra-vars.yml
cat /var/tmp/$BUILD_ID-extra-vars.yml cat /var/tmp/$BUILD_ID-extra-vars.yml
python -u abbey.py -p $play -t m3.large -d $deployment -e $environment -i /edx/var/jenkins/.ssh/id_rsa $base_params $blessed_params $playbookdir_params --vars /var/tmp/$BUILD_ID-extra-vars.yml -c $BUILD_NUMBER --configuration-version $configuration --configuration-secure-version $configuration_secure -k $jenkins_admin_ec2_key --configuration-secure-repo $jenkins_admin_configuration_secure_repo $configurationprivate_params $hipchat_params $cleanup_params $notification_params $datadog_params python -u abbey.py -p $play -t m3.large -d $deployment -e $environment $base_params $blessed_params $playbookdir_params --vars /var/tmp/$BUILD_ID-extra-vars.yml -c $BUILD_NUMBER --configuration-version $configuration --configuration-secure-version $configuration_secure -k $jenkins_admin_ec2_key --configuration-secure-repo $jenkins_admin_configuration_secure_repo $configurationprivate_params $hipchat_params $cleanup_params $notification_params $datadog_params $region_params $identity_params
...@@ -9,7 +9,7 @@ import requests ...@@ -9,7 +9,7 @@ import requests
try: try:
import boto.ec2 import boto.ec2
import boto.sqs import boto.sqs
from boto.vpc import VPCConnection import boto.vpc
from boto.exception import NoAuthHandlerFound, EC2ResponseError from boto.exception import NoAuthHandlerFound, EC2ResponseError
from boto.sqs.message import RawMessage from boto.sqs.message import RawMessage
from boto.ec2.blockdevicemapping import BlockDeviceType, BlockDeviceMapping from boto.ec2.blockdevicemapping import BlockDeviceType, BlockDeviceMapping
...@@ -90,7 +90,7 @@ def parse_args(): ...@@ -90,7 +90,7 @@ def parse_args():
help="configuration-private repo gitref", help="configuration-private repo gitref",
default="master") default="master")
parser.add_argument('--configuration-private-repo', required=False, parser.add_argument('--configuration-private-repo', required=False,
default="git@github.com:edx-ops/ansible-private", default="",
help="repo to use for private playbooks") help="repo to use for private playbooks")
parser.add_argument('-c', '--cache-id', required=True, parser.add_argument('-c', '--cache-id', required=True,
help="unique id to use as part of cache prefix") help="unique id to use as part of cache prefix")
...@@ -157,6 +157,18 @@ def get_instance_sec_group(vpc_id): ...@@ -157,6 +157,18 @@ def get_instance_sec_group(vpc_id):
) )
if len(grp_details) < 1: if len(grp_details) < 1:
#
# try scheme for non-cloudformation builds
#
grp_details = ec2.get_all_security_groups(
filters={
'tag:play': args.play,
'tag:environment': args.environment,
'tag:deployment': args.deployment}
)
if len(grp_details) < 1:
sys.stderr.write("ERROR: Expected atleast one security group, got {}\n".format( sys.stderr.write("ERROR: Expected atleast one security group, got {}\n".format(
len(grp_details))) len(grp_details)))
...@@ -188,7 +200,7 @@ def create_instance_args(): ...@@ -188,7 +200,7 @@ def create_instance_args():
user data user data
""" """
vpc = VPCConnection() vpc = boto.vpc.connect_to_region(args.region)
subnet = vpc.get_all_subnets( subnet = vpc.get_all_subnets(
filters={ filters={
'tag:aws:cloudformation:stack-name': stack_name, 'tag:aws:cloudformation:stack-name': stack_name,
...@@ -202,14 +214,14 @@ def create_instance_args(): ...@@ -202,14 +214,14 @@ def create_instance_args():
subnet = vpc.get_all_subnets( subnet = vpc.get_all_subnets(
filters={ filters={
'tag:cluster': args.play, 'tag:play': args.play,
'tag:environment': args.environment, 'tag:environment': args.environment,
'tag:deployment': args.deployment} 'tag:deployment': args.deployment}
) )
if len(subnet) < 1: if len(subnet) < 1:
sys.stderr.write("ERROR: Expected at least one subnet, got {}\n".format( sys.stderr.write("ERROR: Expected at least one subnet, got {} for {}-{}-{}\n".format(
len(subnet))) len(subnet), args.environment, args.deployment, args.play))
sys.exit(1) sys.exit(1)
subnet_id = subnet[0].id subnet_id = subnet[0].id
vpc_id = subnet[0].vpc_id vpc_id = subnet[0].vpc_id
...@@ -265,7 +277,7 @@ fi ...@@ -265,7 +277,7 @@ fi
ANSIBLE_ENABLE_SQS=true ANSIBLE_ENABLE_SQS=true
SQS_NAME={queue_name} SQS_NAME={queue_name}
SQS_REGION=us-east-1 SQS_REGION={region}
SQS_MSG_PREFIX="[ $instance_id $instance_ip $environment-$deployment $play ]" SQS_MSG_PREFIX="[ $instance_id $instance_ip $environment-$deployment $play ]"
PYTHONUNBUFFERED=1 PYTHONUNBUFFERED=1
HIPCHAT_TOKEN={hipchat_token} HIPCHAT_TOKEN={hipchat_token}
...@@ -392,7 +404,8 @@ rm -rf $base_dir ...@@ -392,7 +404,8 @@ rm -rf $base_dir
extra_vars_yml=extra_vars_yml, extra_vars_yml=extra_vars_yml,
secure_vars_file=secure_vars_file, secure_vars_file=secure_vars_file,
cache_id=args.cache_id, cache_id=args.cache_id,
datadog_api_key=args.datadog_api_key) datadog_api_key=args.datadog_api_key,
region=args.region)
mapping = BlockDeviceMapping() mapping = BlockDeviceMapping()
root_vol = BlockDeviceType(size=args.root_vol_size, root_vol = BlockDeviceType(size=args.root_vol_size,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment