假设我正在创建一个 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 的关系。希望这会有所帮助。