def install_nexus()

in infrastructure-provisioning/scripts/deploy_repository/deploy_repository.py [0:0]


def install_nexus():
    try:
        if not exists(conn,'/home/{}/.ensure_dir/nexus_ensured'.format(configuration['conf_os_user'])):
            if args.efs_enabled == 'False':
                mounting_disks()
            else:
                mount_efs()
            conn.sudo('apt-get install -y maven nmap python-pip')
            conn.sudo('pip2 install -UI pip')
            conn.sudo('pip2 install -U fabric==1.14.0')
            conn.sudo('mkdir -p /opt/nexus')
            conn.sudo('wget https://sonatype-download.global.ssl.fastly.net/nexus/{0}/nexus-{1}-unix.tar.gz -O \
                  /opt/nexus-{1}-unix.tar.gz'.format(
                  nexus_version.split('.')[0], nexus_version))
            conn.sudo('tar -zhxvf /opt/nexus-{}-unix.tar.gz -C /opt/'.format(
                  nexus_version))
            conn.sudo('mv /opt/nexus-{}/* /opt/nexus/'.format(nexus_version))
            conn.sudo('mv /opt/nexus-{}/.[!.]* /opt/nexus/'.format(
                  nexus_version))
            conn.sudo('rm -rf /opt/nexus-{}'.format(nexus_version))
            conn.sudo('useradd nexus')
            conn.sudo('echo \"run_as_user="nexus"\" > /opt/nexus/bin/nexus.rc')
            create_keystore()
            conn.put('templates/jetty-https.xml', '/tmp/jetty-https.xml')
            conn.sudo('sed -i "s/KEYSTORE_PASSWORD/{}/g" /tmp/jetty-https.xml'.format(keystore_pass))
            conn.sudo('cp -f /tmp/jetty-https.xml /opt/nexus/etc/jetty/')
            conn.put('templates/nexus.service', '/tmp/nexus.service')
            if args.efs_enabled == 'False':
                conn.sudo('sed -i "s|EFS_SERVICE||g" /tmp/nexus.service')
            else:
                conn.sudo('sed -i "s|EFS_SERVICE|mount-efs-sequentially.service|g" /tmp/nexus.service')
            conn.sudo('cp /tmp/nexus.service /etc/systemd/system/')
            conn.put('files/nexus.properties', '/tmp/nexus.properties')
            conn.sudo('mkdir -p /opt/sonatype-work/nexus3/etc')
            conn.sudo('cp -f /tmp/nexus.properties /opt/sonatype-work/nexus3/etc/nexus.properties')
            conn.sudo('chown -R nexus:nexus /opt/nexus /opt/sonatype-work')
            conn.sudo('systemctl daemon-reload')
            conn.sudo('systemctl start nexus')
            nexus_service_waiter()
            conn.sudo('systemctl enable nexus')
            conn.put('templates/configureNexus.groovy', '/tmp/configureNexus.groovy')
            conn.sudo('sed -i "s/REGION/{}/g" /tmp/configureNexus.groovy'.format(args.region))
            conn.sudo('sed -i "s/ADMIN_PASSWORD/{}/g" /tmp/configureNexus.groovy'.format(args.nexus_admin_password))
            conn.sudo('sed -i "s/SERVICE_USER_NAME/{}/g" /tmp/configureNexus.groovy'.format(args.nexus_service_user_name))
            conn.sudo('sed -i "s/SERVICE_USER_PASSWORD/{}/g" /tmp/configureNexus.groovy'.format(
                args.nexus_service_user_password))
            conn.sudo('wget http://repo.{}.amazonaws.com/2017.09/main/mirror.list -O /tmp/main_mirror.list'.format(
                args.region))
            conn.sudo('wget http://repo.{}.amazonaws.com/2017.09/updates/mirror.list -O /tmp/updates_mirror.list'.format(
                args.region))
            amazon_main_repo = conn.sudo("cat /tmp/main_mirror.list  | grep {} | sed 's/$basearch//g'".format(args.region)).stdout
            amazon_updates_repo = conn.sudo("cat /tmp/updates_mirror.list  | grep {} | sed 's/$basearch//g'".format(
                args.region)).stdout
            conn.sudo('sed -i "s|AMAZON_MAIN_URL|{}|g" /tmp/configureNexus.groovy'.format(amazon_main_repo))
            conn.sudo('sed -i "s|AMAZON_UPDATES_URL|{}|g" /tmp/configureNexus.groovy'.format(amazon_updates_repo))
            conn.sudo('rm -f /tmp/main_mirror.list')
            conn.sudo('rm -f /tmp/updates_mirror.list')
            conn.put('scripts/addUpdateScript.groovy', '/tmp/addUpdateScript.groovy')
            script_executed = False
            while not script_executed:
                try:
                    conn.sudo('/usr/local/groovy/latest/bin/groovy /tmp/addUpdateScript.groovy -u "admin" -p "admin123" \
                          -n "configureNexus" -f "/tmp/configureNexus.groovy" -h "http://localhost:8081"')
                    script_executed = True
                except:
                    time.sleep(10)
                    pass
            conn.sudo('curl -u admin:admin123 -X POST --header \'Content-Type: text/plain\' \
                   http://localhost:8081/service/rest/v1/script/configureNexus/run')
            conn.sudo('systemctl stop nexus')
            conn.sudo('git clone https://github.com/sonatype-nexus-community/nexus-repository-apt')
            conn.sudo('''bash -c 'cd nexus-repository-apt && mvn' ''')
            apt_plugin_version = conn.sudo('find nexus-repository-apt/ -name "nexus-repository-apt-*.jar" '
                                      '-printf "%f\\n" | grep -v "sources"').stdout.replace('nexus-repository-apt-',
                                                                                     '').replace('.jar', '')
            compress_plugin_version = conn.sudo('find /opt/nexus/ -name "commons-compress-*.jar" '
                                           '-printf "%f\\n" ').stdout.replace('commons-compress-', '').replace('.jar', '')
            xz_plugin_version = conn.sudo('find /opt/nexus/ -name "xz-*.jar" '
                                     '-printf "%f\\n" ').stdout.replace('xz-', '').replace('.jar', '')
            conn.sudo('mkdir -p /opt/nexus/system/net/staticsnow/nexus-repository-apt/{0}/'.format(apt_plugin_version))
            apt_plugin_jar_path = conn.sudo('find nexus-repository-apt/ -name "nexus-repository-apt-{0}.jar"'.format(
                apt_plugin_version)).stdout
            conn.sudo('cp -f {0} /opt/nexus/system/net/staticsnow/nexus-repository-apt/{1}/'.format(
                apt_plugin_jar_path, apt_plugin_version
            ))
            conn.sudo('sed -i "$ d" /opt/nexus/system/org/sonatype/nexus/assemblies/nexus-core-feature/{0}/'
                 'nexus-core-feature-{0}-features.xml'.format(nexus_version))
            conn.sudo('''echo '<feature name="nexus-repository-apt" description="net.staticsnow:nexus-repository-apt" '''
                 '''version="{1}">' >> /opt/nexus/system/org/sonatype/nexus/assemblies/nexus-core-feature/{0}/'''
                 '''nexus-core-feature-{0}-features.xml'''.format(nexus_version, apt_plugin_version))
            conn.sudo('''echo '<details>net.staticsnow:nexus-repository-apt</details>' >> '''
                 '''/opt/nexus/system/org/sonatype/nexus/assemblies/nexus-core-feature/{0}/'''
                 '''nexus-core-feature-{0}-features.xml'''.format(nexus_version))
            conn.sudo('''echo '<bundle>mvn:net.staticsnow/nexus-repository-apt/{1}</bundle>' >> '''
                 '''/opt/nexus/system/org/sonatype/nexus/assemblies/nexus-core-feature/{0}/'''
                 '''nexus-core-feature-{0}-features.xml'''.format(nexus_version, apt_plugin_version))
            conn.sudo('''echo '<bundle>mvn:org.apache.commons/commons-compress/{1}</bundle>' >> '''
                 '''/opt/nexus/system/org/sonatype/nexus/assemblies/nexus-core-feature/{0}/'''
                 '''nexus-core-feature-{0}-features.xml'''.format(nexus_version, compress_plugin_version))
            conn.sudo('''echo '<bundle>mvn:org.tukaani/xz/{1}</bundle>' >> '''
                 '''/opt/nexus/system/org/sonatype/nexus/assemblies/nexus-core-feature/{0}/'''
                 '''nexus-core-feature-{0}-features.xml'''.format(nexus_version, xz_plugin_version))
            conn.sudo('''echo '</feature>' >> '''
                 '''/opt/nexus/system/org/sonatype/nexus/assemblies/nexus-core-feature/{0}/'''
                 '''nexus-core-feature-{0}-features.xml'''.format(nexus_version))
            conn.sudo('''echo '</features>' >> '''
                 '''/opt/nexus/system/org/sonatype/nexus/assemblies/nexus-core-feature/{0}/'''
                 '''nexus-core-feature-{0}-features.xml'''.format(nexus_version))
            conn.sudo('''sed -i 's|<feature prerequisite=\"true\" dependency=\"false\">wrap</feature>|'''
                 '''<feature prerequisite=\"true\" dependency=\"false\">wrap</feature>\\n'''
                 '''<feature prerequisite=\"false\" dependency=\"false\">nexus-repository-apt</feature>|g' '''
                 '''/opt/nexus/system/org/sonatype/nexus/assemblies/nexus-core-feature/{0}/nexus-core-feature-'''
                 '''{0}-features.xml'''.format(nexus_version))
            conn.sudo('git clone https://github.com/sonatype-nexus-community/nexus-repository-r.git')
            conn.sudo('''bash -c 'cd nexus-repository-r && mvn clean install' ''')
            r_plugin_version = conn.sudo('find nexus-repository-r/ -name "nexus-repository-r-*.jar" '
                                    '-printf "%f\\n" | grep -v "sources"').stdout.replace('nexus-repository-r-', '').replace(
                '.jar', '')
            conn.sudo('mkdir -p /opt/nexus/system/org/sonatype/nexus/plugins/nexus-repository-r/{}/'.format(
                r_plugin_version))
            r_plugin_jar_path = conn.sudo('find nexus-repository-r/ -name "nexus-repository-r-{0}.jar"'.format(
                r_plugin_version)).stdout
            conn.sudo('cp -f {0} /opt/nexus/system/org/sonatype/nexus/plugins/nexus-repository-r/{1}/'.format(
                r_plugin_jar_path, r_plugin_version
            ))
            conn.sudo('sed -i "$ d" /opt/nexus/system/com/sonatype/nexus/assemblies/nexus-oss-feature/{0}/'
                 'nexus-oss-feature-{0}-features.xml'.format(nexus_version))
            conn.sudo('''echo '<feature name="nexus-repository-r" description="org.sonatype.nexus.plugins:'''
                 '''nexus-repository-r" version="{1}">' >> /opt/nexus/system/com/sonatype/nexus/assemblies/'''
                 '''nexus-oss-feature/{0}/nexus-oss-feature-{0}-features.xml'''.format(nexus_version, r_plugin_version))
            conn.sudo('''echo '<details>org.sonatype.nexus.plugins:nexus-repository-r</details>' >> '''
                 '''/opt/nexus/system/com/sonatype/nexus/assemblies/nexus-oss-feature/{0}/'''
                 '''nexus-oss-feature-{0}-features.xml'''.format(nexus_version))
            conn.sudo('''echo '<bundle>mvn:org.sonatype.nexus.plugins/nexus-repository-r/{1}</bundle>' >> '''
                 '''/opt/nexus/system/com/sonatype/nexus/assemblies/nexus-oss-feature/{0}/'''
                 '''nexus-oss-feature-{0}-features.xml'''.format(nexus_version, r_plugin_version))
            conn.sudo('''echo '</feature>' >> '''
                 '''/opt/nexus/system/com/sonatype/nexus/assemblies/nexus-oss-feature/{0}/'''
                 '''nexus-oss-feature-{0}-features.xml'''.format(nexus_version))
            conn.sudo('''echo '</features>' >> '''
                 '''/opt/nexus/system/com/sonatype/nexus/assemblies/nexus-oss-feature/{0}/'''
                 '''nexus-oss-feature-{0}-features.xml'''.format(nexus_version))
            conn.sudo('''sed -i 's|<feature prerequisite=\"true\" dependency=\"false\">wrap</feature>|'''
                 '''<feature prerequisite=\"true\" dependency=\"false\">wrap</feature>\\n'''
                 '''<feature version=\"{1}\" prerequisite=\"false\" dependency=\"false\">'''
                 '''nexus-repository-r</feature>|g' '''
                 '''/opt/nexus/system/com/sonatype/nexus/assemblies/nexus-oss-feature/{0}/'''
                 '''nexus-oss-feature-{0}-features.xml'''.format(nexus_version, r_plugin_version))
            conn.sudo('chown -R nexus:nexus /opt/nexus')
            conn.sudo('systemctl start nexus')
            nexus_service_waiter()
            conn.put('templates/addCustomRepository.groovy', '/tmp/addCustomRepository.groovy')
            conn.sudo('sed -i "s|REGION|{0}|g" /tmp/addCustomRepository.groovy'.format(args.region))
            script_executed = False
            while not script_executed:
                try:
                    conn.sudo('/usr/local/groovy/latest/bin/groovy /tmp/addUpdateScript.groovy -u "admin" -p "{}" '
                         '-n "addCustomRepository" -f "/tmp/addCustomRepository.groovy" -h '
                         '"http://localhost:8081"'.format(args.nexus_admin_password))
                    script_executed = True
                except:
                    time.sleep(10)
                    pass
            conn.sudo('curl -u admin:{} -X POST --header \'Content-Type: text/plain\' '
                 'http://localhost:8081/service/rest/v1/script/addCustomRepository/run'.format(
                  args.nexus_admin_password))
            conn.sudo('echo "admin:{}" > /opt/nexus/credentials'.format(args.nexus_admin_password))
            conn.sudo('echo "{0}:{1}" >> /opt/nexus/credentials'.format(args.nexus_service_user_name,
                                                                   args.nexus_service_user_password))
            conn.put('templates/updateRepositories.groovy', '/tmp/updateRepositories.groovy')
            conn.sudo('cp /tmp/updateRepositories.groovy /opt/nexus/updateRepositories.groovy')
            conn.put('scripts/update_amazon_repositories.py', '/tmp/update_amazon_repositories.py')
            conn.sudo('cp /tmp/update_amazon_repositories.py /opt/nexus/update_amazon_repositories.py')
            conn.sudo('sed -i "s|NEXUS_PASSWORD|{}|g" /opt/nexus/update_amazon_repositories.py'.format(
                 args.nexus_admin_password))
            conn.sudo('touch /var/log/amazon_repo_update.log')
            conn.sudo('echo "0 0 * * * root /usr/bin/python /opt/nexus/update_amazon_repositories.py --region {} >> '
                 '/var/log/amazon_repo_update.log" >> /etc/crontab'.format(args.region))
            conn.sudo('touch /home/{}/.ensure_dir/nexus_ensured'.format(configuration['conf_os_user']))
    except Exception as err:
        traceback.print_exc(file=sys.stdout)
        print('Error with installing Nexus: {}'.format(str(err)))
        raise Exception