mirror of https://github.com/kubernetes/kops.git
First pass at create_cluster_integration_test for specifying NGWs.
This commit is contained in:
parent
bcaf929256
commit
f5b3425d3d
|
@ -67,6 +67,9 @@ type CreateClusterOptions struct {
|
||||||
|
|
||||||
// Enable/Disable Bastion Host complete setup
|
// Enable/Disable Bastion Host complete setup
|
||||||
Bastion bool
|
Bastion bool
|
||||||
|
|
||||||
|
NgwIds string
|
||||||
|
NgwEips string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *CreateClusterOptions) InitDefaults() {
|
func (o *CreateClusterOptions) InitDefaults() {
|
||||||
|
@ -503,6 +506,32 @@ func RunCreateCluster(f *util.Factory, out io.Writer, c *CreateClusterOptions) e
|
||||||
return fmt.Errorf("Invalid topology %s.", c.Topology)
|
return fmt.Errorf("Invalid topology %s.", c.Topology)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NAT Gateway/ElasticIP
|
||||||
|
if c.NgwIds != "" {
|
||||||
|
ngwEipList := make([]string, 0)
|
||||||
|
// Perhaps abstract parseZoneList into something more general
|
||||||
|
// But it works for processing comma-delimited strings for now
|
||||||
|
for _, ngwEip := range parseZoneList(c.NgwEips) {
|
||||||
|
ngwEipList = append(ngwEipList, ngwEip)
|
||||||
|
}
|
||||||
|
|
||||||
|
ngwIdList := make([]string, 0)
|
||||||
|
for _, ngwId := range parseZoneList(c.NgwIds) {
|
||||||
|
ngwIdList = append(ngwIdList, ngwId)
|
||||||
|
}
|
||||||
|
|
||||||
|
gatewayIndex := 0
|
||||||
|
for i := range cluster.Spec.Subnets {
|
||||||
|
subnet := &cluster.Spec.Subnets[i]
|
||||||
|
if subnet.Type == api.SubnetTypePrivate {
|
||||||
|
subnet.NgwId = ngwIdList[gatewayIndex]
|
||||||
|
subnet.NgwEip = ngwEipList[gatewayIndex]
|
||||||
|
gatewayIndex++
|
||||||
|
}
|
||||||
|
// fmt.Printf("This is cluster.Spec.Subnets %+v\n", subnet)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sshPublicKeys := make(map[string][]byte)
|
sshPublicKeys := make(map[string][]byte)
|
||||||
if c.SSHPublicKey != "" {
|
if c.SSHPublicKey != "" {
|
||||||
c.SSHPublicKey = utils.ExpandPath(c.SSHPublicKey)
|
c.SSHPublicKey = utils.ExpandPath(c.SSHPublicKey)
|
||||||
|
|
|
@ -18,6 +18,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"fmt"
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"k8s.io/kops/cmd/kops/util"
|
"k8s.io/kops/cmd/kops/util"
|
||||||
|
@ -51,6 +52,12 @@ func TestCreateClusterPrivate(t *testing.T) {
|
||||||
runCreateClusterIntegrationTest(t, "../../tests/integration/create_cluster/private", "v1alpha2")
|
runCreateClusterIntegrationTest(t, "../../tests/integration/create_cluster/private", "v1alpha2")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestCreateClusterPrivate runs kops create cluster private.example.com --zones us-test-1a --master-zones us-test-1a
|
||||||
|
func TestCreateClusterWithNGWSpecified(t *testing.T) {
|
||||||
|
runCreateClusterIntegrationTest(t, "../../tests/integration/create_cluster/ngwspecified", "v1alpha1")
|
||||||
|
runCreateClusterIntegrationTest(t, "../../tests/integration/create_cluster/ngwspecified", "v1alpha2")
|
||||||
|
}
|
||||||
|
|
||||||
func runCreateClusterIntegrationTest(t *testing.T, srcDir string, version string) {
|
func runCreateClusterIntegrationTest(t *testing.T, srcDir string, version string) {
|
||||||
var stdout bytes.Buffer
|
var stdout bytes.Buffer
|
||||||
|
|
||||||
|
|
|
@ -318,9 +318,11 @@ type ClusterSubnetSpec struct {
|
||||||
|
|
||||||
// ProviderID is the cloud provider id for the objects associated with the zone (the subnet on AWS)
|
// ProviderID is the cloud provider id for the objects associated with the zone (the subnet on AWS)
|
||||||
ProviderID string `json:"subnetId,omitempty"`
|
ProviderID string `json:"subnetId,omitempty"`
|
||||||
|
|
||||||
NgwId string `json:"ngwId,omitempty"`
|
NgwId string `json:"ngwId,omitempty"`
|
||||||
NgwEip string `json:"ngwEip,omitempty"`
|
NgwEip string `json:"ngwEip,omitempty"`
|
||||||
EgressIP string `json:"egressIP,omitempty"`
|
// TODO: ACTIVATE EGRESSIP AND WRITE THE LOGIC TO ALLOW SMARTER AND BROADER SPECING OF EXISTING COMPONENTS
|
||||||
|
// EgressIP string `json:"egressIP,omitempty"`
|
||||||
Type SubnetType `json:"type,omitempty"`
|
Type SubnetType `json:"type,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,7 @@ func ParseInstanceGroupRole(input string, lenient bool) (InstanceGroupRole, bool
|
||||||
// ParseRawYaml parses an object just using yaml, without the full api machinery
|
// ParseRawYaml parses an object just using yaml, without the full api machinery
|
||||||
// Deprecated: prefer using the API machinery
|
// Deprecated: prefer using the API machinery
|
||||||
func ParseRawYaml(data []byte, dest interface{}) error {
|
func ParseRawYaml(data []byte, dest interface{}) error {
|
||||||
|
|
||||||
// Yaml can't parse empty strings
|
// Yaml can't parse empty strings
|
||||||
configString := string(data)
|
configString := string(data)
|
||||||
configString = strings.TrimSpace(configString)
|
configString = strings.TrimSpace(configString)
|
||||||
|
|
|
@ -227,8 +227,11 @@ type ClusterSubnetSpec struct {
|
||||||
// TODO Change ProviderID -> SubnetId
|
// TODO Change ProviderID -> SubnetId
|
||||||
|
|
||||||
ProviderID string `json:"subnetId,omitempty"`
|
ProviderID string `json:"subnetId,omitempty"`
|
||||||
|
|
||||||
NgwId string `json:"ngwId,omitempty"`
|
NgwId string `json:"ngwId,omitempty"`
|
||||||
NgwEip string `json:"ngwEip,omitempty"`
|
NgwEip string `json:"ngwEip,omitempty"`
|
||||||
EgressIP string `json:"egressIP,omitempty"`
|
|
||||||
|
// TODO: ACTIVATE EGRESSIP AND WRITE THE LOGIC TO ALLOW SMARTER AND BROADER SPECING OF EXISTING COMPONENTS
|
||||||
|
// EgressIP string `json:"egressIP,omitempty"`
|
||||||
Type SubnetType `json:"type,omitempty"`
|
Type SubnetType `json:"type,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,88 @@
|
||||||
|
apiVersion: kops/v1alpha1
|
||||||
|
kind: Cluster
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: "2017-01-01T00:00:00Z"
|
||||||
|
name: private.example.com
|
||||||
|
spec:
|
||||||
|
api:
|
||||||
|
loadBalancer:
|
||||||
|
type: Public
|
||||||
|
channel: stable
|
||||||
|
cloudProvider: aws
|
||||||
|
configBase: memfs://tests/private.example.com
|
||||||
|
etcdClusters:
|
||||||
|
- etcdMembers:
|
||||||
|
- name: us-test-1a
|
||||||
|
zone: us-test-1a
|
||||||
|
name: main
|
||||||
|
- etcdMembers:
|
||||||
|
- name: us-test-1a
|
||||||
|
zone: us-test-1a
|
||||||
|
name: events
|
||||||
|
kubernetesVersion: v1.4.7
|
||||||
|
masterPublicName: api.private.example.com
|
||||||
|
networkCIDR: 172.20.0.0/16
|
||||||
|
networking:
|
||||||
|
kopeio: {}
|
||||||
|
nonMasqueradeCIDR: 100.64.0.0/10
|
||||||
|
topology:
|
||||||
|
bastion:
|
||||||
|
enable: true
|
||||||
|
name: bastion-private.example.com
|
||||||
|
masters: private
|
||||||
|
nodes: private
|
||||||
|
zones:
|
||||||
|
- cidr: 172.20.0.0/22
|
||||||
|
name: us-test-1a
|
||||||
|
privateCIDR: 172.20.32.0/19
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
apiVersion: kops/v1alpha1
|
||||||
|
kind: InstanceGroup
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: "2017-01-01T00:00:00Z"
|
||||||
|
name: bastions
|
||||||
|
spec:
|
||||||
|
associatePublicIp: true
|
||||||
|
image: kope.io/k8s-1.4-debian-jessie-amd64-hvm-ebs-2016-10-21
|
||||||
|
machineType: t2.micro
|
||||||
|
maxSize: 1
|
||||||
|
minSize: 1
|
||||||
|
role: Bastion
|
||||||
|
zones:
|
||||||
|
- utility-us-test-1a
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
apiVersion: kops/v1alpha1
|
||||||
|
kind: InstanceGroup
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: "2017-01-01T00:00:00Z"
|
||||||
|
name: master-us-test-1a
|
||||||
|
spec:
|
||||||
|
associatePublicIp: true
|
||||||
|
image: kope.io/k8s-1.4-debian-jessie-amd64-hvm-ebs-2016-10-21
|
||||||
|
machineType: m3.medium
|
||||||
|
maxSize: 1
|
||||||
|
minSize: 1
|
||||||
|
role: Master
|
||||||
|
zones:
|
||||||
|
- us-test-1a
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
apiVersion: kops/v1alpha1
|
||||||
|
kind: InstanceGroup
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: "2017-01-01T00:00:00Z"
|
||||||
|
name: nodes
|
||||||
|
spec:
|
||||||
|
associatePublicIp: true
|
||||||
|
image: kope.io/k8s-1.4-debian-jessie-amd64-hvm-ebs-2016-10-21
|
||||||
|
machineType: t2.medium
|
||||||
|
maxSize: 2
|
||||||
|
minSize: 2
|
||||||
|
role: Node
|
||||||
|
zones:
|
||||||
|
- us-test-1a
|
|
@ -0,0 +1,94 @@
|
||||||
|
apiVersion: kops/v1alpha2
|
||||||
|
kind: Cluster
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: "2017-01-01T00:00:00Z"
|
||||||
|
name: private.example.com
|
||||||
|
spec:
|
||||||
|
api:
|
||||||
|
loadBalancer:
|
||||||
|
type: Public
|
||||||
|
channel: stable
|
||||||
|
cloudProvider: aws
|
||||||
|
configBase: memfs://tests/private.example.com
|
||||||
|
etcdClusters:
|
||||||
|
- etcdMembers:
|
||||||
|
- instanceGroup: master-us-test-1a
|
||||||
|
name: us-test-1a
|
||||||
|
name: main
|
||||||
|
- etcdMembers:
|
||||||
|
- instanceGroup: master-us-test-1a
|
||||||
|
name: us-test-1a
|
||||||
|
name: events
|
||||||
|
kubernetesVersion: v1.4.7
|
||||||
|
masterPublicName: api.private.example.com
|
||||||
|
networkCIDR: 172.20.0.0/16
|
||||||
|
networking:
|
||||||
|
kopeio: {}
|
||||||
|
nonMasqueradeCIDR: 100.64.0.0/10
|
||||||
|
subnets:
|
||||||
|
- cidr: 172.20.32.0/19
|
||||||
|
name: us-test-1a
|
||||||
|
ngwEip: eipalloc-e12345
|
||||||
|
ngwId: nat-09123456
|
||||||
|
type: Private
|
||||||
|
zone: us-test-1a
|
||||||
|
- cidr: 172.20.0.0/22
|
||||||
|
name: utility-us-test-1a
|
||||||
|
type: Utility
|
||||||
|
zone: us-test-1a
|
||||||
|
topology:
|
||||||
|
bastion:
|
||||||
|
bastionPublicName: bastion-private.example.com
|
||||||
|
masters: private
|
||||||
|
nodes: private
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
apiVersion: kops/v1alpha2
|
||||||
|
kind: InstanceGroup
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: "2017-01-01T00:00:00Z"
|
||||||
|
name: bastions
|
||||||
|
spec:
|
||||||
|
associatePublicIp: true
|
||||||
|
image: kope.io/k8s-1.4-debian-jessie-amd64-hvm-ebs-2016-10-21
|
||||||
|
machineType: t2.micro
|
||||||
|
maxSize: 1
|
||||||
|
minSize: 1
|
||||||
|
role: Bastion
|
||||||
|
subnets:
|
||||||
|
- utility-us-test-1a
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
apiVersion: kops/v1alpha2
|
||||||
|
kind: InstanceGroup
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: "2017-01-01T00:00:00Z"
|
||||||
|
name: master-us-test-1a
|
||||||
|
spec:
|
||||||
|
associatePublicIp: true
|
||||||
|
image: kope.io/k8s-1.4-debian-jessie-amd64-hvm-ebs-2016-10-21
|
||||||
|
machineType: m3.medium
|
||||||
|
maxSize: 1
|
||||||
|
minSize: 1
|
||||||
|
role: Master
|
||||||
|
subnets:
|
||||||
|
- us-test-1a
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
apiVersion: kops/v1alpha2
|
||||||
|
kind: InstanceGroup
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: "2017-01-01T00:00:00Z"
|
||||||
|
name: nodes
|
||||||
|
spec:
|
||||||
|
associatePublicIp: true
|
||||||
|
image: kope.io/k8s-1.4-debian-jessie-amd64-hvm-ebs-2016-10-21
|
||||||
|
machineType: t2.medium
|
||||||
|
maxSize: 2
|
||||||
|
minSize: 2
|
||||||
|
role: Node
|
||||||
|
subnets:
|
||||||
|
- us-test-1a
|
|
@ -0,0 +1,8 @@
|
||||||
|
ClusterName: private.example.com
|
||||||
|
Zones: us-test-1a
|
||||||
|
Cloud: aws
|
||||||
|
Topology: private
|
||||||
|
Networking: kopeio-vxlan
|
||||||
|
Bastion: true
|
||||||
|
NgwEips: eipalloc-e12345
|
||||||
|
NgwIds: nat-09123456
|
Loading…
Reference in New Issue