Search in sources :

Example 1 with ParentableNode

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);
        }
    });
}
Also used : AddTriggerWizard(com.redhat.devtools.intellij.tektoncd.ui.wizard.addtrigger.AddTriggerWizard) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) ParentableNode(com.redhat.devtools.intellij.tektoncd.tree.ParentableNode) ActionMessage(com.redhat.devtools.intellij.telemetry.core.service.TelemetryMessageBuilder.ActionMessage) AddTriggerModel(com.redhat.devtools.intellij.tektoncd.utils.model.actions.AddTriggerModel) IOException(java.io.IOException) PipelineNode(com.redhat.devtools.intellij.tektoncd.tree.PipelineNode) Notification(com.intellij.notification.Notification)

Example 2 with ParentableNode

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"));
                }
            }
        }
    });
}
Also used : ClusterTaskNode(com.redhat.devtools.intellij.tektoncd.tree.ClusterTaskNode) Arrays(java.util.Arrays) RefUsage(com.redhat.devtools.intellij.tektoncd.ui.toolwindow.findusage.RefUsage) TreeHelper(com.redhat.devtools.intellij.tektoncd.utils.TreeHelper) KIND_TASK(com.redhat.devtools.intellij.tektoncd.Constants.KIND_TASK) ConditionNode(com.redhat.devtools.intellij.tektoncd.tree.ConditionNode) Tkn(com.redhat.devtools.intellij.tektoncd.tkn.Tkn) PipelineRunNode(com.redhat.devtools.intellij.tektoncd.tree.PipelineRunNode) TaskNode(com.redhat.devtools.intellij.tektoncd.tree.TaskNode) Constants(com.redhat.devtools.intellij.tektoncd.Constants) TriggerTemplateNode(com.redhat.devtools.intellij.tektoncd.tree.TriggerTemplateNode) ExecHelper(com.redhat.devtools.intellij.common.utils.ExecHelper) Map(java.util.Map) TelemetryService(com.redhat.devtools.intellij.tektoncd.telemetry.TelemetryService) Messages(com.intellij.openapi.ui.Messages) UIHelper(com.redhat.devtools.intellij.common.utils.UIHelper) ActionMessage(com.redhat.devtools.intellij.telemetry.core.service.TelemetryMessageBuilder.ActionMessage) TaskRunNode(com.redhat.devtools.intellij.tektoncd.tree.TaskRunNode) AnonymizeUtils.anonymizeResource(com.redhat.devtools.intellij.telemetry.core.util.AnonymizeUtils.anonymizeResource) KIND_CLUSTERTASK(com.redhat.devtools.intellij.tektoncd.Constants.KIND_CLUSTERTASK) TreePath(javax.swing.tree.TreePath) IOException(java.io.IOException) NAME_PREFIX_CRUD(com.redhat.devtools.intellij.tektoncd.telemetry.TelemetryService.NAME_PREFIX_CRUD) ParentableNode(com.redhat.devtools.intellij.tektoncd.tree.ParentableNode) DeleteDialog(com.redhat.devtools.intellij.tektoncd.ui.DeleteDialog) Collectors(java.util.stream.Collectors) TektonTreeStructure(com.redhat.devtools.intellij.tektoncd.tree.TektonTreeStructure) PipelineNode(com.redhat.devtools.intellij.tektoncd.tree.PipelineNode) List(java.util.List) ClusterTriggerBindingNode(com.redhat.devtools.intellij.tektoncd.tree.ClusterTriggerBindingNode) AnActionEvent(com.intellij.openapi.actionSystem.AnActionEvent) EventListenerNode(com.redhat.devtools.intellij.tektoncd.tree.EventListenerNode) ResourceNode(com.redhat.devtools.intellij.tektoncd.tree.ResourceNode) TriggerBindingNode(com.redhat.devtools.intellij.tektoncd.tree.TriggerBindingNode) TektonTreeStructure(com.redhat.devtools.intellij.tektoncd.tree.TektonTreeStructure) IOException(java.io.IOException) DeleteDialog(com.redhat.devtools.intellij.tektoncd.ui.DeleteDialog) ParentableNode(com.redhat.devtools.intellij.tektoncd.tree.ParentableNode) ActionMessage(com.redhat.devtools.intellij.telemetry.core.service.TelemetryMessageBuilder.ActionMessage) List(java.util.List)

Example 3 with ParentableNode

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);
        }
    });
}
Also used : Project(com.intellij.openapi.project.Project) ParentableNode(com.redhat.devtools.intellij.tektoncd.tree.ParentableNode) StartResourceModel(com.redhat.devtools.intellij.tektoncd.utils.model.actions.StartResourceModel) IOException(java.io.IOException) Notification(com.intellij.notification.Notification)

Example 4 with ParentableNode

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);
        }
    });
}
Also used : YAMLMapper(com.fasterxml.jackson.dataformat.yaml.YAMLMapper) ParentableNode(com.redhat.devtools.intellij.tektoncd.tree.ParentableNode) ActionMessage(com.redhat.devtools.intellij.telemetry.core.service.TelemetryMessageBuilder.ActionMessage) TaskConfigurationModel(com.redhat.devtools.intellij.tektoncd.utils.model.resources.TaskConfigurationModel) IOException(java.io.IOException) Notification(com.intellij.notification.Notification)

Example 5 with ParentableNode

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);
    });
}
Also used : ParentableNode(com.redhat.devtools.intellij.tektoncd.tree.ParentableNode)

Aggregations

ParentableNode (com.redhat.devtools.intellij.tektoncd.tree.ParentableNode)13 IOException (java.io.IOException)8 ActionMessage (com.redhat.devtools.intellij.telemetry.core.service.TelemetryMessageBuilder.ActionMessage)6 Notification (com.intellij.notification.Notification)4 PipelineRunNode (com.redhat.devtools.intellij.tektoncd.tree.PipelineRunNode)4 TaskRunNode (com.redhat.devtools.intellij.tektoncd.tree.TaskRunNode)4 TektonTreeStructure (com.redhat.devtools.intellij.tektoncd.tree.TektonTreeStructure)3 RefUsage (com.redhat.devtools.intellij.tektoncd.ui.toolwindow.findusage.RefUsage)3 Project (com.intellij.openapi.project.Project)2 PipelineNode (com.redhat.devtools.intellij.tektoncd.tree.PipelineNode)2 ObjectNode (com.fasterxml.jackson.databind.node.ObjectNode)1 YAMLMapper (com.fasterxml.jackson.dataformat.yaml.YAMLMapper)1 AnActionEvent (com.intellij.openapi.actionSystem.AnActionEvent)1 Messages (com.intellij.openapi.ui.Messages)1 Tree (com.intellij.ui.treeStructure.Tree)1 ExecHelper (com.redhat.devtools.intellij.common.utils.ExecHelper)1 UIHelper (com.redhat.devtools.intellij.common.utils.UIHelper)1 Constants (com.redhat.devtools.intellij.tektoncd.Constants)1 KIND_CLUSTERTASK (com.redhat.devtools.intellij.tektoncd.Constants.KIND_CLUSTERTASK)1 KIND_TASK (com.redhat.devtools.intellij.tektoncd.Constants.KIND_TASK)1