2017-04-18 33 views
1

私は比較的新しいgolangであり、正しい方向を指す助けが必要です。宣言できませんKubernetes API型宣言の型式

私は新しいDeployment型を宣言しようとしています。

私の輸入は次のようになります。私は次のように展開オブジェクトを作成しようとすると

import (
    "encoding/json" 
    "fmt" 
    yaml "gopkg.in/yaml.v2" 
    "io/ioutil" 
    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 
    "k8s.io/kubernetes/pkg/api/v1" 
    "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" 
) 

:それは作品

test := v1beta1.Deployment{ 
    Spec: v1beta1.DeploymentSpec{ 
     Template: v1.PodTemplateSpec{ 
     Spec: v1.PodSpec{ 
      Containers: []v1.Container{{ 
      Name: "test", 
      Image: "image_url", 
      }, 
      }, 
     }, 
     }, 
    }, 
    } 

が、返す展開オブジェクトがあるKindを持っていませんオブジェクトを識別するために必要です。

https://github.com/kubernetes/kubernetes/blob/master/pkg/apis/extensions/types.go#L162

によると、私は必要Kindを目的としている組み込みmetav1.TypeMetaあります。 (参考:https://github.com/kubernetes/apimachinery/blob/master/pkg/apis/meta/v1/types.go#L38

私のようなリテラルの構造体のmetav1.TypeMeta宣言してみました:

test := v1beta1.Deployment{ 
    metav1.TypeMeta: metav1.TypeMeta{Kind: "Deployment"} 
    Spec: v1beta1.DeploymentSpec{ 
     Template: v1.PodTemplateSpec{ 
     Spec: v1.PodSpec{ 
      Containers: []v1.Container{{ 
      Name: "test", 
      Image: "image_url", 
      }, 
      }, 
     }, 
     }, 
    }, 
    } 

をしかし、私は、私はそれがでmetav1.TypeMeta申告によるものである疑いがある

unknown field '"k8s.io/apimachinery/pkg/apis/meta/v1".TypeMeta' in struct literal of type v1beta1.Deployment

を取得Deployment構造体は未記入のフィールドです。

Kindをどのように宣言すればよいですか?

答えて

0

埋め込み構造体を使用する場合、通常、キーはパッケージのない型名です。あなたが(YAMLファイルを生成するために、例えば)これらのオブジェクトを自分で存続することを計画している場合、手動で任意のKubernetes APIオブジェクトにTypeMetaを設定すると、通常は必要なだけである、しかし

test := v1beta1.Deployment{ 
    TypeMeta: metav1.TypeMeta{ 
    APIVersion: "apps/v1beta1", 
    Kind: "Deployment", 
    }, 
} 

:あなたはこのようなTypeMetaを宣言することができます。

APIサーバーと通信するためにKubernetesクライアントAPI(たとえば、k8s.io/client-goパッケージを使用)を使用する場合は、すべてのAPI操作が強く型付けされているため、TypeMetaプロパティは不要ですメタデータは安全に推論できます。結局のところ、v1beta1.Deployment構造体のAPIバージョンと種類は明白でなければなりません(そして、クライアントライブラリに対して)。

+0

私はclient-goを使用してリソースを取得していますが、スイッチの決定に「Kind」を使用する必要がありますが、取得したオブジェクトでKindが空です。これを解決する最善の方法は何ですか? –