Example #1
0
def get_nodes(pattern=None):
    machines = gcloud.list(pattern=pattern,
                           project=PROJECT,
                           username=NODE_USERNAME,
                           ssh_key_path=NODE_SSH_KEY_PATH)
    nodes = pmap(
        lambda machine: GCloudNode(machine.name,
                                   username=NODE_USERNAME,
                                   project=PROJECT,
                                   ssh_key_path=NODE_SSH_KEY_PATH), machines)
    return nodes
Example #2
0
def user_name():
    username = os.getlogin()
    if username == 'root':  # digitalocean
        username = gcloud.list()[0].username.replace('_nearprotocol_com', '')
    return username
Example #3
0
import sys
import datetime
import pathlib
import tempfile
import pathlib

sys.path.append(str(pathlib.Path(__file__).resolve().parents[2] / 'lib'))
from configured_logger import logger
from utils import user_name

if len(sys.argv) >= 2:
    node_prefix = sys.argv[1]
else:
    node_prefix = f'pytest-node-{user_name()}'
nodes = [
    machine for machine in gcloud.list()
    if machine.name.startswith(node_prefix)
]

if len(sys.argv) >= 3:
    log_file = sys.argv[2]
else:
    log_file = pathlib.Path(tempfile.gettempdir()) / 'python-rc.log'

collected_place = (
    pathlib.Path(tempfile.gettempdir()) / 'near' /
    f'collected_logs_{datetime.datetime.strftime(datetime.datetime.now(),"%Y%m%d")}'
)
collected_place.mkdir(parents=True, exist_ok=True)

#!/usr/bin/env python

# When script exit with traceback, remote node is not deleted. This script is
# to delete remote machines so test can be rerun
# DANGER: make sure not delete production nodes!

from rc import gcloud, pmap
from distutils.util import strtobool
import sys
sys.path.append('lib')
from utils import user_name

machines = gcloud.list()
to_delete_prefix = sys.argv[1] if len(
    sys.argv) >= 2 else f"pytest-node-{user_name()}-"
to_delete = list(
    filter(lambda m: m.name.startswith(to_delete_prefix), machines))

if to_delete:
    a = input(
        f"going to delete {list(map(lambda m: m.name, to_delete))}\ny/n: ")
    if strtobool(a):

        def delete_machine(m):
            print(f'deleting {m.name}')
            m.delete()
            print(f'{m.name} deleted')

        pmap(delete_machine, to_delete)
Example #5
0
def test_gcloud():
    # Cleanup from last fail
    a = gcloud.get('test-rc-node')
    if a is not None:
        a.delete()

    # Test list
    with Timer('list machine'):
        old_machines = gcloud.list()
    assert len(list(filter(lambda machine: machine.name ==
                           'test-rc-node', old_machines))) == 0

    # Test get None
    assert gcloud.get('test-rc-node') is None

    # Test create machine
    with Timer('create machine'):
        machine1 = create_test_machine()
    assert machine1.name == "test-rc-node"
    assert machine1.ip != ''
    assert machine1.ssh_key_path != ''
    assert machine1.username != ''
    assert machine1.status() == "RUNNING"

    # Test get machine
    with Timer('get machine'):
        machine1_get = gcloud.get('test-rc-node')
    assert machine1 == machine1_get

    # Test list after create
    new_machines = gcloud.list()
    assert len(list(filter(lambda machine: machine.name ==
                           'test-rc-node', new_machines))) == 1
    assert len(new_machines) == len(old_machines) + 1

    # Test shutdown
    with Timer('shutdown'):
        machine1.shutdown()
    assert machine1.status() == "TERMINATED"

    # Test bootup
    with Timer('bootup'):
        machine1.bootup()
    assert machine1.status() == "RUNNING"

    # Test upload download
    machine1.upload(local_path='rc/test/test_gcloud.py', machine_path="/tmp/")
    assert machine1.run("ls /tmp/test_gcloud.py")
    machine1.download(machine_path="/tmp/test_gcloud.py",
                      local_path="/tmp/test_gcloud.py")
    assert open(
        "/tmp/test_gcloud.py").read() == open("/tmp/test_gcloud.py").read()
    run(['rm', '/tmp/test_gcloud.py'])

    # Test run command on machine
    machine1.run(['echo', 'aaa', '>', '/tmp/aaaa.txt'])
    assert run('ls /tmp/aaaa.txt').returncode != 0
    machine1.run(['grep', '', '/tmp/aaaa.txt'])
    p = machine1.run('cat /tmp/aaaa.txt')
    assert p.stdout == 'aaa\n'

    # Test delete
    with Timer('delete machine'):
        machine1.delete()
    assert gcloud.get('test-rc-node') is None