|
(→Select Agents from Multi-Select Property)
|
(→AHPSCRIPTS-30)
|
| Line 223: | |||
| } | } | ||
| };</pre> | };</pre> | ||
| + | = Determine if Agents Skipped During Deployment And Run ReDeploy on Skipped Agents = | ||
| + | *This process involves two scripts. | ||
| + | **'''Agent Filter Script''' - Determines if it is the first time a particular buildLife is being deployed to a specific environment. If it is the first deployment, the filter determines what agents are online and returns those agents for deployment. If it is a redeployment, the filter only returns those agents marked for redeployment. | ||
| + | ** '''Evaluate Script Step''' - This script determines what agents were offline (if any) and marks them for redeployment. | ||
| + | ==== AHPSCRIPTS-102 ==== | ||
| + | ''Agent Filter'': | ||
| + | <pre>import com.urbancode.anthill3.domain.agent.Agent; | ||
| + | import com.urbancode.anthill3.services.agent.AgentManager; | ||
| + | import com.urbancode.anthill3.runtime.scripting.*; | ||
| + | import com.urbancode.anthill3.runtime.scripting.helpers.*; | ||
| + | import com.urbancode.commons.util.CollectionUtil; | ||
| + | import com.urbancode.anthill3.domain.status.*; | ||
| + | import com.urbancode.anthill3.domain.agent.*; | ||
| + | import com.urbancode.anthill3.domain.buildlife.*; | ||
| + | return new Where() { | ||
| + | public Agent[] filter(Agent[] agents) { | ||
| + | agentList = new LinkedList(); | ||
| + | BuildLife bl = BuildLifeLookup.getCurrent(); | ||
| + | String environment_name = EnvironmentLookup.getCurrent().getName(); | ||
| + | String offline_agents = "offline_agents_"; | ||
| + | String isRedeploy = bl.getProperty("agents_offline"); | ||
| + | |||
| + | //Determine if we are re-deploying | ||
| + | if("true".equals(isRedeploy)){ | ||
| + | String[] agent_names = PropertyLookup.getValues("Agents_not_deployed_too"); | ||
| + | for(int x=0; x<agent_names.length; x++){ | ||
| + | Agent name = AgentFactory.getInstance().restoreForName(agent_names[x]); | ||
| + | agentList.add(name); | ||
| + | }//end for | ||
| + | } else { | ||
| + | // If we are not redeploying - return all agents | ||
| + | for (int i=0; i<agents.length; i++) { | ||
| + | status = AgentManager.getInstance().getAgentStatus(agents[i]); | ||
| + | if (status != null && status.isOnline()) { | ||
| + | agentList.add(agents[i]); | ||
| + | }//end if | ||
| + | }//end for | ||
| + | }//end else | ||
| + | |||
| + | bl.setProperty("agents_offline", "false"); | ||
| + | return (Agent[]) agentList.toArray(new Agent[agentList.size()]); | ||
| + | } | ||
| + | }</pre> | ||
| + | ''Evaluate Script Step'': | ||
| + | <pre>import com.urbancode.anthill3.runtime.scripting.helpers; | ||
| + | import com.urbancode.anthill3.domain.servergroup.*; | ||
| + | import com.urbancode.anthill3.domain.agent.*; | ||
| + | import com.urbancode.anthill3.domain.jobtrace.*; | ||
| + | import com.urbancode.devilfish.client.ServiceEndpoint; | ||
| + | import com.urbancode.anthill3.domain.buildlife.*; | ||
| + | import java.util.*; | ||
| + | org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger("script"); | ||
| + | //Get the name of the Environment | ||
| + | String environment_name = EnvironmentLookup.getCurrent().getName(); | ||
| + | //Get the ServerGroup (environment) obj. | ||
| + | ServerGroup environment = EnvironmentLookup.getCurrent(); | ||
| + | //Get an array of all the agent endpoints in an env. | ||
| + | ServiceEndpoint[] endpoints = environment.getServerArray(); | ||
| + | //turn the array into a set of agent endpoints | ||
| + | Set eps = new HashSet(); | ||
| + | for(int v = 0; v<endpoints.length; v++){ | ||
| + | String id = endpoints[v].getEndpointId(); | ||
| + | eps.add(id); | ||
| + | } | ||
| + | //Determine what jobs ran in the workflow. | ||
| + | JobTrace[] jobTrace = WorkflowLookup.getCurrentCase().getJobTraceArray(); | ||
| + | //loop through the jobTraces, and find the agent the jobs used. Then determine the agents endpoint ID. | ||
| + | for(int i = 0; i<jobTrace.length; i++){ | ||
| + | String epId = jobTrace[i].getAgent().getEndpointId(); | ||
| + | //For every agent that was used, remove its endpoint from the list of possible endpoints | ||
| + | eps.remove(epId); | ||
| + | } | ||
| + | //the Set eps now only contains agents that were not deployed too. Here we will determine the names of those agents and save it as a string | ||
| + | Iterator myIterator = eps.iterator(); //iterate over the set | ||
| + | String list_of_agents = ""; //string of agent names that were not deployed too. | ||
| + | while(myIterator.hasNext()){ | ||
| + | String ep = myIterator.next(); | ||
| + | Agent agent = AgentFactory.getInstance().restoreByEndpointId(ep); | ||
| + | String tempName = agent.getName(); | ||
| + | list_of_agents = list_of_agents.concat(tempName+", "); | ||
| + | } | ||
| + | //trim the string to remove the extra "," | ||
| + | int length = list_of_agents.length(); | ||
| + | if(length > 2){ | ||
| + | list_of_agents = list_of_agents.substring(0, length-2); | ||
| + | } | ||
| + | //set the string as a property on the build life. | ||
| + | BuildLife bl = BuildLifeLookup.getCurrent(); | ||
| + | String offline_env = "offline_agents_"+environment_name; | ||
| + | if(!eps.isEmpty()){ | ||
| + | bl.setProperty("agents_offline", "true"); | ||
| + | bl.setProperty("Agents_not_deployed_too", list_of_agents); | ||
| + | } else { | ||
| + | bl.setProperty("agents_offline", "false"); | ||
| + | bl.setProperty("Agents_not_deployed_too", null); | ||
| + | }</pre> | ||