diff --git a/entrypoint.sh b/entrypoint.sh index 3edcb4860802c5d94dbc0236028c80501d6ac32f..fee192d5ea7ddac3d34bc87a838c904fe109cbfa 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -63,10 +63,13 @@ ANSWERS_FILE=$(realpath 'answers.json') echo {} > "$ANSWERS_FILE" VARIABLES_FILE='variables.yml' -PREPARE_ANSWERS_PY='../manage_answers.py' +PREPARE_ANSWERS_PY=$(realpath "manage_answers.py") if [ -f $VARIABLES_FILE ]; then python3.8 "$PREPARE_ANSWERS_PY" "$INVENTORY_FILE" "$ANSWERS_FILE" "$ANSWERS_STORAGE_API" fi +if $USER_CLEANUP; then + python3.8 "$PREPARE_ANSWERS_PY" "$INVENTORY_FILE" "$ANSWERS_FILE" "$ANSWERS_STORAGE_API" --cleanup +fi git submodule update --init --recursive || exit 1 cd provisioning || exit 1 @@ -89,6 +92,4 @@ if [ -f $PRE_PLAYBOOK_FILE ]; then fi PLAYBOOK_FILE="playbook.yml" -if ! $USER_CLEANUP; then - ansible-playbook $PLAYBOOK_FILE -i "${INVENTORY_FILE}" -e "@$ANSWERS_FILE" -vv || exit "$?" -fi \ No newline at end of file +ansible-playbook $PLAYBOOK_FILE -i "${INVENTORY_FILE}" -e "@$ANSWERS_FILE" -vv || exit "$?" diff --git a/manage_answers.py b/manage_answers.py index c7f0cae444c7bbf486bfbd9c49a22f2e4cbdbbdf..9e5906ada9392964d95775154ed7d96f8d36f2ba 100644 --- a/manage_answers.py +++ b/manage_answers.py @@ -50,10 +50,6 @@ def get_post_data_json(sandbox_id, generated_answers): return json.dumps(post_data, indent=4) -def get_answers(answers_storage_api, sandbox_id): - return requests.get(answers_storage_api + '/sandboxes/' + str(sandbox_id) + '/answers') - - def delete_answers(answers_storage_api, sandbox_id): requests.delete(answers_storage_api + '/sandboxes/' + str(sandbox_id)).raise_for_status() @@ -65,37 +61,37 @@ def post_answers(answers_storage_api, sandbox_id, generated_answers): post_response.raise_for_status() -def manage_answers(inventory_variables, generated_answers, answers_storage_api): - sandbox_id = inventory_variables['kypo_global_sandbox_allocation_unit_id'] - if get_answers(answers_storage_api, sandbox_id).status_code == 404: - post_answers(answers_storage_api, sandbox_id, generated_answers) - return 'post' - else: - delete_answers(answers_storage_api, sandbox_id) - return 'delete' - - def main(): parser = argparse.ArgumentParser() parser.add_argument('inventory_path') parser.add_argument('answers_file_path') parser.add_argument('answers_storage_api') + parser.add_argument('--cleanup', action='store_true') args = parser.parse_args() inventory_variables = load_inventory_variables(args.inventory_path) + sandbox_id = inventory_variables['kypo_global_sandbox_allocation_unit_id'] answers_file_path = args.answers_file_path answers_storage_api = args.answers_storage_api - generated_answers = generate_answers(inventory_variables) - create_answers_file(generated_answers, answers_file_path) + _success_msg = "\n[OK]: Successful {} upon answers-storage container.\n" + _request_error_msg = "\n[WARNING]: Failed {} upon answers-storage container." \ + "Status code {}.\n" + try: - operation = manage_answers(inventory_variables, generated_answers, answers_storage_api) - print(f'\n[OK]: Operation [{operation}] upon answers-storage container was successful.\n') + if args.cleanup: + delete_answers(answers_storage_api, sandbox_id) + print(_success_msg.format('DELETE')) + return + + generated_answers = generate_answers(inventory_variables) + create_answers_file(generated_answers, answers_file_path) + post_answers(answers_storage_api, sandbox_id, generated_answers) + print(_success_msg.format('POST')) except ConnectionError: print('\n[Warning]: Service answers-storage is unavailable.\n') except HTTPError as exc: - print(f'\n[Warning]: Unable to send generated answers to kypo-answers-storage service,' - f' status code {exc.response}.\n') + print(_request_error_msg.format('DELETE' if args.cleanup else 'POST', exc.response)) if __name__ == '__main__':