Beispiel #1
0
    def launch_oc_agent(cls, oc_server, nova_client, network):
        name = Utils.generate_unique_name("bac-opencenter-agent")

        ipv4 = Utils.get_ipv4(oc_server.addresses["public"])
        
        fp = "vm_scripts/install_oc_agent.sh"
        data = Utils.read_data(fp)
        data = data.replace("SERVER_IP", ipv4)
        data = data.replace("PASSWORD", oc_server.oc_password)
            
        oc_agent = cls.create_server(nova_client, name, network.id, data)
        
        return oc_agent
Beispiel #2
0
 def wait_for_oc_service(cls, server):
     oc_port = 443
     
     try:
         ipv4 = Utils.get_ipv4(server.addresses["public"])
         msg = "Waiting for OpenCenter service to be up: %s" % server.name
         logger.info(msg)
         
         while (not Utils.port_is_open(ipv4, oc_port)):
             msg = "Still waiting for OpenCenter service to be up: %s" \
                     % server.name
             logger.debug(msg)
             sleep(10)
         msg = "OpenCenter Service Ready on: %s" % server.name
         logger.info(msg)
     except Exception,e:
         logger.error(msg)
Beispiel #3
0
    def wait_for_oc_server(cls, nova_client, oc_server, 
            network):

        updated_oc_server = oc_server
        oc_port = 443
        
        # Check server status until active
        status = cls.check_status(nova_client, updated_oc_server)
        while not status:
            if status == False:
                sleep(10)
                updated_oc_server = \
                        cls.update_server(nova_client, updated_oc_server)
            elif status is None:
                msg = "Server Error (OC Server - Booting Issue): Deleting %s" \
                        % updated_oc_server.name
                return cls.oc_server_recover(\
                        msg, updated_oc_server, nova_client, network)
            status = cls.check_status(nova_client, updated_oc_server)
                
        ipv4 = Utils.get_ipv4(updated_oc_server.addresses["public"])
        active_port = 22    # SSH
        
        # If active, do post setup
        if Utils.port_is_open(ipv4, active_port):
            updated_oc_server = cls.post_setup(nova_client, oc_server, oc_port)
            if not updated_oc_server:
                msg = "Server Error (OC Server - Setup Issue): Deleting %s" \
                        % updated_oc_server.name
                return cls.oc_server_recover(\
                        msg, updated_oc_server, nova_client, network)

        # If for some reason network is not working even when active, try again
        else: 
            msg = "Server Error (OC Server - Routing Issue): Deleting %s" \
                    % updated_oc_server.name
            return cls.oc_server_recover(\
                    msg, updated_oc_server, nova_client, network)
        
        return updated_oc_server
Beispiel #4
0
 def wait_for_oc_agents(cls, oc_agents, nova_client, oc_server, network):
     updated_oc_agents = []
     
     active_port = 22    # SSH
     while len(updated_oc_agents) != len(oc_agents):
         for index, oc_agent in enumerate(oc_agents):
             status = cls.check_status(nova_client, oc_agent)
             
             if status == True:
                 updated_oc_agent = cls.update_server(nova_client, oc_agent)
                 ipv4 = Utils.get_ipv4(updated_oc_agent.addresses["public"])
                 if updated_oc_agent not in updated_oc_agents:
                     if Utils.port_is_open(ipv4, active_port):
                         updated_oc_agent = \
                                 cls.post_setup(nova_client, oc_agent)
                         updated_oc_agents.append(updated_oc_agent)
                     else:
                         msg = "Server Error (OC Agent - " + \
                                 "Booting Issue): Deleting %s" \
                                 % oc_agent.name
                         logger.error(msg)
                         cls.delete_server(oc_agent)
                         sleep(10)
                         oc_agent = cls.launch_oc_agent(\
                                 oc_server, nova_client, network)
                         oc_agents[index] = oc_agent    
             elif status == False:
                 sleep(10)
             elif status is None:
                 msg = "Server Error (OC Agent - " + \
                         "Routing Issue): Deleting %s" % oc_agent.name
                 logger.error(msg)
                 cls.delete_server(oc_agent)
                 sleep(10)
                 oc_agent = cls.launch_oc_agent(\
                         oc_server, nova_client, network)
                 oc_agents[index] = oc_agent    
     
     return updated_oc_agents
Beispiel #5
0
    def post_setup(cls, nova_client, oc_server, oc_port = None):
        # Update server to have latest info
        updated_oc_server = cls.update_server(nova_client, oc_server)

        # Set passwords
        updated_oc_server = cls.update_root_password(\
                oc_server, updated_oc_server)
        updated_oc_server = cls.update_oc_password(oc_server, updated_oc_server)
        
        # Print server info
        Utils.print_server_info(updated_oc_server)

        # Run payloads via SSH
        ipv4 = Utils.get_ipv4(updated_oc_server.addresses["public"])
        command = "ssh -q -o StrictHostKeyChecking=no %s " % ipv4 + \
                "'chmod +x /etc/prep.sh ; /etc/prep.sh'"
        Utils.do_subprocess(command)

        # Wait for opencenter services to be ready, if required
        if oc_port: cls.wait_for_oc_service(updated_oc_server)
        
        return updated_oc_server
Beispiel #6
0
    def build_a_cloud(cls, nova_client):
        logger.info("Build A Cloud Started")

        # Dev Cleanup
        cls.remove_user_networks(nova_client)

        # Check RAM & CloudNetwork Quotas
        cls.check_quotas(nova_client)

        # Create new network
        cidr = "192.168.3.0/24"
        network = cls.create_network(nova_client, "bac", cidr)

        ## Launch opencenter cluster
        num_of_oc_agents = 4
        oc_server, oc_agents = \
                cls.launch_cluster(nova_client, network, num_of_oc_agents)
                
        logger.info("Vanilla Cluster Launched")
        Utils.print_server_info(oc_server)
        for oc_agent in oc_agents:
            Utils.print_server_info(oc_agent)

        logger.info("Provisioning Cluster")
        oc_user = "******"
        oc_password = oc_server.oc_password
        oc_server_ipv4 = Utils.get_ipv4(oc_server.addresses["public"])
        oc_url ="https://%s:8443" % oc_server_ipv4
         
        oc.provision_cluster(nova_client, oc_server, oc_url, oc_user, \
            oc_password, num_of_oc_agents, cidr)

        logger.info("Checking & Deleting any Servers that had a Booting Error")
        cls.delete_errored_servers(nova_client)

        logger.info("Build A Cloud Finished")