2017-11-23 12 views
0

私はいくつかのカスタムネーマープラグインでlinkerdを実行しようとしていますが、起動時には失敗します。 私はio.l5d.fsのソースコードを取得しており、ハードコードされたアドレスでいくつかの最小限の例を得るためにすべてのビジネスロジックを切り捨てました。簡単なLinkerd namerプラグインを構築するには?

イニシャライザ:

package com.consg 
import io.buoyant.namer.NamerInitializer 

class MyInitializer extends NamerInitializer { 
    val configClass = classOf[MyConfig] 
    override def configId = "com.consg.MyConfig" 
} 

object MyInitializer extends MyInitializer 

構成:

package com.consg 

import com.fasterxml.jackson.annotation.JsonIgnore 
import com.twitter.finagle.{Path, Stack} 
import io.buoyant.config.types.Directory 
import io.buoyant.namer.NamerConfig 

case class MyConfig(rootDir: Directory) extends NamerConfig { 

    @JsonIgnore 
    override def defaultPrefix: Path = Path.read("/my.namer") 

    @JsonIgnore 
    def newNamer(params: Stack.Params) = { 
    println("params: " + params) 
    new MyNamer(rootDir.path, prefix) 
    } 

} 

ナメル:

package com.consg 

import java.nio.file.{Path => NioPath} 

import com.twitter.finagle._ 
import com.twitter.util._ 
import io.buoyant.namer.EnumeratingNamer 

class MyNamer(rootDir: NioPath, prefix: Path) extends EnumeratingNamer { 

    def lookup(path: Path): Activity[NameTree[Name]] = { 
    println("lookup path: " + path) 

    val address1 = Address("127.0.0.1", 7777) 
    val addr = Addr.Bound(Set(address1), Addr.Metadata.empty) 
    val varr = Var.apply(addr) 

    Activity.value(NameTree.Leaf(Name.Bound(varr, path, path))) 
    } 

    override def getAllNames: Activity[Set[Path]] = { 
    println("getAllNames!") 
    Activity.value(Set.apply(Path.read("animal"))) 
    } 
} 

build.sbt

name := "plug" 
version := "1" 
scalaVersion := "2.12.1" 

libraryDependencies += "io.buoyant" % "linkerd-core_2.12" % "1.3.2" % "provided" 

はまた、私はその後、私はプラグイン(linkerd-1.3.1 /プラグインの下に置かれ&プラグインのjarファイルを構築するMETA-INF /サービス/ io.buoyant.namer.NamerInitializer

の下に "com.consg.MyInitializer" サービスを公開しました)

今、私は設定してlinkerdを実行しようとしている:

namers: 
- kind: com.consg.MyConfig 
    rootDir: disco 

routers: 
- protocol: http 
    dtab: /svc => /#/my.namer; 
    servers: 
    - port: 8080 

そして、私が持っている結果:

com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve type id 'com.consg.MyConfig' into a subtype of [simple type, class io.buoyant.namer.NamerConfig]: known type ids = [NamerConfig, io.l5d.consul, io.l5d.curator, io.l5d.dnssrv, io.l5d.fs, io.l5d.k8s, io.l5d.k8s.external, io.l5d.k8s.ns, io.l5d.marathon, io.l5d.rewrite, io.l5d.serversets, io.l5d.zkLeader] 

は、だから、PLのように見えますuginは全くロードされません。助けが要る。

code on github

答えて

0

私の問題は、$ L5D_HOME環境変数を未定義たように見えます。 設定したら、プラグインが有効になりました。

関連する問題