Esempio n. 1
0
def rename_container(ssh, old_name, new_name):
    """Renames a Docker container"""

    remove_container(ssh, new_name)  # to avoid conflicts
    command = "docker rename " + old_name + " " + new_name
    ssh_client.ssh_command(ssh, command, True)

    return
Esempio n. 2
0
def remove_container(ssh, microservice):
    """Removes a Docker container"""

    print(colored("--- Removing pre-existing container...", 'yellow'))

    command = "docker rm -f " + microservice
    ssh_client.ssh_command(ssh, command, True)

    return
Esempio n. 3
0
def restart_container(ssh, container_id):
    """Retarts a Docker container"""

    print(colored("--- Restarting container " + container_id, 'yellow'))

    command = "docker restart " + container_id
    ssh_client.ssh_command(ssh, command, True)

    return
Esempio n. 4
0
def build_image(ssh, microservice):
    """Builds a docker image"""

    remote_dockerfile_path = globals.REMOTE_WORK_DIR + microservice
    microservice = microservice.lower()  # to lowercase for Docker

    command = "cd " + remote_dockerfile_path + " && docker build -t " + microservice + ":latest ."  # moving to Dockerfile dir and building
    ssh_client.ssh_command(ssh, command, True)

    return
Esempio n. 5
0
def stop_container(ssh, microservice, container_id):
    """Stops a Docker container"""

    print(
        colored("--- Stopping previous version of " + microservice + "...",
                'yellow'))

    container_id = container_id[0]  # getting from list
    command = "docker stop " + container_id
    ssh_client.ssh_command(ssh, command, True)

    return
Esempio n. 6
0
def get_container_id(ssh, microservice):
    """Gets a container's id from its name"""

    command = "docker ps -qf" + " 'name=" + microservice + "'"  # id from name
    container_id = ssh_client.ssh_command(ssh, command, False)

    return (container_id)
Esempio n. 7
0
def health_check(ssh, args):
    """Checks container's health and runs appropriate actions"""

    if (args.healthcheck):  # healthcheck is optional

        microservices = args.microservice

        if ("all" in args.microservice):
            microservices = globals.APPS  # "all" was previously removed

        for microservice in microservices:

            microservice = microservice.lower()  # to lowercase for Docker

            print(
                colored("\n--- Checking health of " + microservice + "...",
                        'yellow'))

            command = "docker inspect " + microservice + " --format '{{.State.Health.Status}}'"
            health = ssh_client.ssh_command(ssh, command, False)
            health = str(health[0].rstrip().strip())  # parsing return

            if (health != "healthy"
                    and health != "starting"):  # container needs a restart

                print(colored("Container is " + health, 'red'))
                restart_container(ssh, microservice)

            else:
                print(colored("Container is " + health, 'green'))

    return
Esempio n. 8
0
def install_or_update_docker(ssh, callback):
    """Installs or updates Docker"""

    local_path = globals.LOCAL_SCRIPT_PATH
    remote_path = globals.REMOTE_SCRIPT_PATH

    if (callback == "install"):  # callback used to toggle function features
        message = "--- Installing Docker-ce "

    elif (callback == "update"):
        message = "\n--- Updating Docker to "

    message += globals.EXPECTED_DOCKER_VERSION + "..."
    print(colored(message, 'yellow'))

    ftp_client = ssh.open_sftp()
    ftp_client.put(local_path, remote_path)  # sending install script to remote server

    command = "chmod 755 " + remote_path + "&& sh " + remote_path  # running
    command_output = ssh_client.ssh_command(ssh, command, True)

    ftp_client.remove(remote_path)  # cleaning up
    ftp_client.close()

    print(colored("Done\n", 'yellow'))

    return
Esempio n. 9
0
def run_container(ssh, microservice):
    """Runs a Docker container"""

    print(colored("--- Running new version of service...", 'yellow'))

    command = "docker run -d --name " + microservice + " --network=host " + microservice + ":latest"  # binding ports to host network
    run_output = ssh_client.ssh_command(ssh, command, True)

    return (run_output)
Esempio n. 10
0
def get_docker_version(ssh):
    """Checks Docker version if any"""

    docker_version = ""

    command = "docker ps"
    command_output = ssh_client.ssh_command(ssh, command, False)

    if (command_output != []):  # Docker version found

        command = "docker --version"
        command_output = ssh_client.ssh_command(ssh, command, False)

        for line in command_output:
            docker_version += line  # retrieving version

        docker_version = docker_version.split(",")[0]  # formatting output
        docker_version = docker_version.split("Docker version ")[1]  # formatting output
        docker_version = docker_version.split(".")[0] + "." + docker_version.split(".")[1]  # formatting output

    return(docker_version)
Esempio n. 11
0
def main():
    init_log()

    # load config from settings.py
    load_config()

    # init ssh_key and tag object
    ssh_key = init_ssh_key()
    tag = init_tag()

    # destroy all droplet if necessary
    destroy_all_droplet()

    # make sure all robot's droplet are destroyed
    time.sleep(3)
    manager = digitalocean.Manager(token=config.token)
    assert len(manager.get_all_droplets(tag_name=config.default_tag_name)) == 0

    # create a new droplet
    droplet = create_new_droplet(ssh_key)

    # add the default tag to the droplet
    tag.add_droplets(droplet)

    # get the necessary information to access machine
    ip = get_machine_ip()

    # execute commands on the remote host
    ssh_connect(ip, 'root', config.public_key_file_path)
    logging.info('update system.....   it takes some time')
    ssh_command('yum install wget git -y')
    ssh_command('wget https://raw.githubusercontent.com/zMingGit/general/master/tcp_nanqinlang-1.3.2.sh')
    ssh_command('chmod u+x tcp_nanqinlang-1.3.2.sh')
    ssh_command('./tcp_nanqinlang-1.3.2.sh install')
    ssh_command('reboot')
    ssh_connect(ip, 'root', config.public_key_file_path)
    logging.info('install tcp TCP congestion algorithm.....  it takes some time')
    ssh_command('./tcp_nanqinlang-1.3.2.sh start')

    logging.info('install SSR...')
    ssh_command('yum install -y epel-release')
    ssh_command('yum install -y libsodium')
    ssh_command('git clone https://github.com/shadowsocksrr/shadowsocksr.git')
    ssh_command("echo '%s' > shadowsocksr/config.json" % config.ssr_config)
    ssh_command('python shadowsocksr/shadowsocks/server.py -c shadowsocksr/config.json -d start')
    logging.info('successfully installed')