【问题标题】:Modify datasource IP addresses in WebSphere Application Server在 WebSphere Application Server 中修改数据源 IP 地址
【发布时间】:2016-03-08 23:44:47
【问题描述】:

我在 WebSphere Application Server (WAS) 中有近百个数据源,由于办公室搬迁,数据库服务器的 IP 已更改,我也需要更新我的 WAS 中的数据源 IP 地址。

考虑到通过管理控制台更新数百个 IP 容易出错。

有什么方法可以通过更新配置文件或运行脚本来进行更改?我的 WAS 版本是 7.0。

【问题讨论】:

    标签: ibm-was


    【解决方案1】:

    您应该能够使用 WAS 管理控制台的内置“命令辅助”来捕获简单的代码 sn-ps 以列出数据源并通过在 UI 中完成这些操作一次来更改它们。

    使用这些 sn-ps 并创建一个新的 jython 脚本来列出并更新所有这些。

    有关命令协助的更多信息:

    http://www.ibm.com/developerworks/websphere/library/techarticles/0812_rhodes/0812_rhodes.html

    wsadmin 脚本库:

    https://github.com/wsadminlib/wsadminlib

    【讨论】:

      【解决方案2】:

      您可以使用 wsadmin 脚本来实现此目的。 Covener 有一个正确的想法,即使用管理控制台的命令帮助手动进行一次更新(以获取代码),然后将其转储到您可以自动化的脚本中。

      基本思想是数据源下嵌套了一组属性,其中一个是 ip 地址。所以你想编写一个脚本来查询数据源,找到它的嵌套属性集,并遍历属性集以寻找要更新的 'ipAddress' 属性。

      这是一个更新“ipAddress”属性值的函数。

      import sys
      
      def updateDataSourceIP(dsName, newIP):
        ds = AdminConfig.getid('/Server:myServer/JDBCProvider:myProvider/DataSource:' + dsName + '/')
        propertySet = AdminConfig.showAttribute(ds, 'propertySet')
        propertyList = AdminConfig.list('J2EEResourceProperty', propertySet).splitlines()
        for prop in propertyList:
          print AdminConfig.showAttribute(prop, 'name')
          if (AdminConfig.showAttribute(prop, 'name') == 'ipAddress'):
            AdminConfig.modify(prop, '[[value '" + newIP + "']]')
        AdminConfig.save();
      
      # Call the function using command line args
      updateDataSourceIP(sys.argv[0], sys.argv[1])
      

      要运行此脚本,您可以从命令行调用以下命令:

      $WAS_HOME/bin/wsadmin.sh -lang jython -f /path/to/script.py myDataSource 127.0.0.1
      

      **免责声明:未经测试的脚本。我不知道我头顶上的“ipAddress”属性的名称,但是如果你运行一次它会打印出你的ds上的所有属性,所以你可以在那里得到它

      一些有用的链接:

      【讨论】:

        【解决方案3】:

        作为对 aguibert 脚本的改进,为了避免必须提供所有 100 个数据源名称并更新它以更正配置 ID 的包含路径,请考虑使用此脚本来更新所有数据源,而不管它们的范围如何重新定义。与往常一样,在开始之前备份您的配置,一旦您对脚本按预期工作感到满意,请将 AdminConfig.reset() 替换为 save()。请注意,如果您在配置中使用连接 URL,这些脚本可能无法正常工作。

        import sys
        
        def updateDataSourceIP(newIP):
          datasources = AdminConfig.getid('/DataSource:/').splitlines()
          for datasource in datasources:
            propertySet = AdminConfig.showAttribute(datasource, 'propertySet')
            propertyList = AdminConfig.list('J2EEResourceProperty', propertySet).splitlines()
            for prop in propertyList:
              if (AdminConfig.showAttribute(prop, 'name') == 'serverName'):
                oldip = AdminConfig.showAttribute(prop, 'value')
                print "Updating serverName attribute of datasource '" + datasource + "' from " + oldip + " to " + sys.argv[0]
                AdminConfig.modify(prop, '[[value ' + newIP + ']]')
                AdminConfig.reset();
        
        
        # Call the function using command line arg
        updateDataSourceIP(sys.argv[0])
        

        脚本的调用应该与上面类似,但没有datasource参数,唯一的参数是新的主机名或ip地址:

        $WAS_HOME/bin/wsadmin.sh -lang jython -f /path/to/script.py 127.0.0.1
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-07
          • 1970-01-01
          • 2012-11-24
          • 2013-10-15
          • 1970-01-01
          相关资源
          最近更新 更多