def main()

in source/Tools Integration/CE-Integration/CE-automation-scripts/1-CEAgentInstall.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 = endpoints['UserApiUrl']
    print("")
    print("****************************")
    print("*Login to Migration factory*")
    print("****************************")
    token = mfcommon.Factorylogin()

    print("")
    print("************************")
    print("* Login to CloudEndure *")
    print("************************")
    r = CElogin(input('CE API Token: '), endpoint)
    if r is not None and "ERROR" in r:
        print(r)

    print("****************************")
    print("*** Getting Server List ***")
    print("****************************")
    Projects = ProjectList(args.Waveid, token, UserHOST, mfcommon.serverendpoint, mfcommon.appendpoint)
    linux_machines = False
    for project in Projects:
        if (len(project['Windows']) + len(project['Linux']) == 0):
            print("* CE Project " + project['ProjectName'] + " server list is empty *")
        else:
            print("* CE Project " + project['ProjectName'] + " *")
            if len(project['Windows']) > 0:
                print("   # Windows Server List #: ")
                for s in project['Windows']:
                   print("       " + s['server_fqdn'])
            if len(project['Linux']) > 0:
                linux_machines = True
                try:
                    print("   # Linux Server List #: ")
                    for s in project['Linux']:
                        print("       " + s['server_fqdn'])
                except Exception as error:
                    print('ERROR', error)
                    sys.exit(4)
        print("")

    print("******************************************")
    print("* Enter Linux Sudo username and password *")
    print("******************************************")
    user_name = ''
    pass_key = ''
    has_key = ''

    if linux_machines:
        user_name = input("Linux Username: ")
        has_key = input("If you use a private key to login, press [Y] or if use password press [N]: ")
        if has_key.lower() in 'y':
            pass_key = input('Private Key file name: ')
        else:
            pass_key_first = getpass.getpass('Linux Password: ')
            pass_key_second = getpass.getpass('Re-enter Password: ')
            while(pass_key_first != pass_key_second):
                print("Password mismatch, please try again!")
                pass_key_first = getpass.getpass('Linux Password: ')
                pass_key_second = getpass.getpass('Re-enter Password: ')
            pass_key = pass_key_second

    # Pass parameters to PowerShell
    # First Parameter - $reinstall - "Yes" or "No"
    # Second Parameter - $API_token - CloudEndure Install token
    # Third Parameter - $Servername - Server name that matchs Wave Id and CloudEndure project name
    print("")
    print("*********************************")
    print("* Installing CloudEndure Agents *")
    print("*********************************")
    print("")
    server_status = {}
    for project in Projects:
        server_string = ""
        if len(project['Windows']) > 0:
            if args.WindowsUser != "":
                windows_password = mfcommon.GetWindowsPassword()
            for server in project['Windows']:
                server_string = server_string + server['server_fqdn'] + ','
            server_string = server_string[:-1]

            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)
                p = subprocess.Popen(["powershell.exe",
                        ".\\1-Install-Windows.ps1", "No", project['InstallToken'], server_string, args.WindowsUser, windows_password],
                        stdout=sys.stdout)
            else:
                p = subprocess.Popen(["powershell.exe",
                        ".\\1-Install-Windows.ps1", "No", project['InstallToken'], server_string],
                        stdout=sys.stdout)
            p.communicate()
        if len(project['Linux']) > 0:
            for server in project['Linux']:
                status = linuxpkg.install_cloud_endure(server['server_fqdn'], user_name,
                                                     pass_key,
                                              has_key.lower() in 'y', project['InstallToken'])
                server_status.update({server['server_fqdn']: status})
        print("")

    print("")
    print("********************************")
    print("*Checking Agent install results*")
    print("********************************")
    print("")

    time.sleep(5)
    AgentCheck(Projects,token, UserHOST)