-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #17 from alberts-tid/feature/chef-puppetNodeDelete
development for chef & puppet node delete
- Loading branch information
Showing
32 changed files
with
1,595 additions
and
219 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
67 changes: 67 additions & 0 deletions
67
core/src/main/java/com/telefonica/euro_iaas/sdc/manager/NodeManager.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
/** | ||
* Copyright 2014 Telefonica Investigación y Desarrollo, S.A.U <br> | ||
* This file is part of FI-WARE project. | ||
* <p> | ||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with | ||
* the License. | ||
* </p> | ||
* <p> | ||
* You may obtain a copy of the License at:<br> | ||
* <br> | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* </p> | ||
* <p> | ||
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on | ||
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* </p> | ||
* <p> | ||
* See the License for the specific language governing permissions and limitations under the License. | ||
* </p> | ||
* <p> | ||
* For those usages not covered by the Apache version 2.0 License please contact with opensource@tid.es | ||
* </p> | ||
*/ | ||
|
||
/** | ||
* | ||
*/ | ||
package com.telefonica.euro_iaas.sdc.manager; | ||
|
||
import com.telefonica.euro_iaas.commons.dao.EntityNotFoundException; | ||
import com.telefonica.euro_iaas.sdc.exception.ChefClientExecutionException; | ||
import com.telefonica.euro_iaas.sdc.exception.NodeExecutionException; | ||
import com.telefonica.euro_iaas.sdc.model.dto.ChefClient; | ||
|
||
/** | ||
* @author jesus.movilla | ||
*/ | ||
public interface NodeManager { | ||
|
||
/** | ||
* Delete a ChefClient in ChefServer | ||
* | ||
* @param chefClientname | ||
* the name of the chefclient to be deleted from chef server | ||
* @throws ChefClientExecutionException | ||
*/ | ||
void nodeDelete(String vdc, String nodeName) throws NodeExecutionException; | ||
|
||
/** | ||
* Load a ChefClient from ChefServer | ||
* | ||
* @param chefClientname | ||
* the name of the chefclient to be deleted from chef server | ||
* @throws ChefClientExecutionException | ||
* @throws EntityNotFoundException | ||
*/ | ||
ChefClient chefClientload(String chefClientname) throws ChefClientExecutionException, EntityNotFoundException; | ||
|
||
/** | ||
* Loads the chefclient whose hostname is hostname | ||
* | ||
* @param hostname | ||
* @return ChefClient | ||
*/ | ||
ChefClient chefClientfindByHostname(String hostname) throws ChefClientExecutionException, EntityNotFoundException; | ||
|
||
} |
48 changes: 48 additions & 0 deletions
48
core/src/main/java/com/telefonica/euro_iaas/sdc/manager/async/NodeAsyncManager.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
/** | ||
* Copyright 2014 Telefonica Investigación y Desarrollo, S.A.U <br> | ||
* This file is part of FI-WARE project. | ||
* <p> | ||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with | ||
* the License. | ||
* </p> | ||
* <p> | ||
* You may obtain a copy of the License at:<br> | ||
* <br> | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* </p> | ||
* <p> | ||
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on | ||
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* </p> | ||
* <p> | ||
* See the License for the specific language governing permissions and limitations under the License. | ||
* </p> | ||
* <p> | ||
* For those usages not covered by the Apache version 2.0 License please contact with opensource@tid.es | ||
* </p> | ||
*/ | ||
|
||
/** | ||
* | ||
*/ | ||
package com.telefonica.euro_iaas.sdc.manager.async; | ||
|
||
import com.telefonica.euro_iaas.sdc.model.Task; | ||
|
||
/** | ||
* @author alberts | ||
*/ | ||
public interface NodeAsyncManager { | ||
|
||
/** | ||
* Delete a NodeClient from ChefServer / PuppetMaster | ||
* | ||
* @param nodeName | ||
* the name of the node to be deleted from chef server / puppet master | ||
* @param task | ||
* the task which contains the information about the async execution | ||
* @param callback | ||
* if not empty, contains the url where the result of the execution will be sent | ||
*/ | ||
void nodeDelete(String vdc, String chefClientname, Task task, String callback); | ||
} |
156 changes: 156 additions & 0 deletions
156
core/src/main/java/com/telefonica/euro_iaas/sdc/manager/async/impl/NodeAsyncManagerImpl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,156 @@ | ||
/** | ||
* Copyright 2014 Telefonica Investigación y Desarrollo, S.A.U <br> | ||
* This file is part of FI-WARE project. | ||
* <p> | ||
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with | ||
* the License. | ||
* </p> | ||
* <p> | ||
* You may obtain a copy of the License at:<br> | ||
* <br> | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* </p> | ||
* <p> | ||
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on | ||
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* </p> | ||
* <p> | ||
* See the License for the specific language governing permissions and limitations under the License. | ||
* </p> | ||
* <p> | ||
* For those usages not covered by the Apache version 2.0 License please contact with opensource@tid.es | ||
* </p> | ||
*/ | ||
|
||
/** | ||
* | ||
*/ | ||
package com.telefonica.euro_iaas.sdc.manager.async.impl; | ||
|
||
import static com.telefonica.euro_iaas.sdc.util.SystemPropertiesProvider.CHEF_NODE_BASE_URL; | ||
|
||
import java.text.MessageFormat; | ||
import java.util.Date; | ||
import java.util.logging.Logger; | ||
|
||
import org.apache.commons.lang.StringUtils; | ||
|
||
import com.telefonica.euro_iaas.sdc.exception.NodeExecutionException; | ||
import com.telefonica.euro_iaas.sdc.manager.NodeManager; | ||
import com.telefonica.euro_iaas.sdc.manager.async.NodeAsyncManager; | ||
import com.telefonica.euro_iaas.sdc.manager.async.TaskManager; | ||
import com.telefonica.euro_iaas.sdc.model.Task; | ||
import com.telefonica.euro_iaas.sdc.model.Task.TaskStates; | ||
import com.telefonica.euro_iaas.sdc.model.TaskError; | ||
import com.telefonica.euro_iaas.sdc.model.TaskReference; | ||
import com.telefonica.euro_iaas.sdc.util.SystemPropertiesProvider; | ||
import com.telefonica.euro_iaas.sdc.util.TaskNotificator; | ||
|
||
/** | ||
* @author alberts | ||
*/ | ||
public class NodeAsyncManagerImpl implements NodeAsyncManager { | ||
|
||
private static Logger LOGGER = Logger.getLogger(NodeAsyncManagerImpl.class.getName()); | ||
|
||
private TaskManager taskManager; | ||
private SystemPropertiesProvider propertiesProvider; | ||
private TaskNotificator taskNotificator; | ||
private NodeManager nodeManager; | ||
|
||
public void nodeDelete(String vdc, String nodeName, Task task, String callback) { | ||
try { | ||
nodeManager.nodeDelete(vdc, nodeName); | ||
updateSuccessTask(task, vdc, nodeName); | ||
LOGGER.info("Node " + nodeName + " is being deleted"); | ||
} catch (NodeExecutionException e) { | ||
updateErrorTask(vdc, nodeName, task, "The node " + nodeName | ||
+ " can not be deleted due to an error executing in node.", e); | ||
} catch (Throwable e) { | ||
updateErrorTask(vdc, nodeName, task, "The node " + nodeName | ||
+ " can not be deleted due to unexpected error.", e); | ||
} finally { | ||
notifyTask(callback, task); | ||
} | ||
} | ||
|
||
// //////// PRIVATE METHODS /////////// | ||
|
||
/* | ||
* Update the task with necessary information when the task is success. | ||
*/ | ||
private void updateSuccessTask(Task task, String vdc, String chefClientname) { | ||
String piResource = MessageFormat.format(propertiesProvider.getProperty(CHEF_NODE_BASE_URL), vdc, | ||
chefClientname); // the product | ||
task.setResult(new TaskReference(piResource)); | ||
task.setEndTime(new Date()); | ||
task.setStatus(TaskStates.SUCCESS); | ||
taskManager.updateTask(task); | ||
} | ||
|
||
/* | ||
* Update the task with necessary information when the task is wrong and the product instance exists in the system. | ||
*/ | ||
private void updateErrorTask(String vdc, String chefClientname, Task task, String message, Throwable t) { | ||
String piResource = MessageFormat.format(propertiesProvider.getProperty(CHEF_NODE_BASE_URL), vdc, | ||
chefClientname); // the product | ||
task.setResult(new TaskReference(piResource)); | ||
updateErrorTask(task, message, t); | ||
} | ||
|
||
/* | ||
* Update the task with necessary information when the task is wrong. | ||
*/ | ||
private void updateErrorTask(Task task, String message, Throwable t) { | ||
TaskError error = new TaskError(message); | ||
error.setMajorErrorCode(t.getMessage()); | ||
error.setMinorErrorCode(t.getClass().getSimpleName()); | ||
task.setEndTime(new Date()); | ||
task.setStatus(TaskStates.ERROR); | ||
task.setError(error); | ||
taskManager.updateTask(task); | ||
LOGGER.info("An error occurs while deleting a node . See task " + task.getHref() | ||
+ "for more information"); | ||
} | ||
|
||
private void notifyTask(String url, Task task) { | ||
if (!StringUtils.isEmpty(url)) { | ||
taskNotificator.notify(url, task); | ||
} | ||
} | ||
|
||
// ////////// I.O.C //////////// | ||
|
||
/** | ||
* @param chefClientManager | ||
* the chefClientManager to set | ||
*/ | ||
public void setNodeManager(NodeManager nodeManager) { | ||
this.nodeManager = nodeManager; | ||
} | ||
|
||
/** | ||
* @param taskManager | ||
* the taskManager to set | ||
*/ | ||
public void setTaskManager(TaskManager taskManager) { | ||
this.taskManager = taskManager; | ||
} | ||
|
||
/** | ||
* @param propertiesProvider | ||
* the propertiesProvider to set | ||
*/ | ||
public void setPropertiesProvider(SystemPropertiesProvider propertiesProvider) { | ||
this.propertiesProvider = propertiesProvider; | ||
} | ||
|
||
/** | ||
* @param taskNotificator | ||
* the taskNotificator to set | ||
*/ | ||
public void setTaskNotificator(TaskNotificator taskNotificator) { | ||
this.taskNotificator = taskNotificator; | ||
} | ||
|
||
} |
Oops, something went wrong.