LoginSignup
0
0

More than 5 years have passed since last update.

Rundeck組み込みDBから外部DBを利用するように変更

Posted at

環境

OS : Red Hat Enterprise Linux Server release 7.3
Rundeck : 2.9.3
DB : Oracle Database 11g

前提

DBにユーザが作成済であること

jdbcDriverのインストール

jdbcDriverのインストール
ojdbc14.jar を入手する
$ sudo cp ./ojdbc14.jar /var/lib/rundeck/exp/webapp/WEB-INF/lib
権限変更
$ sudo chown rundeck:rundeck ojdbc14.jar

job定義export

Rundeck停止

$ sudo systemctl stop rundeckd.service

接続先変更

組み込みDBから外部DBに変更する
$ sudo view /etc/rundeck/rundeck-config.groovy

rundeck-config.groovy
dataSource {
     url = "jdbc:oracle:thin:@localhost:1521:ORCL"
     driverClassName = "oracle.jdbc.driver.OracleDriver"
     username = "rundeckuser"
     password = "password"
     dialect = "org.hibernate.dialect.Oracle10gDialect"
}

rundeck起動

$ sudo systemctl start rundeckd.service

(起動時にエラーが出る場合)

Caused by: java.sql.SQLException: ORA-00942: table or view does not exist
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:113)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
        at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:754)
        at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:219)
        at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:813)
        at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1051)
        at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:854)
        at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1156)
        at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3415)
        at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3460)
        ... 25 more

rundeck-oracle-dialect.jar
を落として配置

$ cp ./rundeck-oracle-dialect.jar /var/lib/rundeck/exp/webapp/WEB-INF/lib
$ sudo chown rundeck:rundeck /var/lib/rundeck/exp/webapp/WEB-INF/lib/rundeck-oracle-dialect.jar

設定修正
$ sudo view /etc/rundeck/rundeck-config.groovy

rundeck-config.groovy
dataSource {
     url = "jdbc:oracle:thin:@localhost:1521:ORCL"
     driverClassName = "oracle.jdbc.driver.OracleDriver"
     username = "rundeckuser"
     password = "password"
     // dialect = "org.hibernate.dialect.Oracle10gDialect"
     dialect = "com.rundeck.hibernate.RundeckOracleDialect"  こちらに変更
}

rundeck再起動

$ sudo systemctl restart rundeckd.service

(ログイン時にエラーが出る場合)

An Error Occurred
getGeneratedKeys() support is not enabled
rundeckerror.png

2018-04-20 06:35:03,541 [qtp81628611-18] ERROR org.hibernate.AssertionFailure - HHH000099: an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session): org.hibernate.AssertionFailure: getGeneratedKeys() support is not enabled
2018-04-20 06:35:03,576 [qtp81628611-18] ERROR org.codehaus.groovy.grails.web.errors.GrailsExceptionResolver - AssertionFailure occurred when processing request: [GET] /menu/jobs
getGeneratedKeys() support is not enabled. Stacktrace follows:
org.hibernate.AssertionFailure: getGeneratedKeys() support is not enabled
        at rundeck.services.UserService.findOrCreateUser(UserService.groovy:31)
        at rundeck.controllers.MenuController.jobs(MenuController.groovy:253)
        at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:696)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1515)
        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:1486)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1486)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1486)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1486)
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:519)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:138)
        at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:582)
        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.Dispatcher.forward(Dispatcher.java:261)
        at org.eclipse.jetty.server.Dispatcher.forward(Dispatcher.java:101)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1486)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1486)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1486)
        at com.codahale.metrics.servlet.AbstractInstrumentedFilter.doFilter(AbstractInstrumentedFilter.java:97)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1486)
        at com.dtolabs.rundeck.server.filters.AuthFilter.doFilter(AuthFilter.java:74)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1486)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1486)
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:519)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:138)
        at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:529)
        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)

設定修正
$ sudo view /etc/rundeck/rundeck-config.groovy

rundeck-config.groovy
dataSource {
     url = "jdbc:oracle:thin:@localhost:1521:ORCL"
     driverClassName = "oracle.jdbc.driver.OracleDriver"
     username = "rundeckuser"
     password = "password"
     // dialect = "org.hibernate.dialect.Oracle10gDialect"
     dialect = "com.rundeck.hibernate.RundeckOracleDialect"
}
hibernate.jdbc.use_get_generated_keys = "true"  追加

rundeck再起動

$ sudo systemctl restart rundeckd.service

ログイン

job定義import

起動させて様子を見る...

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0