From dc510177bbdedf89e999cc1ddbbc48971ac4765c Mon Sep 17 00:00:00 2001 From: Neill Cox Date: Fri, 3 Nov 2023 19:41:01 +1100 Subject: [PATCH] Split validation into src and dst --- pyproject.toml | 3 +- .../os_migrate_validate_src.py | 188 ++++++++++++++++++ 2 files changed, 190 insertions(+), 1 deletion(-) create mode 100644 src/tripleo_aio_helpers/os_migrate_validate_src.py diff --git a/pyproject.toml b/pyproject.toml index d6a4a0d..84d83fa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,5 +25,6 @@ classifiers = [ create_aio_vm = "tripleo_aio_helpers.create_aio_vm:main" os_migrate_setup = "tripleo_aio_helpers.os_migrate_setup:main" os_migrate_teardown = "tripleo_aio_helpers.os_migrate_teardown:main" -os_migrate_validate = "tripleo_aio_helpers.os_migrate_validate:main" +os_migrate_validate_dst = "tripleo_aio_helpers.os_migrate_validate_dst:main" +os_migrate_validate_src = "tripleo_aio_helpers.os_migrate_validate_src:main" prepare_deployment = "tripleo_aio_helpers.prepare_deployment:main" diff --git a/src/tripleo_aio_helpers/os_migrate_validate_src.py b/src/tripleo_aio_helpers/os_migrate_validate_src.py new file mode 100644 index 0000000..3838215 --- /dev/null +++ b/src/tripleo_aio_helpers/os_migrate_validate_src.py @@ -0,0 +1,188 @@ +""" +Quick and dirty script to validate that the necessary project, user,roles, +flavors, networks, images have been created +""" +import argparse +import json + +from .utils import openstack_cmd + + +def parse_args(): + """Parse the command line arguments""" + + # home = os.environ.get('HOME') + + parser = argparse.ArgumentParser() + # parser.add_argument("-d", "--project-domain", default="default") + parser.add_argument("-n", "--project-name", default="test-project") + # parser.add_argument( + # "-D", "--project-description", default="Test project" + # ) + # parser.add_argument("-u", "--username", default="test-user") + # parser.add_argument("-p", "--password", default="secrete123") + # parser.add_argument("-c", "--cloud", default="standalone") + # parser.add_argument("-g", "--gateway", default="10.76.23.254") + # parser.add_argument( + # "-C", "--public-network-cider", default="10.76.23.0/24" + # ) + # parser.add_argument("--private-network-cidr", default="192.168.100.0/24") + # parser.add_argument("--publice-net-start", default="10.76.23.50") + # parser.add_argument("--publice-net-end", default="10.76.23.52") + # parser.add_argument("--dns-server", default="10.76.23.245") + + # parser.add_argument("--dry-run", action="store_true") + parser.add_argument( + "--ssh", help="Connection string to run commands on a remote host." + ) + + # export OS_CLOUD=standalone + # export STANDALONE_HOST=10.76.23.39 + + args = parser.parse_args() + + return args + + +def validate_project(args): + """Validate that the project exists""" + cmd = "project list -f json" + project_exists = [ + x + for x in json.loads(openstack_cmd(cmd, args)) + if x["Name"] == args.project_name + ] + + if project_exists: + print(project_exists) + else: + print("Project {args.project_name} not found.") + + +def validate_user(args): + """Validate that the user exists""" + cmd = "user list -f json" + user_exists = [ + x + for x in json.loads(openstack_cmd(cmd, args)) + if x["Name"] == args.username + ] + + if user_exists: + print(user_exists) + else: + print("User not found") + +def validate_group_exists(args) + print("NYI") + +def validate_admin_in_group(args): + print("NYI") + +def validate_group_has_member_role(args): + print("NYI") + + +def validate_member_role(args): + """ + Validate that the member role has been assigned to the user. + """ + print(args) + # cmd = ( + # f"role add --user {args.username} " + # f"--project {args.project_id} member" + # ) + + # result = openstack_cmd(cmd, args) + + # cmd = f"role assignment list --user {args.user_id} --role member -f json" + # result = json.loads(openstack_cmd(cmd, args)) + + # if result: + # print("User has member role") + + +def validate_public_network(args): + """Coming soon - validate the public network""" + # pylint: disable=unused-argument,unused-variable + print("Validate public network - NYI") + cmd = ( + "network create --external --provider-physical-network datacentre " + "--provider-network-type flat public" + ) + cmd = ( + f"subnet create public-net --subnet-range {args.publice_network_cidr} " + f"--no-dhcp --gateway {args.gateway} --allocation-pool " + f"start={args.public_net_start},end={args.public_net_end} " + "--network public" + ) + print(cmd) + + +def validate_private_network(args): + """Coming soon - validate the private network""" + # pylint: disable=unused-argument,unused-variable + _ = "openstack network create --internal private" + _ = ( + "openstack subnet create private-net " + f"--subnet-range {args.private_network_cidr} --network private" + ) + print("validate private network - NYI") + + +def validate_cirros_flavor(args): + """Coming soon - create the cirros flavor""" + # pylint: disable=unused-argument + print("validate cirros flavor - NYI") + + +def validate_rhel_flavor(args): + """Coming soon - validate the rhel flavor""" + # pylint: disable=unused-argument + print("validate rhel flavor - NYI") + + +def validate_cirros_image(args): + """Coming soon - validate the cirros image""" + # pylint: disable=unused-argument + print("validate cirros image - NYI") + + +def validate_rhel_image(args): + """Coming soon - validate the rhel image""" + # pylint: disable=unused-argument + print("validate rhel image - NYI") + + +def validate_cirros_instance(args): + """Coming soon - validate the cirros instance""" + # pylint: disable=unused-argument + print("validate cirros instance - NYI") + + +def validate_rhel_instance(args): + """Coming soon - create the rhel instance""" + # pylint: disable=unused-argument + print("validate rhel instance - NYI") + + +def main(): + """main function""" + args = parse_args() + + validate_user(args) + validate_group(args) + validate_admin_in_group(args) + validate_admin_has_member_role(args) + validate_public_network(args) + validate_private_network(args) + validate_cirros_flavor(args) + validate_rhel_flavor(args) + validate_cirros_image(args) + validate_rhel_image(args) + validate_cirros_instance(args) + validate_rhel_instance(args) + + +if __name__ == "__main__": + main()