Script Groovy

Si les mots de passe contiennent des caractères spéciaux, reportez-vous à la section Gestion des caractères spéciaux. Veillez également à remplacer ces valeurs de paramètre en fonction de vos environnements :

Table 3-13 Paramètres à modifier

Paramètre  Description
user Nom d'utilisateur d'un administrateur de service.
password Mot de passe de l'administrateur de service, ou nom et emplacement du fichier de mots de passe cryptés.
url URL de l'environnement dans lequel vous souhaitez définir la cadence de mise à jour non mensuelle.
updatemonths Liste des mois, séparés par des virgules, au cours desquels des mises à jour Oracle Enterprise Performance Management Cloud doivent être appliquées à l'environnement identifié à l'aide du paramètre url. Par exemple, updatemonths=02,05,08,11.

Les mois doivent être indiqués avec deux chiffres : de 01 pour janvier à 12 pour décembre. Veillez à inclure un zéro pour les numéros des mois de janvier à septembre. Le script tente d'exécuter la commande skipUpdate pour les mois non inclus dans la valeur du paramètre updatemonths. Par exemple, si vous indiquez updatemonths=02,05,08,11, le script tente de définir des indicateurs de non-prise en compte de mise à jour pour janvier, mars, avril, juin, juillet, septembre, octobre et décembre, afin que les mises à jour ne soient appliquées qu'en février, mai, août et novembre.

import java.text.SimpleDateFormat

String user = 'service_administrator'
String password = 'examplePWD'
String url = 'example_EPM_URL'
String updatemonths = '02,05,08,11'

def currentdate = new Date()
def yf = new SimpleDateFormat("yy")
def mf = new SimpleDateFormat("MM")
String[] monthsarr = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]
List<String> monthsarrfromcurrent = new ArrayList<>()
List<String> yearsarrfromcurrent = new ArrayList<>()
String currentyear = yf.format(currentdate)
String nextyear = (currentyear.toInteger() + 1).toString()
String currentmonth = mf.format(currentdate)

String[] updateMonthsStringArr = updatemonths.split(',');
def updatemonthsarr = new int[updateMonthsStringArr.length];
for(int i = 0; i < updateMonthsStringArr.length; i++)
{
    updatemonthsarr[i] = Integer.parseInt(updateMonthsStringArr[i]);
}

def LogMessage(String message) {
    def date = new Date()
    def sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss")
    println('[' + sdf.format(date) + '][GROOVY] ' + message);
}

def LogOperationStatus(EpmAutomateStatus opstatus) {
    def returncode = opstatus.getStatus()
    if (returncode != 0){
        LogMessage(opstatus.getOutput())
    }
    LogMessage('return code: ' + returncode)
}

int CompareUpdateMonths(int thismonth, int nextmonth) {
    int nextmonthorig = nextmonth

    if (nextmonth < thismonth) {
        nextmonth = nextmonth + 12
    }

    int monthdiff = nextmonth - thismonth

    if (monthdiff > 3) {
        LogMessage('There are more than 2 months skipped from month ' + thismonth + ' to month ' + nextmonthorig + '. Please correct updatemonths so that there are not more than two months skipped between each update month. Exiting.')
        return 1
    }
    
    return 0
}

int ValidateUpdateMonths(int[] updatemonthsarr) {
    for(int i = 0; i < updatemonthsarr.length; i++)
    {
        int nextint = i + 1
        String nextupdatemonth = ""
        int nextupdatemonthint = 0
        String thisupdatemonth = updatemonthsarr[i]
        int thisupdatemonthint = thisupdatemonth.toInteger()
        
        if (nextint < updatemonthsarr.length) {
            nextupdatemonth = updatemonthsarr[nextint]
        } else {
            nextupdatemonth = updatemonthsarr[0]
        }
        
        nextupdatemonthint = nextupdatemonth.toInteger()
        
        int returncode = CompareUpdateMonths(thisupdatemonthint, nextupdatemonthint)
        if (returncode > 0) {
            return 1
        }
    }
    return 0
}

def SkipUpdateAdd(EpmAutomate automate, String yearnumber, String monthnumber) {
    String yeardotmonth = yearnumber + '.' + monthnumber
    LogMessage('Running: epmautomate skipUpdate add version=' + yeardotmonth + ' comment=\"adding skipUpdate\"')
    EpmAutomateStatus status = automate.execute('skipupdate','add','version=' + yeardotmonth,'comment=\"adding skipUpdate\"')
    LogOperationStatus(status)
}

LogMessage('Starting skip update processing')
EpmAutomate automate = getEpmAutomate()

// validate update months
int returncode = ValidateUpdateMonths(updatemonthsarr)
if (returncode != 0) {
    return 1
}

// populate arrays
int startposition = 0
for(int i = 0; i < monthsarr.length; i++)
{
    if (currentmonth == monthsarr[i]) {
        startposition = i
        break
    }
}
    
for(int i = 0; i < monthsarr.length; i++)
{
    if (i >= startposition) {
        monthsarrfromcurrent.add(monthsarr[i])
        yearsarrfromcurrent.add(currentyear)
    }
}

for(int i = 0; i < monthsarr.length; i++)
{
    if (i <= startposition) {
        monthsarrfromcurrent.add(monthsarr[i])
        yearsarrfromcurrent.add(nextyear)
    }
}

// process skip updates
LogMessage("Operation: encrypt " + password + " oracleKey password.epw")
EpmAutomateStatus status = automate.execute('encrypt',password,"oracleKey","password.epw")
LogOperationStatus(status)

LogMessage("Operation: login " + user + " password.epw " + url)
status = automate.execute('login',user,"password.epw",url)
LogOperationStatus(status)

LogMessage('Running: epmautomate skipUpdate remove')
status = automate.execute('skipupdate','remove')
LogOperationStatus(status)

int addcount = 0

for (int i = 0; i < monthsarrfromcurrent.size(); i++) {
    int match = 1
    
    if (addcount == 2){
        LogMessage('Two skip update add calls have been made. No more will be attempted.')
        break
    }
    
    for(int j = 0; j < updatemonthsarr.length; j++) {
    
        if (Integer.parseInt(monthsarrfromcurrent.get(i)) == updatemonthsarr[j]) {
            match = 0
            break
        }
    }
    
    if (match == 1) {
        SkipUpdateAdd(automate, yearsarrfromcurrent.get(i), monthsarrfromcurrent.get(i))
        addcount+=1
    }
}

LogMessage('Running: epmautomate skipUpdate list')
status = automate.execute('skipupdate','list')
LogOperationStatus(status)

LogMessage('Running: epmautomate logout')
status = automate.execute('logout')
LogOperationStatus(status)

LogMessage('Skip update processing completed')