Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import groovyx.net.http.HTTPBuilder
- import net.sf.json.groovy.JsonSlurper
- import java.text.SimpleDateFormat
- import static groovyx.net.http.Method.DELETE
- import static groovyx.net.http.Method.GET
- import static groovyx.net.http.Method.PUT
- import static groovyx.net.http.ContentType.*
- import groovy.json.JsonParserType
- import groovy.json.JsonSlurper
- import groovy.json.JsonOutput
- import groovy.json.JsonBuilder
- import net.sf.json.JSONObject
- import org.apache.logging.log4j.Level
- import org.apache.logging.log4j.LogManager
- import org.apache.logging.log4j.core.LoggerContext
- import org.apache.logging.log4j.core.appender.FileAppender
- import org.apache.logging.log4j.core.config.Configuration
- import org.apache.logging.log4j.core.config.LoggerConfig
- import org.apache.logging.log4j.core.layout.PatternLayout
- import de.uplanet.scripting.groovy.util.Safely
- def conn = g_dbConnections.systemConnection
- LOGS_DIR_PATH = 'C:\\Intrexx\\Logs'
- SHORT_API_URL = "https://poc1.illum.io/api/v1"
- SHORT_API_URL_WORKLOAD = "https://poc1.illum.io/api/v1"
- API_URL_WORKLOAD = "https://poc1.illum.io/api/v1/orgs/50/workloads"
- API_URL = "https://poc1.illum.io/api/v1/orgs/50/"
- USERNAME = "api_1c52708b766948190"
- PASSWORD = "b426d940186570b1573c0a2adcd8eab01a929f8d6745606baa51e6a4bdff1d1b"
- LABELS_RESOURCE = "labels"
- WORKLOADS_RESOURCE_UNMANAGED = "workloads?managed=false"
- WORKLOADS_RESOURCE_MANAGED = "workloads?managed=true"
- AUTH_HEADER = "Basic " + ("$USERNAME:$PASSWORD".bytes.encodeBase64().toString())
- def configureLogging = { logFilePath ->
- String appenderName = 'IntrexxIllumioFileLogger'
- final LoggerContext context = LoggerContext.getContext(false)
- final Configuration config = context.getConfiguration()
- if (config.getRootLogger().getAppenders().keySet().contains(appenderName)) {
- config.getAppender(appenderName).stop()
- config.getRootLogger().removeAppender(appenderName)
- }
- def logLayout = PatternLayout.newBuilder().withPattern("%d %-5p [%c{1}] %m%n").build()
- def fileAppenderBuilder = FileAppender.newBuilder()
- fileAppenderBuilder.withName(appenderName)
- fileAppenderBuilder.withFileName(logFilePath)
- fileAppenderBuilder.withLayout(logLayout)
- fileAppenderBuilder.withAppend(true)
- def appender = fileAppenderBuilder.build()
- appender.start()
- config.addAppender(appender)
- for (final LoggerConfig loggerConfig : config.getLoggers().values()) {
- loggerConfig.addAppender(appender, null, null)
- }
- config.getRootLogger().setLevel(Level.INFO)
- config.getRootLogger().addAppender(appender, Level.INFO, null)
- def logger = LogManager.getLogger("illumio")
- logger.info("logging initialized for logfile $logFilePath")
- return [logger, appender]
- }
- // read results from db
- def readDb(logger, String tableName, String columnName1, String columnName2){
- def mapWorkloadsLabels=[:]
- def resultList = new ArrayList<>()
- def conn = g_dbConnections.systemConnection
- def stmt = null
- def rs = null
- try {
- stmt = conn.prepareStatement("""SELECT * FROM $tableName """)
- rs = stmt.executeQuery()
- while (rs.next()) {
- logger.info("ID is "+rs.getInt("LID"))
- def labelsList = []
- resultList.add(rs.getString("$columnName1"))
- if(rs.getString("STR_LABELROLE")!=null){
- labelsList.add((rs.getString("STR_LABELROLE")).trim().replace("=",":").replace("{","[").replace("}","]"))
- logger.info("label role " + rs.getString("STR_LABELROLE"))
- logger.info("encoding " + rs.getString("STR_LABELENV").getClass())
- }
- if(rs.getString("STR_LABELAPP")!=null){
- labelsList.add((rs.getString("STR_LABELAPP")).trim().replace("=",":").replace("{","[").replace("}","]"))
- logger.info("label app " + rs.getString("STR_LABELAPP"))
- logger.info("encoding " + rs.getString("STR_LABELAPP").getClass())
- }
- if(rs.getString("STR_LABELENV")!=null){
- labelsList.add((rs.getString("STR_LABELENV")).trim().replace("=",":").replace("{","[").replace("}","]"))
- logger.info("label env " + rs.getString("STR_LABELENV"))
- logger.info("encoding " + rs.getString("STR_LABELENV").getClass())
- }
- if(rs.getString("STR_LABELLOC")!=null){
- labelsList.add((rs.getString("STR_LABELLOC")).trim().replace("=",":").replace("{","[").replace("}","]"))
- logger.info("label loc " + rs.getString("STR_LABELLOC"))
- logger.info("encoding " + rs.getString("STR_LABELLOC").getClass())
- }
- mapWorkloadsLabels.put(rs.getString("$columnName1"),labelsList)
- }
- }finally {
- rs = Safely.close(rs)
- stmt = Safely.close(stmt)
- }
- return mapWorkloadsLabels;
- }//end read db
- def makeGetRequest = { logger,url, errorMessage, resultProcessor ->
- def httpBuilder = new HTTPBuilder(url)
- httpBuilder.request(GET, ANY) { req ->
- headers.'Content-Type' = 'application/x-www-form-urlencoded'
- headers.'Authorization' = AUTH_HEADER
- response.failure = { resp, json ->
- logger.error(errorMessage)
- }
- response.success = resultProcessor
- }
- }
- def makePutRequest = {logger, url, errorMessage, successMessage, labelsList->
- def httpBuilder = new HTTPBuilder(url)
- logger.info("url is "+url)
- httpBuilder.request(PUT, JSON) {
- body = [labels : labelsList ]
- headers.'Content-Type' = 'application/json'
- headers.'Authorization' = AUTH_HEADER
- response.success = { resp ->
- logger.info("success message" +successMessage)
- }
- response.failure = { resp, json ->
- logger.error(errorMessage)
- logger.error(json.toString())
- }
- }
- }
- //logging
- String processName = 'Illumio process - update workloads from CMDB'
- String timeStamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())
- def logFilePath = "$LOGS_DIR_PATH${File.separator}${processName + ' LogFile ' + timeStamp}.txt"
- def (logger, appender) = configureLogging(logFilePath)
- def workloadsLabelsMap = [:]
- def workloadsMap = [:]
- //get request to check if is updated
- makeGetRequest.call(logger,"$API_URL_WORKLOAD", "Cannot get workloads with labels"){ resp, json ->
- json.each { workload ->
- workloadsLabelsMap.put(workload.hostname,workload.labels)
- workloadsMap.put(workload.hostname,workload.href)
- }
- }
- logger.info("in get api workloads labels map " + workloadsLabelsMap)
- logger.info("in get api workloads map " + workloadsMap)
- //read
- def mapWorkloadsLabels= readDb(logger, "XDATAGROUPC4DED0101", "STR_HOSTNAME","xdatagroupc4ded0101.b_selected")
- logger.info("workloads map from db with labels is " + mapWorkloadsLabels)
- logger.info("list size is " + mapWorkloadsLabels.size())
- mapWorkloadsLabels.each{ k, v ->
- logger.info( "${k}:${v}")
- String key = "${k}"
- String hrefForWorkload = workloadsMap.get(key)
- logger.info("href for workload "+hrefForWorkload)
- logger.info("list of labels is from db for workload "+k+" is "+ v)
- for(int i=0;i <v.size(); i++){
- logger.info("encoding for element from api is "+v.get(i).getClass())
- }
- logger.info(" list from db for encoding is "+ v.getClass())
- logger.info("list of labels from api for workload "+ k + " is " +workloadsLabelsMap.get(key))
- logger.info("url is " + "$SHORT_API_URL_WORKLOAD"+"$hrefForWorkload")
- if(hrefForWorkload!=null && v!=null && v.size()>0 && !v.contains(null)){
- makePutRequest.call(logger,"$SHORT_API_URL_WORKLOAD"+"$hrefForWorkload" , "Cannot update workloads with labels","succesful update labels",v)
- }
- }
- def workLoadHref = "/orgs/50/workloads/7260b26b-cb72-462f-aa16-ef8f89e71396"//ubuntu1
- logger.info("workload with href will be updated at labels " + workLoadHref)
- def listForWorkload = workloadsLabelsMap.get("ubuntu2")
- logger.info(" list from api for ubuntu 2 is "+ listForWorkload)
- logger.info("variable api encoding "+ listForWorkload.getClass())
- //makePutRequest.call(logger,"$SHORT_API_URL_WORKLOAD"+"$workLoadHref","Cannot update workloads with labels","succesful update labels", listForWorkload)
- //get request to check if is updated
- makeGetRequest.call(logger,"$API_URL_WORKLOAD", "Cannot get workloads with labels"){ resp, json ->
- json.each { workload ->
- workloadsLabelsMap.put(workload.hostname,workload.labels)
- workloadsMap.put(workload.hostname,workload.href)
- }
- }
- logger.info("in get workloads labels map after put " + workloadsLabelsMap)
- logger.info("in get workloads map after put " + workloadsMap)
- appender.stop()
Add Comment
Please, Sign In to add comment