def create_cluster(auth_token=None, master_name='lambda-master',
                   slaves=1, vcpus_master=4, vcpus_slave=4,
                   ram_master=4096, ram_slave=4096, disk_master=40, disk_slave=40,
                   ip_allocation='master', network_request=1, project_name='lambda.grnet.gr'):
    provisioner = Provisioner(auth_token=auth_token)
    provisioner.create_lambda_cluster(vm_name=master_name,
                                      slaves=slaves,
                                      vcpus_master=vcpus_master,
                                      vcpus_slave=vcpus_slave,
                                      ram_master=ram_master,
                                      ram_slave=ram_slave,
                                      disk_master=disk_master,
                                      disk_slave=disk_slave,
                                      ip_allocation=ip_allocation,
                                      network_request=network_request,
                                      project_name=project_name)

    provisioner_response = provisioner.get_cluster_details()
    master_id = provisioner_response['nodes']['master']['id']
    master_ip = provisioner.get_server_private_ip(master_id)
    provisioner_response['nodes']['master']['internal_ip'] = master_ip
    # slave_ids = [slave['id'] for slave in provisioner_response['nodes']['slaves']]
    for i, slave in enumerate(provisioner_response['nodes']['slaves']):
        slave_ip = provisioner.get_server_private_ip(slave['id'])
        provisioner_response['nodes']['slaves'][i]['internal_ip'] = slave_ip
    provisioner_response['pk'] = provisioner.get_private_key()

    ansible_manager = Manager(provisioner_response)
    ansible_manager.create_inventory()

    return ansible_manager, provisioner_response
def test_playbook_run():
    with patch('fokia.ansible_manager.PlayBook') as pb, \
            patch('fokia.ansible_manager.callbacks') as cb, \
            patch('fokia.ansible_manager.utils') as ut:
        cb.PlaybookCallbacks.return_value = "a"
        cb.PlaybookRunnerCallbacks.return_value = "b"
        cb.AggregateStats.return_value = "c"
        manager = Manager(test_provisioner_response)
        manager.create_inventory()
        manager.run_playbook(playbook_file="../ansible/playbooks/testinventory.yml",
                             tags=["touch"])

    assert pb.call_args[1]['inventory'].groups[0].name == 'all'
    assert pb.call_args[1]['inventory'].groups[1].name == 'master'
    assert pb.call_args[1]['inventory'].groups[2].name == 'slaves'

    assert pb.call_args[1]['inventory'].groups[1].hosts[
               0].name == u'snf-666976.vm.okeanos.grnet.gr'
    assert pb.call_args[1]['inventory'].groups[2].hosts[
               0].name == u'snf-666977.local'
def create_lambda_instance(auth_token=None, master_name='lambda-master',
                           slaves=1, vcpus_master=4, vcpus_slave=4,
                           ram_master=4096, ram_slave=4096, disk_master=40, disk_slave=40,
                           ip_allocation='master', network_request=1,
                           project_name='lambda.grnet.gr'):
    start_time = time.time()

    provisioner = Provisioner(auth_token=auth_token)
    provisioner.create_lambda_cluster(vm_name=master_name,
                                      slaves=slaves,
                                      vcpus_master=vcpus_master,
                                      vcpus_slave=vcpus_slave,
                                      ram_master=ram_master,
                                      ram_slave=ram_slave,
                                      disk_master=disk_master,
                                      disk_slave=disk_slave,
                                      ip_allocation=ip_allocation,
                                      network_request=network_request,
                                      project_name=project_name)

    provisioner_response = provisioner.get_cluster_details()
    master_id = provisioner_response['nodes']['master']['id']
    master_ip = provisioner.get_server_private_ip(master_id)
    provisioner_response['nodes']['master']['internal_ip'] = master_ip
    # slave_ids = [slave['id'] for slave in provisioner_response['nodes']['slaves']]
    for i, slave in enumerate(provisioner_response['nodes']['slaves']):
        slave_ip = provisioner.get_server_private_ip(slave['id'])
        provisioner_response['nodes']['slaves'][i]['internal_ip'] = slave_ip
    provisioner_response['pk'] = provisioner.get_private_key()

    print 'response =', provisioner_response
    provisioner_time = time.time()

    ansible_manager = Manager(provisioner_response)
    ansible_manager.create_inventory()

    ansible_result = ansible_manager.run_playbook(
        playbook_file=script_path + "/../../ansible/playbooks/cluster-install.yml")

    ansible_manager.cleanup()

    provisioner_duration = provisioner_time - start_time
    ansible_duration = time.time() - provisioner_time

    print 'VM provisioning took', round(provisioner_duration), 'seconds'
    print 'Ansible playbooks took', round(ansible_duration), 'seconds'
    print 'Ansible result', ansible_result

    return ansible_result