建立 juju charm 关系的所有步骤是什么

建立 juju charm 关系的所有步骤是什么

假设我正在创建一个 charm,其中有一个 java 类,比如 Helloworld.java。现在我想使用 jdk6 从另一个 charm 编译并运行这个类。

有人能解释一下我需要做哪些改变吗?基本上,我在建立关系方面很挣扎,因此想弄清楚。

在我最初的实现中,我的 charm 中有一个 deb 包,这个 deb 包需要预先安装 jdk6 和 hadoop(安装脚本会检查 PATH 中的 JAVA_HOME 和 HADOOP_HOME 的可用性)。

我完全被困在添加关系上(在metadata.yaml中和-关系-)。我完全不清楚如何从不同的 charms 中使用 java 和 Hadoop。

答案1

如果你想使用通过另一个 charm 安装的 jdk,你需要创建一个从属 charm(https://jujucharms.com/docs/2.0/authors-subordinate-services)。从属护身符与其从属护身符在同一个实例(容器)中运作。

metadata.yaml 看起来有点像这样:

name: 
summary: 
maintainer: 
description: 
tags: [misc]
subordinate: true
requires:
  interface-name:
    interface: interface-name
series: ['trusty']

Java JDK 和 Hadoop 可以使用以下接口:


小例子:假设你想要来自另一个 charm 的 jdk,我将使用 kafka charm 作为示例并使用它安装的 jdk。

元数据.yaml

name: layer-jdk-example
summary: <Fill in summary here>
maintainer: maintainer
description: |
  <Multi-line description here>
tags:
  - misc
subordinate: true
requires:
  kafka:
    interface: kafka
    scope: container
series: ['trusty']

层.yaml

includes: ['layer:basic', 'interface:kafka']

反应式/层-jdk-example.py

import os
from charms.reactive import when, when_not, set_state


@when_not('layer-jdk-example.installed')
def install_layer_jdk_example():    
    os.getenv("JAVA_HOME")
    # locate / download java file and compile
    # do stuff ... 
    set_state('layer-jdk-example.installed')

构建、部署并添加与 kafka 的关系。希望这会有所帮助。

相关内容