use of com.redhat.devtools.intellij.tektoncd.tree.ParentableNode in project intellij-tekton by redhat-developer.
the class AddTriggerAction method actionPerformed.
@Override
public void actionPerformed(AnActionEvent anActionEvent, TreePath path, Object selected, Tkn tkncli) {
ActionMessage telemetry = TelemetryService.instance().action(NAME_PREFIX_CRUD + "add trigger");
ParentableNode element = getElement(selected);
String namespace = element.getNamespace();
ExecHelper.submit(() -> {
try {
String triggerVersion = tkncli.getTektonTriggersApiVersion();
Map<String, String> triggerBindingTemplates = SnippetHelper.getTriggerBindingTemplates(triggerVersion);
AddTriggerModel model = createModel(element, namespace, tkncli);
if (!model.isValid()) {
UIHelper.executeInUI(() -> Messages.showErrorDialog(model.getErrorMessage(), "Error"));
return;
}
String kind = (element instanceof PipelineNode) ? "Pipeline " : "Task ";
telemetry.property(PROP_RESOURCE_KIND, kind);
AddTriggerWizard addTriggerWizard = openTriggerBindingWizard(anActionEvent, element, triggerBindingTemplates, model, kind);
if (!addTriggerWizard.isOK()) {
telemetry.result(VALUE_ABORTED).send();
return;
}
createNewVolumes(model.getWorkspaces(), tkncli);
// take/create all triggerBindings
Map<String, String> triggerBindingsSelected = model.getBindingsSelectedByUser();
saveTriggerBindings(triggerBindingsSelected, namespace, tkncli);
// get all params from bindings
Set<String> paramsFromBindings = model.extractVariablesFromSelectedBindings();
// interpolate the variables correctly $variable to $(tt.params.variable)
normalizeVariablesInterpolation(model, paramsFromBindings);
// create the triggerTemplate
String randomString = Utils.getRandomString(6);
String triggerTemplateName = element.getName() + "-template-" + randomString;
ObjectNode run = createNode(element, model);
String triggerApiVersion = tkncli.getTektonTriggersApiVersion();
ObjectNode triggerTemplate = YAMLBuilder.createTriggerTemplate(triggerTemplateName, triggerApiVersion, new ArrayList<>(paramsFromBindings), Arrays.asList(run));
saveResource(YAMLHelper.JSONToYAML(triggerTemplate), namespace, KIND_TRIGGERTEMPLATES, tkncli);
notifySuccessOperation("TriggerTemplate " + triggerTemplateName);
// create the eventListener
String eventListenerName = element.getName() + "-listener-" + randomString;
// TODO we are using the default pipeline serviceAccount but we should allow users to select the one they prefer
ObjectNode eventListener = YAMLBuilder.createEventListener(eventListenerName, triggerApiVersion, "pipeline", triggerBindingsSelected.keySet().stream().map(binding -> binding.replace(" NEW", "")).collect(Collectors.toList()), triggerTemplateName);
saveResource(YAMLHelper.JSONToYAML(eventListener), namespace, KIND_EVENTLISTENERS, tkncli);
telemetry.result("bindings and resources created").send();
notifySuccessOperation("EventListener " + eventListenerName);
TreeHelper.refresh(getEventProject(anActionEvent), (ParentableNode) ((ParentableNode) element.getParent()).getParent());
} catch (IOException e) {
String errorMessage = "Failed to add a trigger to " + element.getName() + " in namespace " + namespace + "\n" + e.getLocalizedMessage();
telemetry.error(anonymizeResource(element.getName(), namespace, errorMessage)).send();
Notification notification = new Notification(NOTIFICATION_ID, "Error", errorMessage, NotificationType.ERROR);
Notifications.Bus.notify(notification);
logger.warn(errorMessage, e);
}
});
}
use of com.redhat.devtools.intellij.tektoncd.tree.ParentableNode in project intellij-tekton by redhat-developer.
the class DeleteAction method actionPerformed.
@Override
public void actionPerformed(AnActionEvent anActionEvent, TreePath[] path, Object[] selected, Tkn tkncli) {
ActionMessage telemetry = TelemetryService.instance().action(NAME_PREFIX_CRUD + "delete resource");
ParentableNode[] elements = Arrays.stream(selected).map(item -> getElement(item)).toArray(ParentableNode[]::new);
ExecHelper.submit(() -> {
String deleteText = getDeleteText(tkncli, elements);
int resultDialog = UIHelper.executeInUI(() -> {
DeleteDialog delDialog = new DeleteDialog(null, getTitle(elements), deleteText, getDeleteChkText(elements));
delDialog.show();
if (delDialog.isOK()) {
return delDialog.hasToDeleteRelatedResources() ? OK_DELETE_RESOURCES_CODE : OK_DELETE_CODE;
}
return CANCEL_CODE;
});
if (resultDialog != CANCEL_CODE) {
String namespace = elements[0].getNamespace();
boolean deleteRelatedResources = resultDialog == OK_DELETE_RESOURCES_CODE;
Map<Class, List<ParentableNode>> resourcesByClass = TreeHelper.getResourcesByClass(elements);
for (Class type : resourcesByClass.keySet()) {
try {
deleteResources(type, resourcesByClass, namespace, deleteRelatedResources, tkncli);
((TektonTreeStructure) getTree(anActionEvent).getClientProperty(Constants.STRUCTURE_PROPERTY)).fireModified(resourcesByClass.get(type).get(0).getParent());
telemetry.property(TelemetryService.PROP_RESOURCE_KIND, type.getSimpleName()).property(TelemetryService.PROP_RESOURCE_RELATED, String.valueOf(deleteRelatedResources)).success().send();
} catch (IOException e) {
telemetry.error(anonymizeResource(null, namespace, e.getMessage())).send();
UIHelper.executeInUI(() -> Messages.showErrorDialog("Error: " + e.getLocalizedMessage(), "Error"));
}
}
}
});
}
use of com.redhat.devtools.intellij.tektoncd.tree.ParentableNode in project intellij-tekton by redhat-developer.
the class StartAction method actionPerformed.
@Override
public void actionPerformed(AnActionEvent anActionEvent, TreePath path, Object selected, Tkn tkncli) {
this.telemetry = createTelemetry();
ParentableNode element = getElement(selected);
String namespace = element.getNamespace();
ExecHelper.submit(() -> {
StartResourceModel model = createModel(tkncli, element, namespace);
if (model == null)
return;
telemetry.property(PROP_RESOURCE_KIND, model.getKind());
if (!model.isValid()) {
telemetry.error(model.getErrorMessage()).send();
UIHelper.executeInUI(() -> Messages.showErrorDialog(model.getErrorMessage(), "Error"));
return;
}
Project project = getEventProject(anActionEvent);
if (!canBeStarted(project, element, model)) {
return;
}
try {
createNewVolumes(model.getWorkspaces(), tkncli);
String runName = doStart(tkncli, namespace, model);
FollowLogsAction.run(namespace, runName, element.getClass(), tkncli);
refreshTreeNode(anActionEvent, element);
telemetry.send();
} catch (IOException e) {
String errorMessage = model.getName() + " in namespace " + namespace + " failed to start\n" + e.getLocalizedMessage();
telemetry.error(anonymizeResource(element.getName(), namespace, errorMessage)).send();
Notification notification = new Notification(NOTIFICATION_ID, "Error", errorMessage, NotificationType.ERROR);
Notifications.Bus.notify(notification);
logger.warn("Error: " + e.getLocalizedMessage(), e);
}
});
}
use of com.redhat.devtools.intellij.tektoncd.tree.ParentableNode in project intellij-tekton by redhat-developer.
the class CreateTaskRunTemplateAction method actionPerformed.
@Override
public void actionPerformed(AnActionEvent anActionEvent, TreePath path, Object selected, Tkn tkncli) {
ActionMessage telemetry = TelemetryService.instance().action(NAME_PREFIX_CRUD + "create task run");
ParentableNode element = getElement(selected);
String namespace = element.getNamespace();
ExecHelper.submit(() -> {
Notification notification;
TaskConfigurationModel model;
try {
model = getModel(element, namespace, tkncli);
} catch (IOException e) {
String errorMessage = "Failed to create TaskRun templace from " + element.getName() + " in namespace " + namespace + "An error occurred while retrieving information.\n" + e.getLocalizedMessage();
telemetry.error(anonymizeResource(element.getName(), namespace, errorMessage)).send();
UIHelper.executeInUI(() -> {
Messages.showErrorDialog(errorMessage, "Error");
});
logger.warn("Error: " + e.getLocalizedMessage(), e);
return;
}
if (!model.isValid()) {
String errorMessage = "Failed to create a TaskRun templace from " + element.getName() + " in namespace " + namespace + ". The task is not valid.";
telemetry.error(anonymizeResource(element.getName(), namespace, errorMessage)).send();
UIHelper.executeInUI(() -> Messages.showErrorDialog(errorMessage, "Error"));
return;
}
try {
String contentTask = new YAMLMapper().writeValueAsString(YAMLBuilder.createTaskRun(model));
openEditor(anActionEvent.getProject(), namespace, telemetry, model, contentTask);
} catch (IOException e) {
String errorMessage = "Failed to create TaskRun templace from" + element.getName() + " in namespace " + namespace + " \n" + e.getLocalizedMessage();
telemetry.error(anonymizeResource(element.getName(), namespace, errorMessage)).send();
notification = new Notification(NOTIFICATION_ID, "Error", errorMessage, NotificationType.ERROR);
Notifications.Bus.notify(notification);
logger.warn(errorMessage, e);
}
});
}
use of com.redhat.devtools.intellij.tektoncd.tree.ParentableNode in project intellij-tekton by redhat-developer.
the class LogsBaseAction method actionPerformed.
@Override
public void actionPerformed(AnActionEvent anActionEvent, TreePath path, Object selected, Tkn tkncli) {
this.telemetry = createTelemetry();
ExecHelper.submit(() -> {
ParentableNode element = getElement(selected);
String namespace = element.getNamespace();
String resourceName = pickResourceName(namespace, element, anActionEvent.getPresentation().getText(), tkncli);
if (resourceName == null)
return;
doActionPerformed(namespace, resourceName, element.getClass(), tkncli);
});
}
Aggregations