{"action":"created","issue":{"url":"https://api.github.com/repos/rundeck/rundeck/issues/3761","repository_url":"https://api.github.com/repos/rundeck/rundeck","labels_url":"https://api.github.com/repos/rundeck/rundeck/issues/3761/labels{/name}","comments_url":"https://api.github.com/repos/rundeck/rundeck/issues/3761/comments","events_url":"https://api.github.com/repos/rundeck/rundeck/issues/3761/events","html_url":"https://github.com/rundeck/rundeck/issues/3761","id":345894139,"node_id":"MDU6SXNzdWUzNDU4OTQxMzk=","number":3761,"title":"IOException loading spring/resources.groovy \"expected [option key], found [null]\"","user":{"login":"sparr","id":121299,"node_id":"MDQ6VXNlcjEyMTI5OQ==","avatar_url":"https://avatars1.githubusercontent.com/u/121299?v=4","gravatar_id":"","url":"https://api.github.com/users/sparr","html_url":"https://github.com/sparr","followers_url":"https://api.github.com/users/sparr/followers","following_url":"https://api.github.com/users/sparr/following{/other_user}","gists_url":"https://api.github.com/users/sparr/gists{/gist_id}","starred_url":"https://api.github.com/users/sparr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sparr/subscriptions","organizations_url":"https://api.github.com/users/sparr/orgs","repos_url":"https://api.github.com/users/sparr/repos","events_url":"https://api.github.com/users/sparr/events{/privacy}","received_events_url":"https://api.github.com/users/sparr/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2018-07-30T19:08:42Z","updated_at":"2018-07-30T19:52:51Z","closed_at":null,"author_association":"NONE","body":"**Describe the bug**\r\nLaunching rundeck fails, with an exception logged: ```org.grails.core.exceptions.GrailsConfigurationException: Error loading spring/resources.groovy file: java.io.IOException: Configuration Error:\r\n\tLine 6: expected [option key], found [null]```\r\n\r\n**My Rundeck detail**\r\n\r\n* Rundeck version: 3.0.0 upgrading from a partial upgrade from 2.6.9 to 2.10.8\r\n* install type: rpm via puppet-rundeck\r\n* OS Name/version: Amazon Linux AMI release 2017.09\r\n* DB Type/version: H2\r\n\r\n**To Reproduce**\r\nSteps to reproduce the behavior:\r\n1. `service rundeckd start`\r\n2. `tail /var/log/rundeck/service.log`\r\n3. See error with stacktrace\r\n\r\n**Expected behavior**\r\nRundeck starts normally\r\n\r\n**Additional context**\r\nstack trace:\r\n```\r\norg.grails.core.exceptions.GrailsConfigurationException: Error loading spring/resources.groovy file: java.io.IOException: Configuration Error:\r\n\tLine 6: expected [option key], found [null]\r\n\tat grails.boot.config.GrailsApplicationPostProcessor.postProcessBeanDefinitionRegistry(GrailsApplicationPostProcessor.groovy:184)\r\n\tat org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:272)\r\n\tat org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:122)\r\n\tat org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:687)\r\n\tat org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:525)\r\n\tat org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)\r\n\tat org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)\r\n\tat org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)\r\n\tat org.springframework.boot.SpringApplication.run(SpringApplication.java:303)\r\n\tat grails.boot.GrailsApp.run(GrailsApp.groovy:84)\r\n\tat grails.boot.GrailsApp.run(GrailsApp.groovy:393)\r\n\tat grails.boot.GrailsApp.run(GrailsApp.groovy:380)\r\n\tat grails.boot.GrailsApp$run.call(Unknown Source)\r\n\tat org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)\r\n\tat org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)\r\n\tat org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:136)\r\n\tat rundeckapp.Application.main(Application.groovy:27)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)\r\n\tat org.springframework.boot.loader.Launcher.launch(Launcher.java:87)\r\n\tat org.springframework.boot.loader.Launcher.launch(Launcher.java:50)\r\n\tat org.springframework.boot.loader.WarLauncher.main(WarLauncher.java:59)\r\nCaused by: java.lang.SecurityException: java.io.IOException: Configuration Error:\r\n\tLine 6: expected [option key], found [null]\r\n\tat sun.security.provider.ConfigFile$Spi.<init>(ConfigFile.java:137)\r\n\tat sun.security.provider.ConfigFile.<init>(ConfigFile.java:102)\r\n\tat sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)\r\n\tat sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)\r\n\tat java.lang.reflect.Constructor.newInstance(Constructor.java:423)\r\n\tat java.lang.Class.newInstance(Class.java:442)\r\n\tat javax.security.auth.login.Configuration$2.run(Configuration.java:255)\r\n\tat javax.security.auth.login.Configuration$2.run(Configuration.java:247)\r\n\tat java.security.AccessController.doPrivileged(Native Method)\r\n\tat javax.security.auth.login.Configuration.getConfiguration(Configuration.java:246)\r\n\tat javax.security.auth.login.Configuration$getConfiguration.call(Unknown Source)\r\n\tat org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)\r\n\tat org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)\r\n\tat org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120)\r\n\tat resources$_run_closure1$_closure50.doCall(resources.groovy:453)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:98)\r\n\tat groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)\r\n\tat org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:264)\r\n\tat groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034)\r\n\tat groovy.lang.Closure.call(Closure.java:418)\r\n\tat grails.spring.BeanBuilder.invokeBeanDefiningMethod(BeanBuilder.java:708)\r\n\tat grails.spring.BeanBuilder.invokeMethod(BeanBuilder.java:565)\r\n\tat org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeOnDelegationObjects(ClosureMetaClass.java:414)\r\n\tat org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:338)\r\n\tat groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034)\r\n\tat org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.callCurrent(PogoMetaClassSite.java:68)\r\n\tat org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:51)\r\n\tat org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:157)\r\n\tat org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:177)\r\n\tat resources$_run_closure1.doCall(resources.groovy:452)\r\n\tat resources$_run_closure1.doCall(resources.groovy)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n\tat java.lang.reflect.Method.invoke(Method.java:498)\r\n\tat org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:98)\r\n\tat groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)\r\n\tat org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:264)\r\n\tat groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1034)\r\n\tat groovy.lang.Closure.call(Closure.java:418)\r\n\tat groovy.lang.Closure.call(Closure.java:412)\r\n\tat grails.spring.BeanBuilder.invokeBeanDefiningClosure(BeanBuilder.java:759)\r\n\tat grails.spring.BeanBuilder.beans(BeanBuilder.java:588)\r\n\tat org.grails.spring.RuntimeSpringConfigUtilities.reloadSpringResourcesConfig(RuntimeSpringConfigUtilities.java:103)\r\n\tat grails.boot.config.GrailsApplicationPostProcessor.postProcessBeanDefinitionRegistry(GrailsApplicationPostProcessor.groovy:181)\r\n\t... 24 common frames omitted\r\nCaused by: java.io.IOException: Configuration Error:\r\n\tLine 6: expected [option key], found [null]\r\n\tat sun.security.provider.ConfigFile$Spi.ioException(ConfigFile.java:666)\r\n\tat sun.security.provider.ConfigFile$Spi.match(ConfigFile.java:579)\r\n\tat sun.security.provider.ConfigFile$Spi.parseLoginEntry(ConfigFile.java:477)\r\n\tat sun.security.provider.ConfigFile$Spi.readConfig(ConfigFile.java:427)\r\n\tat sun.security.provider.ConfigFile$Spi.init(ConfigFile.java:329)\r\n\tat sun.security.provider.ConfigFile$Spi.init(ConfigFile.java:271)\r\n\tat sun.security.provider.ConfigFile$Spi.<init>(ConfigFile.java:135)\r\n\t... 73 common frames omitted\r\n```\r\n\r\n/etc/sysconfig/rundeckd:\r\n```\r\nRDECK_BASE=/var/lib/rundeck\r\nRDECK_CONFIG=/etc/rundeck\r\nRDECK_CONFIG_FILE=/etc/rundeck/rundeck-config.groovy\r\nRDECK_INSTALL=/var/lib/rundeck\r\nJAAS_CONF=jaas-auth.conf\r\nLOGIN_MODULE=authentication\r\nJAVA_CMD=java\r\nRDECK_JVM_SETTINGS=\"-Xmx1024m -Xms256m -server -Drundeck.jetty.connector.forwarded=true\"\r\n```\r\n\r\n/etc/rundeck/rundeck-config.groovy:\r\n```\r\nloglevel.default = \"INFO\"\r\nrdeck.base = \"/var/lib/rundeck\"\r\nrss.enabled = \"false\"\r\n\r\nrundeck.security.useHMacRequestTokens = true\r\nrundeck.security.apiCookieAccess.enabled = true\r\n\r\ndataSource {\r\n  dbCreate = \"update\"\r\n  url = \"jdbc:h2:file:/var/lib/rundeck/data/rundeckdb;MVCC=true\"\r\n}\r\n\r\ngrails.serverURL = \"https://rundeck.domain.com\"\r\nrundeck.clusterMode.enabled = \"false\"\r\n\r\nrundeck.projectsStorageType = \"filesystem\"\r\nquartz.props.threadPool.threadCount = \"10\"\r\n\r\nrundeck.storage.provider.\"1\".type = \"file\"\r\nrundeck.storage.provider.\"1\".config.baseDir = \"/var/lib/rundeck/var/storage\"\r\nrundeck.storage.provider.\"1\".path = \"/\"\r\n\r\nrundeck.security.authorization.preauthenticated.enabled = \"false\"\r\nrundeck.security.authorization.preauthenticated.attributeName = \"REMOTE_USER_GROUPS\"\r\nrundeck.security.authorization.preauthenticated.delimiter = \":\"\r\nrundeck.security.authorization.preauthenticated.userNameHeader = \"X-Forwarded-Uuid\"\r\nrundeck.security.authorization.preauthenticated.userRolesHeader = \"X-Forwarded-Roles\"\r\nrundeck.security.authorization.preauthenticated.redirectLogout = \"false\"\r\nrundeck.security.authorization.preauthenticated.redirectUrl = \"/oauth2/sign_in\"\r\n\r\nrundeck.log4j.config.file = \"/etc/rundeck/log4j.properties\"\r\n```\r\n\r\n/etc/rundeck/profile:\r\n```\r\n#########\r\n# Rundeck Profile sourced from /etc/rc.d/init.d/rundeckd\r\n#########\r\n#\r\n# NOTE: DO NOT MODIFY THIS FILE\r\n# It will be replaced when the package is upgraded and your changes will not be saved.\r\n#\r\n# ##################\r\n#\r\n# To override variables in this file, you can instead create a file at:\r\n#\r\n#     /etc/sysconfig/rundeckd\r\n#\r\n# which contains exports for any of the variables listed below. E.g.:\r\n#\r\n#    export RUNDECK_TEMPDIR=/path/to/tmpdir\r\n#\r\n# That file will be sourced before this one, allowing your exports to take precedence.\r\n#\r\n###############\r\n\r\nRDECK_INSTALL=\"${RDECK_INSTALL:-/var/lib/rundeck}\"\r\nRDECK_BASE=\"${RDECK_BASE:-/var/lib/rundeck}\"\r\nRDECK_CONFIG=\"${RDECK_CONFIG:-/etc/rundeck}\"\r\nRDECK_CONFIG_FILE=\"${RDECK_CONFIG_FILE:-$RDECK_CONFIG/rundeck-config.properties}\"\r\nRDECK_SERVER_BASE=\"${RDECK_SERVER_BASE:-$RDECK_BASE}\"\r\nRDECK_SERVER_CONFIG=\"${RDECK_SERVER_CONFIG:-$RDECK_CONFIG}\"\r\nRDECK_SERVER_DATA=\"${RDECK_SERVER_DATA:-$RDECK_BASE/data}\"\r\nRDECK_PROJECTS=\"${RDECK_PROJECTS:-$RDECK_BASE/projects}\"\r\nRUNDECK_TEMPDIR=\"${RUNDECK_TEMPDIR:-/tmp/rundeck}\"\r\nRUNDECK_WORKDIR=\"${RUNDECK_TEMPDIR:-$RDECK_BASE/work}\"\r\nRUNDECK_LOGDIR=\"${RUNDECK_LOGDIR:-$RDECK_BASE/logs}\"\r\nRDECK_JVM_SETTINGS=\"${RDECK_JVM_SETTINGS:- -Xmx1024m -Xms256m -XX:MaxMetaspaceSize=256m -server}\"\r\nRDECK_TRUSTSTORE_FILE=\"${RDECK_TRUSTSTORE_FILE:-$RDECK_CONFIG/ssl/truststore}\"\r\nRDECK_TRUSTSTORE_TYPE=\"${RDECK_TRUSTSTORE_TYPE:-jks}\"\r\nJAAS_CONF=\"${JAAS_CONF:-$RDECK_CONFIG/jaas-loginmodule.conf}\"\r\nLOGIN_MODULE=\"${LOGIN_MODULE:-RDpropertyfilelogin}\"\r\nRDECK_HTTP_PORT=${RDECK_HTTP_PORT:-4440}\r\nRDECK_HTTPS_PORT=${RDECK_HTTPS_PORT:-4443}\r\n\r\n\r\n# If no JAVA_CMD, try to find it in $JAVA_HOME\r\nif [ -z \"$JAVA_CMD\" ] && [ -n \"$JAVA_HOME\" ] && [ -x \"$JAVA_HOME/bin/java\" ] ; then\r\n  JAVA_CMD=$JAVA_HOME/bin/java\r\n  PATH=$PATH:$JAVA_HOME/bin\r\n  export JAVA_HOME\r\nelif [ -z \"$JAVA_CMD\" ] ; then\r\n  JAVA_CMD=java\r\nfi\r\n\r\n# build classpath without lone : that includes .\r\nfor jar in $(find $RDECK_INSTALL/cli -name '*.jar') ; do\r\n  CLI_CP=${CLI_CP:+$CLI_CP:}$jar\r\ndone\r\nfor war in $(find $RDECK_INSTALL/bootstrap -name '*.war') ; do\r\n  EXECUTABLE_WAR=$war\r\ndone\r\n\r\nRDECK_JVM=\"-Dloginmodule.conf.name=$JAAS_CONF \\\r\n\t   -Drundeck.jaaslogin=true \\\r\n           -Dloginmodule.name=$LOGIN_MODULE \\\r\n           -Drdeck.config=$RDECK_CONFIG \\\r\n           -Drundeck.server.configDir=$RDECK_SERVER_CONFIG \\\r\n           -Dserver.datastore.path=$RDECK_SERVER_DATA/rundeck \\\r\n           -Drundeck.server.serverDir=$RDECK_INSTALL \\\r\n           -Drdeck.projects=$RDECK_PROJECTS \\\r\n           -Drdeck.runlogs=$RUNDECK_LOGDIR \\\r\n           -Drundeck.config.location=$RDECK_CONFIG_FILE \\\r\n           -Djava.io.tmpdir=$RUNDECK_TEMPDIR \\\r\n           -Drundeck.server.workDir=$RUNDECK_WORKDIR \\\r\n           -Dserver.http.port=$RDECK_HTTP_PORT \\\r\n           -Drdeck.base=$RDECK_BASE\"\r\n#\r\n# Set min/max heap size\r\n#\r\nRDECK_JVM=\"$RDECK_JVM $RDECK_JVM_SETTINGS\"\r\n#\r\n# SSL Configuration - Uncomment the following to enable.  Check SSL.properties for details.\r\n#\r\nif [ -n \"$RUNDECK_WITH_SSL\" ] ; then\r\n  RDECK_SSL_OPTS=\"${RDECK_SSL_OPTS:- -Djavax.net.ssl.trustStore=$RDECK_TRUSTSTORE_FILE -Djavax.net.ssl.trustStoreType=$RDECK_TRUSTSTORE_TYPE -Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol}\"\r\n  RDECK_JVM=\"$RDECK_JVM -Drundeck.ssl.config=$RDECK_SERVER_CONFIG/ssl/ssl.properties -Dserver.https.port=${RDECK_HTTPS_PORT} ${RDECK_SSL_OPTS}\"\r\nfi\r\n\r\nunset JRE_HOME\r\n\r\numask 002\r\n\r\nrundeckd=\"$JAVA_CMD $RDECK_JVM $RDECK_JVM_OPTS -jar $EXECUTABLE_WAR --skipinstall\"\r\n```"},"comment":{"url":"https://api.github.com/repos/rundeck/rundeck/issues/comments/408988703","html_url":"https://github.com/rundeck/rundeck/issues/3761#issuecomment-408988703","issue_url":"https://api.github.com/repos/rundeck/rundeck/issues/3761","id":408988703,"node_id":"MDEyOklzc3VlQ29tbWVudDQwODk4ODcwMw==","user":{"login":"sjrd218","id":36643360,"node_id":"MDQ6VXNlcjM2NjQzMzYw","avatar_url":"https://avatars3.githubusercontent.com/u/36643360?v=4","gravatar_id":"","url":"https://api.github.com/users/sjrd218","html_url":"https://github.com/sjrd218","followers_url":"https://api.github.com/users/sjrd218/followers","following_url":"https://api.github.com/users/sjrd218/following{/other_user}","gists_url":"https://api.github.com/users/sjrd218/gists{/gist_id}","starred_url":"https://api.github.com/users/sjrd218/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sjrd218/subscriptions","organizations_url":"https://api.github.com/users/sjrd218/orgs","repos_url":"https://api.github.com/users/sjrd218/repos","events_url":"https://api.github.com/users/sjrd218/events{/privacy}","received_events_url":"https://api.github.com/users/sjrd218/received_events","type":"User","site_admin":false},"created_at":"2018-07-30T19:52:51Z","updated_at":"2018-07-30T19:52:51Z","author_association":"CONTRIBUTOR","body":"Could you upload a sanitized version of your `jaas-auth.conf`?"}}
{"actor":{"display_login":"sjrd218"}}