从 Jython 读取 YAML

Read YAML from Jython

我想知道如何从 Jython 脚本读取 YAML 文件。

我创建了一个调用 Websphere Application Server 命令的 Jython 脚本来创建多个数据源、虚拟主机、名称 space 绑定等

但是,目前值是在脚本中硬编码的,并且由于使用数组不方便,所以很多 Jython 代码是重复的。

理想情况下,我希望在外部文件中有这样的东西,由 Jython 脚本读取:

Cell
  cellName: Cell01
  JAAS
    "alias1"
      aliasName: "j2cALiasA"
      aliasDesc: "First j2cAlias"
    "alias2"
      aliasName: "j2cALiasB"
      aliasDesc: "Second j2cAlias"
      Node:
        nodeName: Node01
        JAASAuthData:
          jdbcProviderType: ...
        Server
          serverName: server-1
          datasources
            "datasource1"
              datasourceName: "jdbc/datasource1"
              datasourceAuthDataAlias: 

然后遍历那些不同的对象(我不确定这里的 YAML 语法,但这只是为了示例)

我该怎么做? Jython 有 YAML 解析器吗?我找不到任何东西。

如果您对 WAS Admin Jython 脚本的外部化配置有其他建议,它也会很有用:)

解决方案

对于 WAS 8.5,我不得不使用我使用以下过程创建的瘦客户端切换到 Jython 2.7:http://www.ibm.com/developerworks/websphere/library/techarticles/1207_vansickel/1207_vansickel.html

然后我不得不手动下载 PyYAML-3.11 包并编辑它的 setup.py,否则你会得到这个错误 http://pyyaml.org/ticket/163。所以我刚刚使用了这个:

def ext_status(self, ext):
    return False

然后从存档中安装包:

<THIN_CLIENT_HOME>/lib/jython/bin/pip install /root/PyYAML-3.11.tar.gz

然后像这样执行 jython 脚本:

./thinClient.sh -port 9809 -host websphere-1 -f /root/yaml.py

您的数据不是真正的 YAML,缺少一些冒号和一些不必要的引号:

Cell:
  cellName: Cell01
  JAAS:
    alias1:
      aliasName: j2cALiasA
      aliasDesc: First j2cAlias
    alias2:
      aliasName: j2cALiasB
      aliasDesc: Second j2cAlias
      Node:
        nodeName: Node01
        JAASAuthData:
          jdbcProviderType: ...
        Server:
          serverName: server-1
          datasources:
            datasource1:
              datasourceName: jdbc/datasource1
              datasourceAuthDataAlias:

这样说,它在 Linux 上的 Jython 2.7.0 下 parses/loads 和 ruamel.yaml 是正确的(免责声明:我是该软件包的作者)。您可以使用 pip install ruamel.yaml).

安装该软件包