Groovy Script
If passwords contain special characters, see Handling Special Characters. Also, be sure to replace these parameter values to suit your environments:
Table 3-14 Parameters to Change
Parameter | Description |
---|---|
user | User name of a Service Administrator. |
password | Password of the Service Administrator or the name and location of the encrypted password file. |
url | URL of the environment on which you want to set the non-monthly update cadence. |
updatemonths | A comma separated list of months when Oracle Enterprise Performance Management Cloud updates should be applied to the environment identified by the url parameter. For example, updatemonths=02,05,08,11 .
Months must be specified as two digits: 01 for January through 12 for December. Be sure to include a preceding zero for January through September. The script attempts to run the skipUpdatecommand for the months not included in the |
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')