Guest User

Untitled

a guest
Oct 27th, 2018
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.56 KB | None | 0 0
  1. import groovyx.net.http.HTTPBuilder
  2. import net.sf.json.groovy.JsonSlurper
  3. import java.text.SimpleDateFormat
  4. import static groovyx.net.http.Method.DELETE
  5. import static groovyx.net.http.Method.GET
  6. import static groovyx.net.http.Method.PUT
  7. import static groovyx.net.http.ContentType.*
  8. import groovy.json.JsonParserType
  9. import groovy.json.JsonSlurper
  10. import groovy.json.JsonOutput
  11. import groovy.json.JsonBuilder
  12. import net.sf.json.JSONObject
  13. import org.apache.logging.log4j.Level
  14. import org.apache.logging.log4j.LogManager
  15. import org.apache.logging.log4j.core.LoggerContext
  16. import org.apache.logging.log4j.core.appender.FileAppender
  17. import org.apache.logging.log4j.core.config.Configuration
  18. import org.apache.logging.log4j.core.config.LoggerConfig
  19. import org.apache.logging.log4j.core.layout.PatternLayout
  20. import de.uplanet.scripting.groovy.util.Safely
  21.  
  22. def conn = g_dbConnections.systemConnection
  23. LOGS_DIR_PATH = 'C:\\Intrexx\\Logs'
  24. SHORT_API_URL = "https://poc1.illum.io/api/v1"
  25. SHORT_API_URL_WORKLOAD = "https://poc1.illum.io/api/v1"
  26. API_URL_WORKLOAD = "https://poc1.illum.io/api/v1/orgs/50/workloads"
  27. API_URL = "https://poc1.illum.io/api/v1/orgs/50/"
  28. USERNAME = "api_1c52708b766948190"
  29. PASSWORD = "b426d940186570b1573c0a2adcd8eab01a929f8d6745606baa51e6a4bdff1d1b"
  30. LABELS_RESOURCE = "labels"
  31.  
  32. WORKLOADS_RESOURCE_UNMANAGED = "workloads?managed=false"
  33. WORKLOADS_RESOURCE_MANAGED = "workloads?managed=true"
  34.  
  35. AUTH_HEADER = "Basic " + ("$USERNAME:$PASSWORD".bytes.encodeBase64().toString())
  36.  
  37.  
  38. def configureLogging = { logFilePath ->
  39. String appenderName = 'IntrexxIllumioFileLogger'
  40. final LoggerContext context = LoggerContext.getContext(false)
  41. final Configuration config = context.getConfiguration()
  42.  
  43. if (config.getRootLogger().getAppenders().keySet().contains(appenderName)) {
  44. config.getAppender(appenderName).stop()
  45. config.getRootLogger().removeAppender(appenderName)
  46. }
  47.  
  48. def logLayout = PatternLayout.newBuilder().withPattern("%d %-5p [%c{1}] %m%n").build()
  49. def fileAppenderBuilder = FileAppender.newBuilder()
  50. fileAppenderBuilder.withName(appenderName)
  51. fileAppenderBuilder.withFileName(logFilePath)
  52. fileAppenderBuilder.withLayout(logLayout)
  53. fileAppenderBuilder.withAppend(true)
  54.  
  55. def appender = fileAppenderBuilder.build()
  56. appender.start()
  57.  
  58. config.addAppender(appender)
  59.  
  60. for (final LoggerConfig loggerConfig : config.getLoggers().values()) {
  61. loggerConfig.addAppender(appender, null, null)
  62. }
  63. config.getRootLogger().setLevel(Level.INFO)
  64. config.getRootLogger().addAppender(appender, Level.INFO, null)
  65.  
  66. def logger = LogManager.getLogger("illumio")
  67. logger.info("logging initialized for logfile $logFilePath")
  68. return [logger, appender]
  69. }
  70.  
  71.  
  72. // read results from db
  73. def readDb(logger, String tableName, String columnName1, String columnName2){
  74. def mapWorkloadsLabels=[:]
  75. def resultList = new ArrayList<>()
  76. def conn = g_dbConnections.systemConnection
  77. def stmt = null
  78. def rs = null
  79. try {
  80. stmt = conn.prepareStatement("""SELECT * FROM $tableName """)
  81.  
  82. rs = stmt.executeQuery()
  83. while (rs.next()) {
  84. logger.info("ID is "+rs.getInt("LID"))
  85. def labelsList = []
  86. resultList.add(rs.getString("$columnName1"))
  87.  
  88. if(rs.getString("STR_LABELROLE")!=null){
  89. labelsList.add((rs.getString("STR_LABELROLE")).trim().replace("=",":").replace("{","[").replace("}","]"))
  90. logger.info("label role " + rs.getString("STR_LABELROLE"))
  91. logger.info("encoding " + rs.getString("STR_LABELENV").getClass())
  92. }
  93. if(rs.getString("STR_LABELAPP")!=null){
  94. labelsList.add((rs.getString("STR_LABELAPP")).trim().replace("=",":").replace("{","[").replace("}","]"))
  95. logger.info("label app " + rs.getString("STR_LABELAPP"))
  96. logger.info("encoding " + rs.getString("STR_LABELAPP").getClass())
  97. }
  98. if(rs.getString("STR_LABELENV")!=null){
  99. labelsList.add((rs.getString("STR_LABELENV")).trim().replace("=",":").replace("{","[").replace("}","]"))
  100. logger.info("label env " + rs.getString("STR_LABELENV"))
  101. logger.info("encoding " + rs.getString("STR_LABELENV").getClass())
  102. }
  103. if(rs.getString("STR_LABELLOC")!=null){
  104. labelsList.add((rs.getString("STR_LABELLOC")).trim().replace("=",":").replace("{","[").replace("}","]"))
  105. logger.info("label loc " + rs.getString("STR_LABELLOC"))
  106. logger.info("encoding " + rs.getString("STR_LABELLOC").getClass())
  107. }
  108.  
  109. mapWorkloadsLabels.put(rs.getString("$columnName1"),labelsList)
  110.  
  111. }
  112. }finally {
  113. rs = Safely.close(rs)
  114. stmt = Safely.close(stmt)
  115. }
  116.  
  117. return mapWorkloadsLabels;
  118. }//end read db
  119.  
  120.  
  121. def makeGetRequest = { logger,url, errorMessage, resultProcessor ->
  122. def httpBuilder = new HTTPBuilder(url)
  123. httpBuilder.request(GET, ANY) { req ->
  124.  
  125. headers.'Content-Type' = 'application/x-www-form-urlencoded'
  126. headers.'Authorization' = AUTH_HEADER
  127.  
  128. response.failure = { resp, json ->
  129. logger.error(errorMessage)
  130. }
  131. response.success = resultProcessor
  132. }
  133. }
  134. def makePutRequest = {logger, url, errorMessage, successMessage, labelsList->
  135. def httpBuilder = new HTTPBuilder(url)
  136. logger.info("url is "+url)
  137. httpBuilder.request(PUT, JSON) {
  138. body = [labels : labelsList ]
  139.  
  140. headers.'Content-Type' = 'application/json'
  141. headers.'Authorization' = AUTH_HEADER
  142.  
  143. response.success = { resp ->
  144. logger.info("success message" +successMessage)
  145. }
  146.  
  147. response.failure = { resp, json ->
  148. logger.error(errorMessage)
  149. logger.error(json.toString())
  150. }
  151. }
  152. }
  153.  
  154.  
  155. //logging
  156. String processName = 'Illumio process - update workloads from CMDB'
  157. String timeStamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())
  158. def logFilePath = "$LOGS_DIR_PATH${File.separator}${processName + ' LogFile ' + timeStamp}.txt"
  159. def (logger, appender) = configureLogging(logFilePath)
  160.  
  161.  
  162. def workloadsLabelsMap = [:]
  163. def workloadsMap = [:]
  164. //get request to check if is updated
  165. makeGetRequest.call(logger,"$API_URL_WORKLOAD", "Cannot get workloads with labels"){ resp, json ->
  166. json.each { workload ->
  167. workloadsLabelsMap.put(workload.hostname,workload.labels)
  168. workloadsMap.put(workload.hostname,workload.href)
  169. }
  170. }
  171. logger.info("in get api workloads labels map " + workloadsLabelsMap)
  172. logger.info("in get api workloads map " + workloadsMap)
  173.  
  174. //read
  175. def mapWorkloadsLabels= readDb(logger, "XDATAGROUPC4DED0101", "STR_HOSTNAME","xdatagroupc4ded0101.b_selected")
  176.  
  177. logger.info("workloads map from db with labels is " + mapWorkloadsLabels)
  178. logger.info("list size is " + mapWorkloadsLabels.size())
  179.  
  180. mapWorkloadsLabels.each{ k, v ->
  181.  
  182. logger.info( "${k}:${v}")
  183. String key = "${k}"
  184.  
  185. String hrefForWorkload = workloadsMap.get(key)
  186. logger.info("href for workload "+hrefForWorkload)
  187. logger.info("list of labels is from db for workload "+k+" is "+ v)
  188. for(int i=0;i <v.size(); i++){
  189. logger.info("encoding for element from api is "+v.get(i).getClass())
  190. }
  191. logger.info(" list from db for encoding is "+ v.getClass())
  192. logger.info("list of labels from api for workload "+ k + " is " +workloadsLabelsMap.get(key))
  193. logger.info("url is " + "$SHORT_API_URL_WORKLOAD"+"$hrefForWorkload")
  194.  
  195. if(hrefForWorkload!=null && v!=null && v.size()>0 && !v.contains(null)){
  196. makePutRequest.call(logger,"$SHORT_API_URL_WORKLOAD"+"$hrefForWorkload" , "Cannot update workloads with labels","succesful update labels",v)
  197.  
  198. }
  199. }
  200. def workLoadHref = "/orgs/50/workloads/7260b26b-cb72-462f-aa16-ef8f89e71396"//ubuntu1
  201. logger.info("workload with href will be updated at labels " + workLoadHref)
  202. def listForWorkload = workloadsLabelsMap.get("ubuntu2")
  203. logger.info(" list from api for ubuntu 2 is "+ listForWorkload)
  204. logger.info("variable api encoding "+ listForWorkload.getClass())
  205. //makePutRequest.call(logger,"$SHORT_API_URL_WORKLOAD"+"$workLoadHref","Cannot update workloads with labels","succesful update labels", listForWorkload)
  206.  
  207. //get request to check if is updated
  208. makeGetRequest.call(logger,"$API_URL_WORKLOAD", "Cannot get workloads with labels"){ resp, json ->
  209. json.each { workload ->
  210. workloadsLabelsMap.put(workload.hostname,workload.labels)
  211. workloadsMap.put(workload.hostname,workload.href)
  212. }
  213. }
  214. logger.info("in get workloads labels map after put " + workloadsLabelsMap)
  215. logger.info("in get workloads map after put " + workloadsMap)
  216.  
  217.  
  218. appender.stop()
Add Comment
Please, Sign In to add comment