Giter Club home page Giter Club logo

rundeck-slack-incoming-webhook-plugin's People

Contributors

adriankirchner avatar bdwyertech avatar cbezmen avatar city-furniture avatar fibbers avatar lusis avatar myokoo avatar redredgroovy avatar sawanoboly avatar stack72 avatar subodh-dharma avatar totallyunknown avatar unicolet avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

rundeck-slack-incoming-webhook-plugin's Issues

Setting up through code

This is really not technical issue, but I'd love to make it work through code definition, instead of using GUI to set up Slack webhook.
Any ways?

SLACK NOITIFACTION ERROR WITH SLASH

Hi all,

A little issue append when SLASH character appear in message.

In a job with option i've a windows path like "C:\mydirto\myfile.txt"

Slash in path make slack error on alerting. Exclusively for (On success and On Failure) but it work for On Start cause options value are not send with the slack message.

:)

Slack Webhook not working

Hi all,

I 've installed slack plugin on my Rundeck build | 2.10.8-1 server.
Slack option correctly appear under Notification part.
I set my slack webhook URL for success and all other possibilities
But i never receive alert on Slack.

It work when i put a simple cURL to my slack webhook url in a command script..

I 've only put the JAR plugin in the right directory
i don't set template or global webhook URL in the project config file.

Any idea ?

Invalid Payload

Hi,

today I updated Rundeck and the Slack Plugin to the most recent versions. Unfortunately it started to throw invalid_payload errors on me: (censored webhook and urls)

ERROR NotificationService: Error sending notification: Notification{eventTrigger='onfailure', type='SlackNotification', content='{"webhook_url":"https://hooks.slack.com/services/..."}'}: class com.bitplaces.rundeck.plugins.slack.SlackNotificationPluginException: Unknown status returned from Slack API: [invalid_payload].
payload=
{
   "attachments":[
      {
         "fallback":"Failed: <https://rundeck.company.it/project/Cronjobs/execution/follow/2729251|Execution #2,729,251> of job <https://rundeck.company.it/project/Cronjobs/job/show/d350ae11-ccca-4ddd-baa3-3b68edd773ff|Logcluster / Move older indices to ondemand nodes>",
         "pretext":"<https://rundeck.company.it/project/Cronjobs/execution/follow/2729251|Execution #2,729,251> of job <https://rundeck.company.it/project/Cronjobs/job/show/d350ae11-ccca-4ddd-baa3-3b68edd773ff|Logcluster / Move older indices to ondemand nodes>",
         "color":"danger",
         "fields":[
            {
               "title":"Job Name",
               "value":"<https://rundeck.company.it/project/Cronjobs/job/show/d350ae11-ccca-4ddd-baa3-3b68edd773ff|Logcluster / Move older indices to ondemand nodes>",
               "short":true
            },
            {
               "title":"Project",
               "value":"Cronjobs",
               "short":true
            },
            {
               "title":"Status",
               "value":"Failed",
               "short":true
            },
            {
               "title":"Execution ID",
               "value":"<https://rundeck.company.it/project/Cronjobs/execution/follow/2729251|#2,729,251>",
               "short":true
            },
            {
               "title":"Options",
               "value":"N/A",
               "short":true
            },
            {
               "title":"Started By",
               "value":"s.herzberg",
               "short":true
            }
            ,{
               "title":"Failed Nodes",
               "value":""rundeck.company.it"",
               "short":false
            }
]
      }
   ]
}

com.bitplaces.rundeck.plugins.slack.SlackNotificationPluginException: Unknown status returned from Slack API: [invalid_payload].
payload=
{
   "attachments":[
      {
         "fallback":"Failed: <https://rundeck.company.it/project/Cronjobs/execution/follow/2729251|Execution #2,729,251> of job <https://rundeck.company.it/project/Cronjobs/job/show/d350ae11-ccca-4ddd-baa3-3b68edd773ff|Logcluster / Move older indices to ondemand nodes>",
         "pretext":"<https://rundeck.company.it/project/Cronjobs/execution/follow/2729251|Execution #2,729,251> of job <https://rundeck.company.it/project/Cronjobs/job/show/d350ae11-ccca-4ddd-baa3-3b68edd773ff|Logcluster / Move older indices to ondemand nodes>",
         "color":"danger",
         "fields":[
            {
               "title":"Job Name",
               "value":"<https://rundeck.company.it/project/Cronjobs/job/show/d350ae11-ccca-4ddd-baa3-3b68edd773ff|Logcluster / Move older indices to ondemand nodes>",
               "short":true
            },
            {
               "title":"Project",
               "value":"Cronjobs",
               "short":true
            },
            {
               "title":"Status",
               "value":"Failed",
               "short":true
            },
            {
               "title":"Execution ID",
               "value":"<https://rundeck.company.it/project/Cronjobs/execution/follow/2729251|#2,729,251>",
               "short":true
            },
            {
               "title":"Options",
               "value":"N/A",
               "short":true
            },
            {
               "title":"Started By",
               "value":"s.herzberg",
               "short":true
            }
            ,{
               "title":"Failed Nodes",
               "value":""rundeck.company.it"",
               "short":false
            }
]
      }
   ]
}

        at com.bitplaces.rundeck.plugins.slack.SlackNotificationPlugin.postNotification(SlackNotificationPlugin.java:125)
        at rundeck.services.NotificationService.triggerPlugin(NotificationService.groovy:475)
        at rundeck.services.NotificationService$_triggerJobNotification_closure5.doCall(NotificationService.groovy:337)
        at rundeck.services.NotificationService.triggerJobNotification(NotificationService.groovy:146)
        at rundeck.services.NotificationService$_triggerJobNotification_closure1.doCall(NotificationService.groovy:88)
        at rundeck.services.NotificationService.triggerJobNotification(NotificationService.groovy:85)
        at rundeck.services.ExecutionService$_saveExecutionState_closure60.doCall(ExecutionService.groovy:2089)
        at rundeck.services.ExecutionService.saveExecutionState(ExecutionService.groovy:1994)
        at rundeck.quartzjobs.ExecutionJob$_saveState_closure4.doCall(ExecutionJob.groovy:480)
        at rundeck.quartzjobs.ExecutionJob.withRetry(ExecutionJob.groovy:418)
        at rundeck.quartzjobs.ExecutionJob.saveState(ExecutionJob.groovy:490)
        at rundeck.quartzjobs.ExecutionJob.execute_internal(ExecutionJob.groovy:146)
        at rundeck.quartzjobs.ExecutionJob$_execute_closure1.doCall(ExecutionJob.groovy:74)
        at com.codahale.metrics.Timer.time(Timer.java:99)
        at rundeck.quartzjobs.ExecutionJob.execute(ExecutionJob.groovy:73)
        at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
        at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)

Causes users to fail at login

The moment we add this to our Rundeck and restart the application, upon login we fail, no user is able to log in.

does this plugin require modification to the jaas-loginmodule.conf? I am using local ssh groups with an accompany ACL file for login rights. This module seems to break this?

`
2017-08-03 10:41:16.747:WARN:oejj.JAASLoginService:qtp81628611-18:
javax.security.auth.login.LoginException: Login Failure: all modules ignored
at javax.security.auth.login.LoginContext.invoke(LoginContext.java:906)
at javax.security.auth.login.LoginContext.access$000(LoginContext.java:195)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:682)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:680)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
at javax.security.auth.login.LoginContext.login(LoginContext.java:587)
at org.eclipse.jetty.jaas.JAASLoginService.login(JAASLoginService.java:241)
at org.eclipse.jetty.security.authentication.LoginAuthenticator.login(LoginAuthenticator.java:52)
at org.eclipse.jetty.security.authentication.FormAuthenticator.login(FormAuthenticator.java:192)
at org.eclipse.jetty.security.authentication.FormAuthenticator.validateRequest(FormAuthenticator.java:229)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:499)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:213)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1097)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:448)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:175)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1031)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:136)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
at org.eclipse.jetty.server.Server.handle(Server.java:446)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:271)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:246)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.run(AbstractConnection.java:358)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:601)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:532)
at java.lang.Thread.run(Thread.java:748)
Aug 03, 2017 10:44:11 AM org.rundeck.jaas.pam.AbstractPamLoginModule debug
INFO: PAM authentication trying (sshd) for: jamey
Aug 03, 2017 10:44:13 AM org.rundeck.jaas.pam.AbstractPamLoginModule debug
INFO: pam_authenticate failed : Authentication failure
org.jvnet.libpam.PAMException: pam_authenticate failed : Authentication failure
at org.jvnet.libpam.PAM.check(PAM.java:106)
at org.jvnet.libpam.PAM.authenticate(PAM.java:124)
at org.rundeck.jaas.pam.AbstractPamLoginModule.authenticate(AbstractPamLoginModule.java:85)
at org.rundeck.jaas.AbstractSharedLoginModule.login(AbstractSharedLoginModule.java:78)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at javax.security.auth.login.LoginContext.invoke(LoginContext.java:755)
at javax.security.auth.login.LoginContext.access$000(LoginContext.java:195)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:682)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:680)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
at javax.security.auth.login.LoginContext.login(LoginContext.java:587)
at org.eclipse.jetty.jaas.JAASLoginService.login(JAASLoginService.java:241)
at org.eclipse.jetty.security.authentication.LoginAuthenticator.login(LoginAuthenticator.java:52)
at org.eclipse.jetty.security.authentication.FormAuthenticator.login(FormAuthenticator.java:192)
at org.eclipse.jetty.security.authentication.FormAuthenticator.validateRequest(FormAuthenticator.java:229)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:499)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:213)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1097)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:448)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:175)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1031)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:136)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
at org.eclipse.jetty.server.Server.handle(Server.java:446)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:271)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:246)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.run(AbstractConnection.java:358)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:601)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:532)
at java.lang.Thread.run(Thread.java:748)

`

No payload received

com.bitplaces.rundeck.plugins.slack.SlackNotificationPluginException: Unknown status returned from Slack API: [No payload received].
payload=%7B%0A+++%22attachments%22%3A%5B%0A++++++%7B%0A+++++++++%22fallback%22%3A%22Succeeded%3A+%3Chttp%3A%2F%2Fxxx.xxx.xxx.xxx%2Frundeck%2Fproject%2Fxxx%2Fexecution%2Ffollow%2F133%7CExecution+%23133%3E+of+job+%3Chttp%3A%2F%2Fxxx.xxx.xxx%2Frundeck%2Fproject%2Fxxx%2Fjob%2Fshow%2F2dbd2d5a-b5ab-4ebf-a893-88a5717187f3%7Ctest%3E%22%2C%0A+++++++++%22pretext%22%3A%22%3Chttp%3A%2F%2Fxxx.xxx.xxx.xxx%2Frundeck%2Fproject%2Fxxx%2Fexecution%2Ffollow%2F133%7CExecution+%23133%3E+of+job+%3Chttp%3A%2F%2Fxxx.xxx.xxx.xxx%2Frundeck%2Fproject%2Fxxx%2Fjob%2Fshow%2F2dbd2d5a-b5ab-4ebf-a893-88a5717187f3%7Ctest%3E%22%2C%0A+++++++++%22color%22%3A%22good%22%2C%0A+++++++++%22fields%22%3A%5B%0A++++++++++++%7B%0A+++++++++++++++%22title%22%3A%22Job+Name%22%2C%0A+++++++++++++++%22value%22%3A%22%3Chttp%3A%2F%2Fxxx.xxx.xxx.xxx%2Frundeck%2Fproject%2Ftest%2Fjob%2Fshow%2F2dbd2d5a-b5ab-4ebf-a893-88a5717187f3%7Ctest%3E%22%2C%0A+++++++++++++++%22short%22%3Atrue%0A++++++++++++%7D%2C%0A++++++++++++%7B%0A+++++++++++++++%22title%22%3A%22Project%22%2C%0A+++++++++++++++%22value%22%3A%22test%22%2C%0A+++++++++++++++%22short%22%3Atrue%0A++++++++++++%7D%2C%0A++++++++++++%7B%0A+++++++++++++++%22title%22%3A%22Status%22%2C%0A+++++++++++++++%22value%22%3A%22Succeeded%22%2C%0A+++++++++++++++%22short%22%3Atrue%0A++++++++++++%7D%2C%0A++++++++++++%7B%0A+++++++++++++++%22title%22%3A%22Execution+ID%22%2C%0A+++++++++++++++%22value%22%3A%22%3Chttp%3A%2F%2Fxxx.xxx.xxx.xxx%2Frundeck%2Fproject%2Fxxx%2Fexecution%2Ffollow%2F133%7C%23133%3E%22%2C%0A+++++++++++++++%22short%22%3Atrue%0A++++++++++++%7D%0A%5D%0A++++++%7D%0A+++%5D%0A%7D%0A%0A
at com.bitplaces.rundeck.plugins.slack.SlackNotificationPlugin.postNotification(SlackNotificationPlugin.java:130)
at rundeck.services.NotificationService.triggerPlugin(NotificationService.groovy:471)
at rundeck.services.NotificationService$_triggerJobNotification_closure5.doCall(NotificationService.groovy:333)
at rundeck.services.NotificationService.triggerJobNotification(NotificationService.groovy:142)
at rundeck.services.NotificationService$_triggerJobNotification_closure1.doCall(NotificationService.groovy:84)
at rundeck.services.NotificationService.triggerJobNotification(NotificationService.groovy:81)
at rundeck.services.ExecutionService$_saveExecutionState_closure54.doCall(ExecutionService.groovy:1904)
at rundeck.services.ExecutionService.saveExecutionState(ExecutionService.groovy:1809)
at rundeck.quartzjobs.ExecutionJob$_saveState_closure3.doCall(ExecutionJob.groovy:449)
at rundeck.quartzjobs.ExecutionJob.withRetry(ExecutionJob.groovy:392)
at rundeck.quartzjobs.ExecutionJob.saveState(ExecutionJob.groovy:458)
at rundeck.quartzjobs.ExecutionJob.execute_internal(ExecutionJob.groovy:143)
at rundeck.quartzjobs.ExecutionJob$_execute_closure1.doCall(ExecutionJob.groovy:71)
at com.codahale.metrics.Timer.time(Timer.java:99)
at rundeck.quartzjobs.ExecutionJob.execute(ExecutionJob.groovy:70)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)

Support for custom notifications

Is there a way to add support for custom notifications (or does this already exist?), such that notifications can be smaller and also include context variables, as well as job output if possible.

The original project that this was forked from had support for external Freemarker templates to achieve this, maybe this is already included in this plugin but unconfigurable? If not, would it be possible to add this functionality back in?

Possibility to add some user-definable variables?

Feature request: We've got a lot of jobs that mostly involve one "target", for example we have a job that updates specific targets. I would love to show in Slack which target has been chosen for the job that is being run / has failed / has successfully ran. For us, picking an option that is setup in the job or maybe inserting a string with the @option.target@ variables would be awesome.

Unable to Post - Rundeck 2.6.2

The integrations failing with below error and I use Rundeck version 2.6.2

Unable to POST notification after 1 tries: success for execution 32 (succeeded): server response: 500 Server Error

Include Rundeck Options values

Hi,

Could it be possible to include the Job options selected and its values in the notification? For example, we have an option to select an app version number to be deployed, and it would be nice to see that in the notificaction.

Thanks,

Options with spaces not be posted to slack

If a user inputs an option with a space in it, no message is sent to slack. It looks like passing options cannot handle spaces.

Example:

option: -purpose
option value: this is my option value

The above option value will cause the slack webhook plugin to fail.

Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

Hello,

plugin is not working on our rundeck, version 2.6.9-1.

Here is the error:

2016-09-27 23:40:09,691 [quartzScheduler_Worker-27] ERROR grails.app.services.rundeck.services.NotificationService - Error sending notification: Notification{eventTrigger='onsuccess', type='SlackNotification', content='{"webhook_url":"https://hooks.slack.com/services/Obfuscatedstring"}'}: class com.bitplaces.rundeck.plugins.slack.SlackNotificationPluginException: Error putting data to Slack URL: [java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty].
com.bitplaces.rundeck.plugins.slack.SlackNotificationPluginException: Error putting data to Slack URL: [java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty].
at com.bitplaces.rundeck.plugins.slack.SlackNotificationPlugin.putRequestStream(SlackNotificationPlugin.java:221)
at com.bitplaces.rundeck.plugins.slack.SlackNotificationPlugin.invokeSlackAPIMethod(SlackNotificationPlugin.java:180)
at com.bitplaces.rundeck.plugins.slack.SlackNotificationPlugin.postNotification(SlackNotificationPlugin.java:117)
at rundeck.services.NotificationService.triggerPlugin(NotificationService.groovy:489)
at rundeck.services.NotificationService$_triggerJobNotification_closure5.doCall(NotificationService.groovy:351)
at rundeck.services.NotificationService.triggerJobNotification(NotificationService.groovy:146)
at rundeck.services.NotificationService$_triggerJobNotification_closure1.doCall(NotificationService.groovy:88)
at rundeck.services.NotificationService.triggerJobNotification(NotificationService.groovy:85)
at rundeck.services.ExecutionService$_saveExecutionState_closure59.doCall(ExecutionService.groovy:2157)
at rundeck.services.ExecutionService.saveExecutionState(ExecutionService.groovy:2062)
at rundeck.quartzjobs.ExecutionJob$_saveState_closure4.doCall(ExecutionJob.groovy:486)
at rundeck.quartzjobs.ExecutionJob.withRetry(ExecutionJob.groovy:424)
at rundeck.quartzjobs.ExecutionJob.saveState(ExecutionJob.groovy:496)
at rundeck.quartzjobs.ExecutionJob.execute_internal(ExecutionJob.groovy:146)
at rundeck.quartzjobs.ExecutionJob$_execute_closure1.doCall(ExecutionJob.groovy:74)
at com.codahale.metrics.Timer.time(Timer.java:99)
at rundeck.quartzjobs.ExecutionJob.execute(ExecutionJob.groovy:73)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
Caused by: javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
at com.bitplaces.rundeck.plugins.slack.SlackNotificationPlugin.putRequestStream(SlackNotificationPlugin.java:216)
... 18 more
Caused by: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
... 19 more
Caused by: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
at java.security.cert.PKIXParameters.setTrustAnchors(PKIXParameters.java:200)
at java.security.cert.PKIXParameters.(PKIXParameters.java:120)
at java.security.cert.PKIXBuilderParameters.(PKIXBuilderParameters.java:104)
... 19 more
'''

Thanks for ypur help

Question: Multi channel / conditional on rundeck value

Good morning,

We have tried the plugin and works like a charm, however there are two things we were unable to do and would love to know if anyone else had the same issue and found a workaround that can share.

First problem:
We need one job to notify to two channels.

Second problem:
We need one job to notify only if rundeck variable "environment" it's "production".

Any thoughts?

A crash occurred while sending a notification

A crash occurred while sending a notification
Version: rundeck-slack-incoming-webhook-plugin-0.11.jar

[2019-12-29 00:18:36.793] ERROR SlackNotificationPlugin --- [tp655013820-116] Got an exception from Freemarker: /etc/rundeck does not exist.

java.io.FileNotFoundException: /etc/rundeck does not exist.
	at freemarker.cache.FileTemplateLoader$1.run(FileTemplateLoader.java:124)
	at java.security.AccessController.doPrivileged(Native Method)
	at freemarker.cache.FileTemplateLoader.<init>(FileTemplateLoader.java:121)
	at freemarker.cache.FileTemplateLoader.<init>(FileTemplateLoader.java:107)
	at com.bitplaces.rundeck.plugins.slack.SlackNotificationPlugin.<init>(SlackNotificationPlugin.java:145)
	at sun.reflect.GeneratedConstructorAccessor506.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at com.dtolabs.rundeck.core.plugins.BasePluggableProviderService.createProviderInstanceFromType(BasePluggableProviderService.java:106)
	at com.dtolabs.rundeck.core.plugins.BasePluggableProviderService.createProviderInstance(BasePluggableProviderService.java:59)
	at com.dtolabs.rundeck.core.plugins.JarPluginProviderLoader.createProviderForClass(JarPluginProviderLoader.java:325)
	at com.dtolabs.rundeck.core.plugins.JarPluginProviderLoader.load(JarPluginProviderLoader.java:194)
	at com.dtolabs.rundeck.core.plugins.PluggableService.loadWithLoader(PluggableService.java:58)
	at com.dtolabs.rundeck.core.plugins.PluginManagerService.loadProvider(PluginManagerService.java:146)
	at com.dtolabs.rundeck.core.plugins.BasePluggableProviderService.providerOfType(BasePluggableProviderService.java:75)
	at com.dtolabs.rundeck.core.common.ProviderService$providerOfType$3.call(Unknown Source)
	at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
	at com.dtolabs.rundeck.core.common.ProviderService$providerOfType$3.call(Unknown Source)
	at com.dtolabs.rundeck.server.plugins.RundeckPluginRegistry$_listPluginDescriptors_closure8.doCall(RundeckPluginRegistry.groovy:496)
	at sun.reflect.GeneratedMethodAccessor444.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:98)
	at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
	at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:264)
	at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034)
	at groovy.lang.Closure.call(Closure.java:418)
	at groovy.lang.Closure.call(Closure.java:434)
	at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2125)
	at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2110)
	at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2151)
	at org.codehaus.groovy.runtime.dgm$163.invoke(Unknown Source)
	at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:274)
	at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:56)
	at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:128)
	at com.dtolabs.rundeck.server.plugins.RundeckPluginRegistry.listPluginDescriptors(RundeckPluginRegistry.groovy:493)
	at rundeck.services.PluginService.listPlugins(PluginService.groovy:442)
	at rundeck.services.PluginService$listPlugins.call(Unknown Source)
	at rundeck.services.NotificationService.listNotificationPlugins(NotificationService.groovy:118)
	at rundeck.services.NotificationService$listNotificationPlugins.call(Unknown Source)
	at rundeck.controllers.ScheduledExecutionController.show(ScheduledExecutionController.groovy:487)
	at org.grails.core.DefaultGrailsControllerClass$MethodHandleInvoker.invoke(DefaultGrailsControllerClass.java:223)
	at org.grails.core.DefaultGrailsControllerClass.invoke(DefaultGrailsControllerClass.java:188)
	at org.grails.web.mapping.mvc.UrlMappingsInfoHandlerAdapter.handle(UrlMappingsInfoHandlerAdapter.groovy:90)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:852)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604)
	at org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:226)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1591)
	at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1591)
	at javax.servlet.FilterChain$doFilter.call(Unknown Source)
	at org.rundeck.grails.plugins.securityheaders.RundeckSecurityHeadersFilter.doFilterInternal(RundeckSecurityHeadersFilter.groovy:67)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1591)
	at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:111)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1591)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114)
	at grails.plugin.springsecurity.web.UpdateRequestContextHolderExceptionTranslationFilter.doFilter(UpdateRequestContextHolderExceptionTranslationFilter.groovy:64)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
	at grails.plugin.springsecurity.web.filter.GrailsHttpPutFormContentFilter.doFilterInternal(GrailsHttpPutFormContentFilter.groovy:54)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
	at grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.groovy:54)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
	at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:158)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
	at grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.groovy:64)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
	at grails.plugin.springsecurity.web.SecurityRequestHolderFilter.doFilter(SecurityRequestHolderFilter.groovy:58)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331)
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1591)
	at org.grails.web.servlet.mvc.GrailsWebRequestFilter.doFilterInternal(GrailsWebRequestFilter.java:77)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1591)
	at org.grails.web.filters.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:67)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1591)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1591)
	at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1591)
	at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:103)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1591)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:542)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
	at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:536)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1581)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1307)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:482)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1549)
	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1204)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
	at org.eclipse.jetty.server.Server.handle(Server.java:494)
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:374)
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:268)
	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
	at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:367)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:782)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:918)
	at java.lang.Thread.run(Thread.java:748)

Webhook field is not editable

After I add the plugin, and I select the "Slack Incoming WebHook," the textfield is not editable, i.e. I can't copy a URL into it.

Have you seen this problem? Do you know what might be happening?

image

Cannot edit workflow

  • reproduction procedure
      1. enable slack send notification on failure
      1. save
      1. edit workflow, and save, then got error follows
  • Your server environment.
    • use latest(2.6.7) jordan/rundeck container on AWS Elasticbeanstalk
  • Software and plugin versions, java environment.
    • Slack plugin(v0.5.dev)
  • Other enabled plugins on rundeck.
    • EC2 plugin
  • Log: rundeck/service.log
object references an unsaved transient instance - save the transient instance before flushing: rundeck.Workflow

error detail

Request: /project/xxxxxxx/job/update/8e1c0439-ed70-41f1-b18d-66e18ff8063f?loglevel=INFO&notifyFailureRecipients=&_notifySuccessAttach=&crontab.month._MAY=&crontab=%5Bmonth._MAY%3A%2C+month%3A%5B_MAY%3A%2C+_MAR%3A%2C+_APR%3A%2C+_DEC%3A%2C+_SEP%3A%2C+_FEB%3A%2C+_AUG%3A%2C+_OCT%3A%2C+_JAN%3A%2C+_JUN%3A%2C+_NOV%3A%2C+_JUL%3A%5D%2C+dayOfWeek._SAT%3A%2C+dayOfWeek%3A%5B_SAT%3A%2C+_FRI%3A%2C+_TUE%3A%2C+_SUN%3A%2C+_WED%3A%2C+_THU%3A%2C+_MON%3A%5D%2C+month._MAR%3A%2C+month._APR%3A%2C+dayOfWeek._FRI%3A%2C+month._DEC%3A%2C+dayOfWeek._TUE%3A%2C+dayOfWeek._SUN%3A%2C+month._SEP%3A%2C+month._FEB%3A%2C+month._AUG%3A%2C+month._OCT%3A%2C+dayOfWeek._WED%3A%2C+dayOfWeek._THU%3A%2C+dayOfWeek._MON%3A%2C+month._JAN%3A%2C+month._JUN%3A%2C+month._NOV%3A%2C+month._JUL%3A%5D&_notifyOnstartUrl=&crontab.dayOfWeek._SAT=&crontab.month._MAR=&nodeRankAttribute=&_everyDayOfWeek=&notifyPlugin.onfailure.SlackNotification.config.webhook_url=https%3A%2F%2Fhooks.slack.com%2Fservices%2Fxxxxxxxxx&notifyPlugin=%5Bonfailure.SlackNotification.config.webhook_url%3Ahttps%3A%2F%2Fhooks.slack.com%2Fservices%2FTxxxxxxxxx%2C+onfailure%3A%5BSlackNotification.config.webhook_url%3Ahttps%3A%2F%2Fhooks.slack.com%2Fservices%2F2FTxxxxxxxxx%2C+SlackNotification%3A%5Bconfig.webhook_url%3Ahttps%3A%2F%2Fhooks.slack.com%2Fservices%2F2FTxxxxxxxxx%2C+config%3A%5Bwebhook_url%3Ahttps%3A%2F%2Fhooks.slack.com%2Fservices%2FT2FTxxxxxxxxx%5D%5D%2C+type%3ASlackNotification%2C+enabled.SlackNotification%3Atrue%2C+enabled%3A%5BSlackNotification%3Atrue%2C+_SlackNotification%3A%5D%2C+enabled._SlackNotification%3A%5D%2C+onstart.SlackNotification.config.webhook_url%3A%2C+onstart%3A%5BSlackNotification.config.webhook_url%3A%2C+SlackNotification%3A%5Bconfig.webhook_url%3A%2C+config%3A%5Bwebhook_url%3A%5D%5D%2C+type%3ASlackNotification%2C+enabled._SlackNotification%3A%2C+enabled%3A%5B_SlackNotification%3A%5D%5D%2C+onstart.type%3ASlackNotification%2C+onfailure.type%3ASlackNotification%2C+onstart.enabled._SlackNotification%3A%2C+onfailure.enabled.SlackNotification%3Atrue%2C+onfailure.enabled._SlackNotification%3A%2C+onsuccess.SlackNotification.config.webhook_url%3A%2C+onsuccess%3A%5BSlackNotification.config.webhook_url%3A%2C+SlackNotification%3A%5Bconfig.webhook_url%3A%2C+config%3A%5Bwebhook_url%3A%5D%5D%2C+type%3ASlackNotification%2C+enabled._SlackNotification%3A%2C+enabled%3A%5B_SlackNotification%3A%5D%5D%2C+onsuccess.type%3ASlackNotification%2C+onsuccess.enabled._SlackNotification%3A%5D&notifyPlugin.onstart.SlackNotification.config.webhook_url=&notifyStartRecipients=&orchestratorPlugin.subset.config.count=1&orchestratorPlugin=%5Bsubset.config.count%3A1%2C+subset%3A%5Bconfig.count%3A1%2C+config%3A%5Bcount%3A1%5D%5D%2C+maxPercentage.config.percent%3A33%2C+maxPercentage%3A%5Bconfig.percent%3A33%2C+config%3A%5Bpercent%3A33%5D%5D%5D&crontab.month._APR=&dayOfMonth=%3F&_notifyOnfailureEmail=&formInput=true&orig.notifyPlugin.onfailure.SlackNotification.config.webhook_url=https%3A%2F%2Fhooks.slack.com%2Fservices%2Fxxxxxx&orig=%5BnotifyPlugin.onfailure.SlackNotification.config.webhook_url%3Ahttps%3A%2F%2Fhooks.slack.com%2Fservices%2FTxxxxx%2C+notifyPlugin%3A%5Bonfailure.SlackNotification.config.webhook_url%3Ahttps%3A%2F%2Fhooks.slack.com%2Fservices%2Fxxxxxx%2C+onfailure%3A%5BSlackNotification.config.webhook_url%3Ahttps%3A%2F%2Fhooks.slack.com%2Fservices%2Fxxxxxx%2C+SlackNotification%3A%5Bconfig.webhook_url%3Ahttps%3A%2F%2Fhooks.slack.com%2Fservices%2xxxxx%2C+config%3A%5Bwebhook_url%3Ahttps%3A%2F%2Fhooks.slack.com%2Fservices%2Fxxxxx%5D%5D%5D%2C+onsuccess.SlackNotification.config.webhook_url%3A%2C+onsuccess%3A%5BSlackNotification.config.webhook_url%3A%2C+SlackNotification%3A%5Bconfig.webhook_url%3A%2C+config%3A%5Bwebhook_url%3A%5D%5D%5D%2C+onstart.SlackNotification.config.webhook_url%3A%2C+onstart%3A%5BSlackNotification.config.webhook_url%3A%2C+SlackNotification%3A%5Bconfig.webhook_url%3A%2C+config%3A%5Bwebhook_url%3A%5D%5D%5D%5D%2C+orchestratorPlugin.maxPercentage.config.percent%3A%2C+orchestratorPlugin%3A%5BmaxPercentage.config.percent%3A%2C+maxPercentage%3A%5Bconfig.percent%3A%2C+config%3A%5Bpercent%3A%5D%5D%2C+subset.config.count%3A%2C+subset%3A%5Bconfig.count%3A%2C+config%3A%5Bcount%3A%5D%5D%5D%2C+notifyPlugin.onsuccess.SlackNotification.config.webhook_url%3A%2C+notifyPlugin.onstart.SlackNotification.config.webhook_url%3A%2C+orchestratorPlugin.subset.config.count%3A%5D&_sessionwf=true&doNodedispatch=true&workflow.keepgoing=false&workflow=%5Bkeepgoing%3Afalse%2C+strategy%3Anode-first%5D&crontab.dayOfWeek._FRI=&crontab.month._DEC=&orig.orchestratorPlugin.maxPercentage.config.percent=&crontabString=0+00+00+%3F+*+*+*&crontab.dayOfWeek._TUE=&crontab.dayOfWeek._SUN=&workflow.strategy=node-first&crontab.month._SEP=&SYNCHRONIZER_TOKEN=xxxxxxxx&notifyPlugin.onstart.type=SlackNotification&notifyPlugin.onfailure.type=SlackNotification&crontab.month._FEB=&_sessionopts=true&nodeExcludePrecedence=true&hour=00&SYNCHRONIZER_URI=%2Fproject%2Fxxxxx-api-dev%2Fjob%2Fedit%2F8e1c0439-ed70-41f1-b18d-66e18ff8063f&orchestratorPlugin.maxPercentage.config.percent=33&logOutputThreshold=&_everyMonth=&crontab.month._AUG=&crontab.month._OCT=&nodeThreadcount=1&retry=&scheduleEnabled=true&nodeRankOrderAscending=true&logOutputThresholdStatus=&notifyPlugin.onstart.enabled._SlackNotification=&notifySuccessUrl=&jobName=import+es3&notifyPlugin.onfailure.enabled.SlackNotification=true&description=&_notifyOnfailureUrl=&notified=true&crontab.dayOfWeek._WED=&orig.notifyPlugin.onsuccess.SlackNotification.config.webhook_url=&nodesSelectedByDefault=true&nodeKeepgoing=false&notifyFailureUrl=&everyDayOfWeek=true&scheduled=false&notifyStartSubject=&crontab.dayOfWeek._THU=&orig.notifyPlugin.onstart.SlackNotification.config.webhook_url=&notifyStartUrl=&filter=tags%3Aec2&everyMonth=true&notifySuccessRecipients=&logOutputThresholdAction=halt&notifyPlugin.onfailure.enabled._SlackNotification=&orig.orchestratorPlugin.subset.config.count=&useCrontabString=false&multipleExecutions=false&minute=00&crontab.dayOfWeek._MON=&notifyPlugin.onsuccess.SlackNotification.config.webhook_url=&notifyFailureSubject=&notifyPlugin.onsuccess.type=SlackNotification&_notifyOnstartEmail=&crontab.month._JAN=&groupPath=&_action_Update=Save&_notifyOnsuccessEmail=&orchestratorId=&crontab.month._JUN=&crontab.month._NOV=&_notifyOnsuccessUrl=&notifyPlugin.onsuccess.enabled._SlackNotification=&_notifyFailureAttach=&executionEnabled=true&notifySuccessSubject=&crontab.month._JUL=&timeout=&_sessionEditWFObject=Workflow%3A%28threadcount%3A1%29%7B+%5Bcommand%28+exec%3A+sudo+docker+pull+xxxxx%2Fxxxxx-api+keepgoingOnSuccess%3A+false%29%2C+command%28+exec%3A+docker+run+--rm+-t+xxxxx%2Fxxxxx-api+python+%2Fusr%2Fsrc%2Fapp%2Fexperimental%2Fimport_es3.py+10.81.10.177+keepgoingOnSuccess%3A+false%29%5D+%7D&notifications=%7BeventTrigger%3Donfailure%2C+type%3DSlackNotification%2C+configuration%3D%5Bwebhook_url%3Ahttps%3A%2F%2Fhooks.slack.com%2Fservices%2Fxxxxxxx Message: object references an unsaved transient instance - save the transient instance before flushing: rundeck.Workflow 
Caused by: object references an unsaved transient instance - save the transient instance before flushing: rundeck.Workflow 
Class: ScheduledExecutionController 
At Line: [1733] 
Code Snippet:

stack trace

org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: rundeck.Workflow
    at rundeck.services.FrameworkService.getFrameworkProject(FrameworkService.groovy:204)
    at rundeck.services.FrameworkService.getFrameworkPropertyResolver(FrameworkService.groovy:307)
    at rundeck.services.NotificationService.validatePluginConfig(NotificationService.groovy:66)
    at rundeck.services.ScheduledExecutionService.validatePluginNotification(ScheduledExecutionService.groovy:1710)
    at rundeck.services.ScheduledExecutionService$__updateNotificationsData_closure47.doCall(ScheduledExecutionService.groovy:1880)
    at rundeck.services.ScheduledExecutionService._updateNotificationsData(ScheduledExecutionService.groovy:1854)
    at rundeck.services.ScheduledExecutionService._doupdate(ScheduledExecutionService.groovy:1623)
    at rundeck.controllers.ScheduledExecutionController$_update_closure51.doCall(ScheduledExecutionController.groovy:1746)
    at rundeck.controllers.ScheduledExecutionController.update(ScheduledExecutionController.groovy:1733)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:565)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1360)
    at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(PageFragmentCachingFilter.java:198)
    at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter.java:63)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:477)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:539)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1031)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:406)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:965)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
    at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:288)
    at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:115)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
    at com.codahale.metrics.servlet.AbstractInstrumentedFilter.doFilter(AbstractInstrumentedFilter.java:97)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:477)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:486)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1031)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:406)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:965)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111)
    at org.eclipse.jetty.server.Server.handle(Server.java:349)
    at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:449)
    at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:925)
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:857)
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:230)
    at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:76)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:609)
    at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:45)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:599)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:534)
    at java.lang.Thread.run(Thread.java:745)

framework property

First, thanks for this. I couldn't get the original plugin that you forked working at all.

Setting framework.plugin.Notification.SlackNotification.webhook_url in framework.properties does not seem to work. Setting it on the job works perfectly and I'll continue to use that, but it's just a bit annoying having to go copy the url from somewhere else every time.

When I look at the plugin in the plugin's section it shows

Slack Incoming WebHook URL
configure project: project.plugin.Notification.SlackNotification.webhook_url=value
configure framework: framework.plugin.Notification.SlackNotification.webhook_url=value

I set the url in the framework.properties, but the job notification section does not seem to pre-populate, which is what I expected.

I didn't test project properties.

Cannot get logging to work

I am trying to make a few tweaks (eg, notify only under some conditions). I can get the slack to post, but I can't get any logs out of the plugin. I even added this as the first line in postNotifications()

        SlackNotificationPlugin.LOG.info("SLACK Notify...");

And I get no logs from the plugin.

Does anybody know if something else needs to be enabled to get logs?

Templates do not appear to function

Appears either something happened in 3.0, or there is a problem in the templates.

The following has evaluated to null or missing:
==> executionData.dateEndedW3c [in template "slack-template-success.ftl" at line 35, column 29]
==> ${execution.succeededNodeListString} [in template "slack-template-success.ftl" at line 55, column 27]]

Plugin does not work with docker container

I am using the official docker image for rundeck, which does not create the same directory structure as the plugin expects. I have a workaround right now, but the hard-coded directory path throws.

This line throws when attempting to send a notification because the directory doesn't exist:

final TemplateLoader[] loaders = {
    new FileTemplateLoader(new File("/etc/rundeck")), // Throws because dir doesn't exist
    new ClassTemplateLoader(SlackNotificationPlugin.class, "/templates")
};

The log can be viewed here if you would like; it is mostly:

2019-02-18 06:25:01.857 ERROR --- [eduler_Worker-3] c.b.r.p.slack.SlackNotificationPlugin    : Got an exception from Freemarker: /etc/rundeck does not exist.

java.io.FileNotFoundException: /etc/rundeck does not exist.
	at freemarker.cache.FileTemplateLoader$1.run(FileTemplateLoader.java:124)
	at java.security.AccessController.doPrivileged(Native Method)
	at freemarker.cache.FileTemplateLoader.<init>(FileTemplateLoader.java:121)
	at freemarker.cache.FileTemplateLoader.<init>(FileTemplateLoader.java:107)
	at com.bitplaces.rundeck.plugins.slack.SlackNotificationPlugin.<init>(SlackNotificationPlugin.java:121)
	at sun.reflect.GeneratedConstructorAccessor215.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)

Workaround:

There is an /etc folder in /home/rundeck on the image, so in my Dockerfile where I am loading the plugin I created /home/rundeck/etc/rundeck and symlinked it to /etc/rundeck, and this solved the issue.

USER root
...
RUN mkdir /home/rundeck/etc/rundeck \
      && chown rundeck:rundeck /home/rundeck/etc/rundeck \
      && ln -s /home/rundeck/etc/rundeck /etc/rundeck

edit: it occurs to me that I can probably just make the actual directory, but at any rate, the directory doesn't exist in the docker image.

If you would like I can submit a PR to add this info the README. Otherwise it will probably take me a reallllly long time to figure out a PR to fix the issue.

Thanks for the work on this, it's a really useful plugin!

Send notification from rundeck behind proxy with authentication

Hi,

Could anybody help me? I am trying to send a notification from rundeck that sits behind a proxy with authentication. Tried to add:

-Dhttps.proxyHost=example.proxy.com
-Dhttps.proxyPort=8080
-Dhttps.proxyUser=user
-Dhttps.proxyPassword=password

to

RDECK_JVM_SETTINGS=

No luck :/

2018-12-07 17:40:30.530 ERROR --- [eduler_Worker-1] rundeck.services.NotificationService     : Error sending notification: Notification{eventTrigger='onsuccess', type='SlackNotification', content='{"slack_template":"","webhook_url_override":""}'}: class com.bitplaces.rundeck.plugins.slack.SlackNotificationPluginException: Error putting data to Slack URL: [Unable to tunnel through proxy. Proxy returns "HTTP/1.0 407 Proxy Authentication Required"].

com.bitplaces.rundeck.plugins.slack.SlackNotificationPluginException: Error putting data to Slack URL: [Unable to tunnel through proxy. Proxy returns "HTTP/1.0 407 Proxy Authentication Required"].

Thanks

Error putting data to Slack URL

Hello,

I found this plugin and thought it would be awesome to use with our Mattermost server. I'm currently running Mattermost 3.2.0, Rundeck 2.6.8, and 0.6 of this plugin. I setup a test webhook and pointed a test Rundeck job at it. But I'm receiving an error

ERROR NotificationService: Error sending notification: Notification{eventTrigger='onsuccess', type='SlackNotification', content='{"webhook_url":"https://chat.example.com/hooks/oin3o77wf7bcifex39arjnw6uo"}'}: class com.bitplaces.rundeck.plugins.slack.SlackNotificationPluginException: Error putting data to Slack URL: [Connection reset].

I thought perhaps there was a network issue, but running a simple curl script that posts to that URL from the same Rundeck server works just fine.

Can someone offer a suggestion as to where I should be looking to perhaps troubleshoot this issue?

Thank you

Allow supplying custom template

With the same logic currently in use for the webhook the plugin should allow supplying a custom template at either the job level or the project level.

If none are specified then the current defaults can be used.

Webhook configuration

Hi Folks

I have copied the jar, I have added slack webhook url to below mentioned parameter.
"Slack Incoming WebHook Sends Rundeck Notifications to Slack"

Job is running fine, but I don't see any notifications on slack. Is there anything I am missing here ?

Thank you in advance

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.