AERPAW-Platform-Control / aerpaw-portal

AERPAW Portal v2
0 stars 1 forks source link

AERPAW Control Framework (APCF) - ssh scripts initiated from portal to APCF backend #27

Open mjstealey opened 1 year ago

mjstealey commented 1 year ago

Define APCF ssh scripts and expected exit response for success/failure at each relevant portal experiment state transition

Overview

Details

ACTIVE_DEVELOPMENT --> SAVING_DEVELOPMENT

# production SAVE
sudo python3 /home/aerpawops/AERPAW-Dev/workflow-scripts/ap-cf-saveexit-ve-exp.py ${experiment_id} save

# production SAVE & EXIT
sudo python3 /home/aerpawops/AERPAW-Dev/workflow-scripts/ap-cf-saveexit-ve-exp.py ${experiment_id} save-and-exit

# mock success
TBD

# mock failure
TBD

# response on success
{
  "result": "Success",
  "msg": "None"
}

# exit code
0 = success
1 = failure

ACTIVE_EMULATION --> SAVED

ACTIVE_SANDBOX --> SAVING_SANDBOX

ACTIVE_TESTBED --> SAVED

SAVING_DEVELOPMENT --> SAVED

SAVING_DEVELOPMENT --> ACTIVE_DEVELOPMENT

SAVING_SANDBOX --> SAVED

SAVING_SANDBOX --> ACTIVE_SANDBOX

SAVED --> WAIT_DEVELOPMENT_DEPLOY

# production
/home/aerpawops/AERPAW-Dev/workflow-scripts/ap-cf-deploy-ve-exp.py ${experiment_id}

# mock success
/home/aerpawops/AERPAW-Dev/workflow-scripts/mock-tests/apcf_deploy_ve_exp_success.py ${experiment_id}

# mock failure
/home/aerpawops/AERPAW-Dev/workflow-scripts/mock-tests/apcf_deploy_ve_exp_failure.py ${experiment_id}

# response on success
{
    "msg": "Placeholder for future return data",
    "urn": "/home/aerpawops/experiments/{experiment_uuid}"
}

# exit code
0 = success
1 = failure

SAVED --> WAIT_SANDBOX_DEPLOY

SAVED --> WAIT_EMULATION_SCHEDULE

SAVED --> WAIT_TESTBED_SCHEDULE

# production
/home/aerpawops/AERPAW-Dev/workflow-scripts/ap-cf-submit-to-tbed.py {0}

# mock success
/home/aerpawops/AERPAW-Dev/workflow-scripts/mock-tests/apcf_deploy_ve_exp_success.py ${experiment_id}

# mock failure
/home/aerpawops/AERPAW-Dev/workflow-scripts/mock-tests/apcf_deploy_ve_exp_failure.py ${experiment_id}

# response on success
{
    "msg": "Placeholder for future return data",
    "urn": "/home/aerpawops/experiments/{experiment_uuid}"
}

# exit code
0 = success
1 = failure

WAIT_DEVELOPMENT_DEPLOY --> ACTIVE_DEVELOPMENT

def wait_development_deploy(request, experiment: AerpawExperiment, command: str) -> None:
    ssh_call = AerpawSsh(hostname=aerpaw_ops_host, username=aerpaw_ops_user, keyfile=aerpaw_ops_key_file)
    response, exit_code = ssh_call.send_command(command, verbose=True)
    if MOCK_OPS:
        # add sleep when using mock to simulate remote processing delay
        time.sleep(10)
        print('response: ' + response)
        print('exit code: ' + str(exit_code))

    # next state transition
    if exit_code == 0:
        # apcf_deploy_ve_exp - success
        # - wait_development_deploy --> active_development
        wait_development_deploy_to_active_development(request=request, experiment=experiment)
    else:
        # apcf_deploy_ve_exp - failure
        # - wait_development_deploy --> saved
        wait_development_deploy_to_saved(request=request, experiment=experiment)
        raise NotFound(
            detail="DeployError: unable to deploy active_development for /experiments/{0}/state".format(experiment.id))

WAIT_DEVELOPMENT_DEPLOY --> SAVED

def wait_development_deploy(request, experiment: AerpawExperiment, command: str) -> None:
    ssh_call = AerpawSsh(hostname=aerpaw_ops_host, username=aerpaw_ops_user, keyfile=aerpaw_ops_key_file)
    response, exit_code = ssh_call.send_command(command, verbose=True)
    if MOCK_OPS:
        # add sleep when using mock to simulate remote processing delay
        time.sleep(10)
        print('response: ' + response)
        print('exit code: ' + str(exit_code))

    # next state transition
    if exit_code == 0:
        # apcf_deploy_ve_exp - success
        # - wait_development_deploy --> active_development
        wait_development_deploy_to_active_development(request=request, experiment=experiment)
    else:
        # apcf_deploy_ve_exp - failure
        # - wait_development_deploy --> saved
        wait_development_deploy_to_saved(request=request, experiment=experiment)
        raise NotFound(
            detail="DeployError: unable to deploy active_development for /experiments/{0}/state".format(experiment.id))

WAIT_EMULATION_DEPLOY --> ACTIVE_EMULATION

WAIT_EMULATION_DEPLOY --> SAVED

WAIT_EMULATION_SCHEDULE --> WAIT_EMULATION_DEPLOY

WAIT_EMULATION_SCHEDULE --> SAVED

WAIT_SANDBOX_DEPLOY --> ACTIVE_SANDBOX

WAIT_SANDBOX_DEPLOY --> SAVED

WAIT_TESTBED_DEPLOY --> ACTIVE_TESTBED

WAIT_TESTBED_DEPLOY --> SAVED

WAIT_TESTBED_SCHEDULE --> WAIT_TESTBED_DEPLOY

WAIT_TESTBED_SCHEDULE --> SAVED

SAME_STATE --> SAME_STATE