def main()

in source/Tools Integration/MGN-Integration/MGN-automation-scripts/2-UserMgmt.py [0:0]


def main(arguments):
    parser = argparse.ArgumentParser(
        description=__doc__,
        formatter_class=argparse.RawDescriptionHelpFormatter)
    parser.add_argument('--Waveid', required=True)
    parser.add_argument('--WindowsUser', default="")
    args = parser.parse_args(arguments)

    UserHOST = ""

    # Get MF endpoints from FactoryEndpoints.json file
    if 'UserApiUrl' in endpoints:
        UserHOST = endpoints['UserApiUrl']
    else:
        print("ERROR: Invalid FactoryEndpoints.json file, please update UserApiUrl")
        sys.exit()

    print("****************************")
    print("*Login to Migration factory*")
    print("****************************")
    token = mfcommon.Factorylogin()

    print("****************************")
    print("*Getting Server List*")
    print("****************************")
    get_servers, linux_exist, windows_exist = mfcommon.get_factory_servers(args.Waveid, token, UserHOST)

    target_os = ""
    target_os = input("Enter target OS (Windows or Linux): ")
    while target_os.lower() != 'windows' and target_os.lower() != 'linux':
        print("Please provide a valid OS, either Windows or Linux")
        target_os = input("ReEnter target OS (Windows or Linux): ")
        print("")

    choice_flag = True
    choice = 3
    while choice_flag:
        print("1. Create user")
        print("2. Delete user")
        print("3. Exit")
        choice = input("Enter your choice [1-3]: ")
        if choice == '3':
            sys.exit(0)
        elif choice != '1' and choice != '2':
            print("Please provide a valid option [1, 2, 3]")
            print("")
        else:
            choice_flag = False
    if target_os.lower() == 'windows':

        if args.WindowsUser != "":
            Windows_Password = mfcommon.GetWindowsPassword()
            creds = " -Credential (New-Object System.Management.Automation.PSCredential(\"" + args.WindowsUser + "\", (ConvertTo-SecureString \"" + Windows_Password + "\" -AsPlainText -Force)))"
        else:
            creds = ""

        if choice == '1':
            print("")
            print("************************************")
            print("*Creating local admin on the server*")
            print("************************************")
            LocalAdminUser = input("Enter new Local admin username: ")
            localadmin_pass_first = getpass.getpass('New local admin Password: ')
            localadmin_pass_second = getpass.getpass('Re-enter Password: ')
            while(localadmin_pass_first != localadmin_pass_second):
                print("Password mismatch, please try again!")
                localadmin_pass_first = getpass.getpass('New local admin Password: ')
                localadmin_pass_second = getpass.getpass('Re-enter Password: ')
            localadmin_pass = localadmin_pass_second
            print("")
            for account in get_servers:
                if len(account["servers_windows"]) > 0:
                    for server in account["servers_windows"]:
                        if args.WindowsUser != "":
                            p_trustedhosts = subprocess.Popen(["powershell.exe", "Set-Item WSMan:\localhost\Client\TrustedHosts -Value '" + server["server_fqdn"] + "' -Concatenate -Force"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
                        command1 = "Invoke-Command -ComputerName " + server['server_fqdn'] + " -ScriptBlock {net user " + LocalAdminUser + " " + localadmin_pass + " /add}" + creds
                        print("------------------------------------------------------")
                        print("- Creating a local user on: " + server['server_fqdn'] + " -")
                        print("------------------------------------------------------")
                        p = subprocess.Popen(["powershell.exe", command1], stdout=sys.stdout)
                        p.communicate()
                        command2 = "Invoke-Command -ComputerName " + server['server_fqdn'] + " -ScriptBlock {net localgroup Administrators " + LocalAdminUser + " /add}" + creds
                        print("Adding user to local admin group on server: " + server['server_fqdn'])
                        p = subprocess.Popen(["powershell.exe", command2], stdout=sys.stdout)
                        p.communicate()
            print("")
        else:
            print("")
            print("*************************************")
            print("*Deleting local admin on the servers*")
            print("*************************************")
            print("")
            LocalAdminUser = input("Enter local admin UserName to be deleted: ")
            print("")
            for account in get_servers:
                if len(account["servers_windows"]) > 0:
                    for server in account["servers_windows"]:
                        if args.WindowsUser != "":
                            p_trustedhosts = subprocess.Popen(["powershell.exe", "Set-Item WSMan:\localhost\Client\TrustedHosts -Value '" + server["server_fqdn"] + "' -Concatenate -Force"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
                        command1 = "Invoke-Command -ComputerName " + server['server_fqdn'] + " -ScriptBlock {net user " + LocalAdminUser + " /delete}" + creds
                        print("------------------------------------------------------")
                        print("- Deleting a local user on: " + server['server_fqdn'] + " -")
                        print("------------------------------------------------------")
                        p = subprocess.Popen(["powershell.exe", command1], stdout=sys.stdout)
                        p.communicate()
    elif target_os.lower() == 'linux':
        user_name = ''
        pass_key = ''
        key_exist = False
        user_name, pass_key, key_exist = mfcommon.get_linux_password()
        if choice == '1':
            print("")
            print("*********************************************")
            print("* Creating local sudo user on Linux servers *")
            print("*********************************************")
            print("")
            new_user_name = input("Enter New User Name: ")
            new_password = getpass.getpass('Enter New Password: ')
            confirm_password = getpass.getpass('Re-Enter New Password: ')
            while new_password != confirm_password:
                print('Both the passwords should match, Please try again!')
                new_password = getpass.getpass('Enter New Password: ')
                confirm_password = getpass.getpass('Re-Enter New Password: ')
            print("")
            for account in get_servers:
                if len(account["servers_linux"]) > 0:
                    for server in account["servers_linux"]:
                        host = server["server_fqdn"]
                        create_user(host, user_name, pass_key, key_exist, new_user_name, new_password)
        else:
            print("")
            print("**********************************************")
            print("*Deleting local sudo users on all the servers*")
            print("**********************************************")
            print("")
            new_user_name = input("Enter local User Name: ")
            print("")
            for account in get_servers:
                if len(account["servers_linux"]) > 0:
                    for server in account["servers_linux"]:
                        host = server["server_fqdn"]
                        delete_linux_user(host, user_name, pass_key, key_exist, new_user_name)
                        print("")