コード例 #1
0
ファイル: web_app.py プロジェクト: vegitron/aws-mess-around
def create_webapp_instances(c, count, domain, security_groups, tags):
    tags["Role"] = "app-server"

    # Launch a vanilla amazon linux ami
    ec2_ids = launch_base_image(c, 1, security_groups, tags)

    print "New ID: ", ec2_ids

    new_id = ec2_ids[0]

    new_ami_id = None

    # Turn the EC2 instance into a viable app host
    extra_env = {"ANSIBLE_SERVICE_DOMAIN": domain}
    run_playbook_on_instances_by_ids(c,
                                     "aws_mess_around/playbooks/basics.yml",
                                     [new_id],
                                     extra_env)

    # XXX - this should be named based on the project/what-not!
    new_ami_id = create_ami_from_instance(c, new_id, MY_AMI_NAME, tags)

    # Launch webapp instances from the new ami we created.
    new_ids = launch_ami(c, new_ami_id, count, security_groups, tags)

    return new_ids
コード例 #2
0
ファイル: proxy.py プロジェクト: vegitron/aws-mess-around
def create_proxy_instances(c, domain, count, security_groups, tags):
    tags["Role"] = "reverse-proxy"
    ec2_ids = launch_base_image(c, count, security_groups, tags)

    playbook = "aws_mess_around/playbooks/proxy/build_proxy.yml"

    run_playbook_on_instances_by_ids(c, playbook, ec2_ids)

    set_app_servers_for_proxies_by_id(c, domain, ec2_ids, [])
    return ec2_ids
コード例 #3
0
ファイル: proxy.py プロジェクト: vegitron/aws-mess-around
def create_proxy_instances(c, domain, count, security_groups, tags):
    tags["Role"] = "reverse-proxy"
    ec2_ids = launch_base_image(c, count, security_groups, tags)

    playbook = "aws_mess_around/playbooks/proxy/build_proxy.yml"

    run_playbook_on_instances_by_ids(
        c,
        playbook,
        ec2_ids,
    )

    set_app_servers_for_proxies_by_id(c, domain, ec2_ids, [])
    return ec2_ids
コード例 #4
0
ファイル: db.py プロジェクト: vegitron/aws-mess-around
def add_database_to_host_id(c, database, instance_id, password):
    """
    Adds a database to the database server at the given instance
    """
    session = c["session"]

    region_name = c["region_name"]
    ec2_client = session.client("ec2")
    ec2_region = session.resource('ec2', region_name=region_name)

    playbook = "aws_mess_around/playbooks/db/add_database.yml"

    data = {"database": database, "root_password": password}

    host = ec2_region.Instance(instance_id)
    run_playbook_on_instances_by_ids(c, playbook, [instance_id], data=data)
コード例 #5
0
ファイル: db.py プロジェクト: vegitron/aws-mess-around
def create_db_instance(c, security_groups, tags, server_id):
    tags["Role"] = "database"
    ec2_ids = launch_base_image(c, 1, security_groups, tags)
    print "IDs: ", ec2_ids
    playbook = "aws_mess_around/playbooks/db/build_database.yml"

    password = generate_password()
    print "Setting root password: "******"ANSIBLE_MYSQL_ROOT": password,
        "ANSIBLE_MYSQL_SERVER_ID": "%s" % server_id
    }

    run_playbook_on_instances_by_ids(c, playbook, ec2_ids, env)

    return ec2_ids[0], password
コード例 #6
0
ファイル: db.py プロジェクト: vegitron/aws-mess-around
def create_db_instance(c, security_groups, tags, server_id):
    tags["Role"] = "database"
    ec2_ids = launch_base_image(c, 1, security_groups, tags)
    print "IDs: ", ec2_ids
    playbook = "aws_mess_around/playbooks/db/build_database.yml"

    password = generate_password()
    print "Setting root password: "******"ANSIBLE_MYSQL_ROOT": password,
           "ANSIBLE_MYSQL_SERVER_ID": "%s" % server_id}

    run_playbook_on_instances_by_ids(c,
                                     playbook,
                                     ec2_ids,
                                     env)

    return ec2_ids[0], password
コード例 #7
0
ファイル: db.py プロジェクト: vegitron/aws-mess-around
def add_slave_to_master_by_ids(c, master_id, master_pwd, slave_id, slave_pwd):
    """
    Add the mysql host at host slave_id as a replication slave to the mysql
    host at host master_id.

    Username for both is assumed to be root.

    This *only* works for initial setup.
    """
    session = c["session"]
    region_name = c["region_name"]
    ec2_client = session.client("ec2")
    ec2_region = session.resource('ec2', region_name=region_name)

    master = ec2_region.Instance(master_id)

    slave = ec2_region.Instance(slave_id)

    repl_pwd = generate_password(10)

    env = {"ANSIBLE_MYSQL_MASTER_PASSWORD": master_pwd,
           "ANSIBLE_MYSQL_REPL_PASSWORD": repl_pwd,
           "ANSIBLE_MYSQL_SLAVE_IP": slave.private_ip_address,
           }

    # Grant access to the slave...
    master_playbook = "aws_mess_around/playbooks/db/add_slave_access.yml"

    run_playbook_on_instances_by_ids(c,
                                     master_playbook,
                                     [master_id],
                                     env)

    env = {"ANSIBLE_MYSQL_SLAVE_PASSWORD": slave_pwd,
           "ANSIBLE_MYSQL_REPL_PASSWORD": repl_pwd,
           "ANSIBLE_MYSQL_MASTER_IP": master.private_ip_address,
           }

    # Read the master status, and connect
    slave_playbook = "aws_mess_around/playbooks/db/join_master.yml"
    run_playbook_on_instances_by_ids(c,
                                     slave_playbook,
                                     [slave_id],
                                     env)
コード例 #8
0
ファイル: db.py プロジェクト: vegitron/aws-mess-around
def add_database_to_host_id(c, database, instance_id, password):
    """
    Adds a database to the database server at the given instance
    """
    session = c["session"]

    region_name = c["region_name"]
    ec2_client = session.client("ec2")
    ec2_region = session.resource('ec2', region_name=region_name)

    playbook = "aws_mess_around/playbooks/db/add_database.yml"

    data = {"database": database, "root_password": password}

    host = ec2_region.Instance(instance_id)
    run_playbook_on_instances_by_ids(c,
                                     playbook,
                                     [instance_id],
                                     data=data)
コード例 #9
0
ファイル: proxy.py プロジェクト: vegitron/aws-mess-around
def set_app_servers_for_proxies_by_id(c, domain, proxy_ids, app_server_ids):
    session = c["session"]
    region_name = c["region_name"]

    ec2_client = session.client('ec2')
    ec2_region = session.resource('ec2', region_name=region_name)

    # XXX - make this configurable per service, at least
    url = "http://depts.washington.edu/sacg/news/static/catalyst_offline.html"
    data = {"app_servers": [], "domain": domain, "emergency_offline_url": url}

    for iid in app_server_ids:
        instance = ec2_region.Instance(iid)
        data["app_servers"].append(instance.private_ip_address)

    playbook = "aws_mess_around/playbooks/proxy/set_proxy_backends.yml"

    env = {}
    run_playbook_on_instances_by_ids(c, playbook, proxy_ids, data=data)
コード例 #10
0
ファイル: proxy.py プロジェクト: vegitron/aws-mess-around
def set_app_servers_for_proxies_by_id(c, domain, proxy_ids, app_server_ids):
    session = c["session"]
    region_name = c["region_name"]

    ec2_client = session.client("ec2")
    ec2_region = session.resource("ec2", region_name=region_name)

    # XXX - make this configurable per service, at least
    url = "http://depts.washington.edu/sacg/news/static/catalyst_offline.html"
    data = {"app_servers": [], "domain": domain, "emergency_offline_url": url}

    for iid in app_server_ids:
        instance = ec2_region.Instance(iid)
        data["app_servers"].append(instance.private_ip_address)

    playbook = "aws_mess_around/playbooks/proxy/set_proxy_backends.yml"

    env = {}
    run_playbook_on_instances_by_ids(c, playbook, proxy_ids, data=data)
コード例 #11
0
ファイル: db.py プロジェクト: vegitron/aws-mess-around
def add_slave_to_master_by_ids(c, master_id, master_pwd, slave_id, slave_pwd):
    """
    Add the mysql host at host slave_id as a replication slave to the mysql
    host at host master_id.

    Username for both is assumed to be root.

    This *only* works for initial setup.
    """
    session = c["session"]
    region_name = c["region_name"]
    ec2_client = session.client("ec2")
    ec2_region = session.resource('ec2', region_name=region_name)

    master = ec2_region.Instance(master_id)

    slave = ec2_region.Instance(slave_id)

    repl_pwd = generate_password(10)

    env = {
        "ANSIBLE_MYSQL_MASTER_PASSWORD": master_pwd,
        "ANSIBLE_MYSQL_REPL_PASSWORD": repl_pwd,
        "ANSIBLE_MYSQL_SLAVE_IP": slave.private_ip_address,
    }

    # Grant access to the slave...
    master_playbook = "aws_mess_around/playbooks/db/add_slave_access.yml"

    run_playbook_on_instances_by_ids(c, master_playbook, [master_id], env)

    env = {
        "ANSIBLE_MYSQL_SLAVE_PASSWORD": slave_pwd,
        "ANSIBLE_MYSQL_REPL_PASSWORD": repl_pwd,
        "ANSIBLE_MYSQL_MASTER_IP": master.private_ip_address,
    }

    # Read the master status, and connect
    slave_playbook = "aws_mess_around/playbooks/db/join_master.yml"
    run_playbook_on_instances_by_ids(c, slave_playbook, [slave_id], env)
コード例 #12
0
ファイル: db.py プロジェクト: vegitron/aws-mess-around
def add_user_to_database(c, user, host, password, db, instance, root_password):
    """
    Grants the user @ host all privs on a given db on an instance.
    """
    session = c["session"]

    region_name = c["region_name"]
    ec2_client = session.client("ec2")
    ec2_region = session.resource('ec2', region_name=region_name)

    playbook = "aws_mess_around/playbooks/db/add_user.yml"

    data = {"user": user, "password": password, "database": db, "host": host,
            "root_password": root_password}

    print "D: ", data

    host = ec2_region.Instance(instance)
    run_playbook_on_instances_by_ids(c,
                                     playbook,
                                     [instance],
                                     data=data)
コード例 #13
0
ファイル: db.py プロジェクト: vegitron/aws-mess-around
def add_user_to_database(c, user, host, password, db, instance, root_password):
    """
    Grants the user @ host all privs on a given db on an instance.
    """
    session = c["session"]

    region_name = c["region_name"]
    ec2_client = session.client("ec2")
    ec2_region = session.resource('ec2', region_name=region_name)

    playbook = "aws_mess_around/playbooks/db/add_user.yml"

    data = {
        "user": user,
        "password": password,
        "database": db,
        "host": host,
        "root_password": root_password
    }

    print "D: ", data

    host = ec2_region.Instance(instance)
    run_playbook_on_instances_by_ids(c, playbook, [instance], data=data)
コード例 #14
0
ファイル: web_app.py プロジェクト: vegitron/aws-mess-around
def create_webapp_instances(c, count, domain, security_groups, tags):
    tags["Role"] = "app-server"

    # Launch a vanilla amazon linux ami
    ec2_ids = launch_base_image(c, 1, security_groups, tags)

    print "New ID: ", ec2_ids

    new_id = ec2_ids[0]

    new_ami_id = None

    # Turn the EC2 instance into a viable app host
    extra_env = {"ANSIBLE_SERVICE_DOMAIN": domain}
    run_playbook_on_instances_by_ids(c, "aws_mess_around/playbooks/basics.yml",
                                     [new_id], extra_env)

    # XXX - this should be named based on the project/what-not!
    new_ami_id = create_ami_from_instance(c, new_id, MY_AMI_NAME, tags)

    # Launch webapp instances from the new ami we created.
    new_ids = launch_ami(c, new_ami_id, count, security_groups, tags)

    return new_ids
コード例 #15
0
    def handle(self, *args, **kwargs):
        c = get_context()
        if False:
            cleanup_all(c)

        # Find or create a DB cluster to use.
        db_settings = get_database_config_for_project(c, "myuw",
                                                      "aws_mess_around")
        print "DB settings: ", db_settings

        # Find or create the proxies the app servers will live behind.
        proxy_settings = get_proxy_config_for_project(c, "myuw",
                                                      "aws_mess_around")

        print "Proxy settings: ", proxy_settings

        # Get a base image to do build a MyUW AMI off of
        my_security_group = settings.AWS_SECURITY_GROUP_NAME
        tags = {
            "Project": "myuw",
            "Use": "messing-around",
            "ResponsibleParty": settings.AWS_RESPONSIBLE_PARTY,
        }

        # instance_ids = create_webapp_instances(c, 1, DEMO_DOMAIN,
        #                                        [my_security_group], tags)

        # instance_id = instance_ids[0]
        instance_id = 'i-d7d3370f'

        print "Our base instance ID: ", instance_id

        # Get the host ready to be a MyUW app server
        playbook = "aws_mess_around/playbooks/app/prep_host.yml"

        urls = [
            "url(r'^support', include('userservice.urls'))",
            "url(r'^restclients/', include('restclients.urls'))",
            "url(r'^logging/', include('django_client_logger.urls'))",
            "url(r'^', include('myuw.urls'))"
        ]

        # XXX - this should change when the memcached work is implemented.
        cache = "myuw.util.cache_implementation.MyUWCache"
        secret_key = get_secret_key_for_project("myuw", "aws_mess_around")
        extra_settings = "templates/myuw/project_settings.py"
        data = {
            "files_dir": settings.AWS_FILES_PATH,
            "file_group": "ubuntu",
            "webservice_client_cert_name": "myuw-uwca.cert",
            "webservice_client_key_name": "myuw-uwca.key",
            # "build_number": get_next_build_for_project("myuw"),
            "build_number": 8,
            "git_repository": "https://github.com/uw-it-aca/myuw.git",
            "git_version": "feature/aws-shibboleth",
            "pip_requirements_files": ["requirements.txt"],
            "project_url_definitions": urls,
            "database_name": "myuw",
            "database_user": db_settings["username"],
            "database_password": db_settings["password"],
            "database_host": db_settings["host"],
            "allowed_hosts": [DEMO_DOMAIN],
            "secret_key": secret_key,
            "digitlib_client_redirect": False,
            "userservice_admin_group": "u_pmichaud_myuwdevtesters",
            "restclients_admin_group": "u_pmichaud_myuwdevtesters",
            "restclients_dao_cache_class": cache,
            "project_settings_template": extra_settings,
            "migrate_apps": ["myuw"],
            "shib_required_url": "/",
            "restclients": {
                "test": [],
                "production": [
                    "gws", "sws", "pws", "hfs", "book", "uwnetid", "canvas",
                    "libraries", "trumba_calendar", "digit_lib", "iasystem",
                    "grad"
                ],
            },
        }
        run_playbook_on_instances_by_ids(c,
                                         playbook, [instance_id],
                                         data=data,
                                         vars_file="aws/myuw/production.json")

        # Add our instances to the proxy
        proxy_ids = [proxy_settings["instance_id"]]
        # set_app_servers_for_proxies_by_id(c, DEMO_DOMAIN, proxy_ids,
        #                                   [instance_id])

        instance = get_instance(c, instance_id)

        print "IP: ", instance.public_ip_address
コード例 #16
0
    def handle(self, *args, **kwargs):
        c = get_context()
        if False:
            cleanup_all(c)

        # Find or create a DB cluster to use.
        db_settings = get_database_config_for_project(c,
                                                      "myuw",
                                                      "aws_mess_around")
        print "DB settings: ", db_settings

        # Find or create the proxies the app servers will live behind.
        proxy_settings = get_proxy_config_for_project(c,
                                                      "myuw",
                                                      "aws_mess_around")

        print "Proxy settings: ", proxy_settings

        # Get a base image to do build a MyUW AMI off of
        my_security_group = settings.AWS_SECURITY_GROUP_NAME
        tags = {"Project": "myuw",
                "Use": "messing-around",
                "ResponsibleParty": settings.AWS_RESPONSIBLE_PARTY,
                }

        # instance_ids = create_webapp_instances(c, 1, DEMO_DOMAIN,
        #                                        [my_security_group], tags)

        # instance_id = instance_ids[0]
        instance_id = 'i-d7d3370f'

        print "Our base instance ID: ", instance_id

        # Get the host ready to be a MyUW app server
        playbook = "aws_mess_around/playbooks/app/prep_host.yml"

        urls = ["url(r'^support', include('userservice.urls'))",
                "url(r'^restclients/', include('restclients.urls'))",
                "url(r'^logging/', include('django_client_logger.urls'))",
                "url(r'^', include('myuw.urls'))"
                ]

        # XXX - this should change when the memcached work is implemented.
        cache = "myuw.util.cache_implementation.MyUWCache"
        secret_key = get_secret_key_for_project("myuw", "aws_mess_around")
        extra_settings = "templates/myuw/project_settings.py"
        data = {"files_dir": settings.AWS_FILES_PATH,
                "file_group": "ubuntu",
                "webservice_client_cert_name": "myuw-uwca.cert",
                "webservice_client_key_name": "myuw-uwca.key",
                # "build_number": get_next_build_for_project("myuw"),
                "build_number": 8,
                "git_repository": "https://github.com/uw-it-aca/myuw.git",
                "git_version": "feature/aws-shibboleth",
                "pip_requirements_files": ["requirements.txt"],
                "project_url_definitions": urls,
                "database_name": "myuw",
                "database_user": db_settings["username"],
                "database_password": db_settings["password"],
                "database_host": db_settings["host"],
                "allowed_hosts": [DEMO_DOMAIN],
                "secret_key": secret_key,
                "digitlib_client_redirect": False,
                "userservice_admin_group": "u_pmichaud_myuwdevtesters",
                "restclients_admin_group": "u_pmichaud_myuwdevtesters",
                "restclients_dao_cache_class": cache,
                "project_settings_template": extra_settings,
                "migrate_apps": ["myuw"],
                "shib_required_url": "/",
                "restclients": {"test": [],
                                "production": ["gws", "sws", "pws", "hfs",
                                               "book", "uwnetid",
                                               "canvas",
                                               "libraries", "trumba_calendar",
                                               "digit_lib",
                                               "iasystem",
                                               "grad"],
                                },

                }
        run_playbook_on_instances_by_ids(c,
                                         playbook,
                                         [instance_id],
                                         data=data,
                                         vars_file="aws/myuw/production.json")

        # Add our instances to the proxy
        proxy_ids = [proxy_settings["instance_id"]]
        # set_app_servers_for_proxies_by_id(c, DEMO_DOMAIN, proxy_ids,
        #                                   [instance_id])

        instance = get_instance(c, instance_id)

        print "IP: ", instance.public_ip_address