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
def user_name(): username = os.getlogin() if username == 'root': # digitalocean username = gcloud.list()[0].username.replace('_nearprotocol_com', '') return username
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)
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