diff --git a/data/data/aws/master/main.tf b/data/data/aws/controlplane/main.tf similarity index 66% rename from data/data/aws/master/main.tf rename to data/data/aws/controlplane/main.tf index 232c8594601..491d7238e8e 100644 --- a/data/data/aws/master/main.tf +++ b/data/data/aws/controlplane/main.tf @@ -2,14 +2,14 @@ locals { arn = "aws" } -resource "aws_iam_instance_profile" "master" { - name = "${var.cluster_name}-master-profile" +resource "aws_iam_instance_profile" "control_plane" { + name = "${var.cluster_name}-control-plane-profile" - role = "${aws_iam_role.master_role.name}" + role = "${aws_iam_role.control_plane_role.name}" } -resource "aws_iam_role" "master_role" { - name = "${var.cluster_name}-master-role" +resource "aws_iam_role" "control_plane_role" { + name = "${var.cluster_name}-control-plane-role" path = "/" assume_role_policy = < /etc/haproxy/haproxy.cfg.new << EOF -listen ${var.cluster_name}-api-masters +listen ${var.cluster_name}-api-control-plane bind 0.0.0.0:6443 bind 0.0.0.0:22623 mode tcp - balance roundrobin$MASTER_LINES + balance roundrobin$CONTROL_PLANE_LINES -listen ${var.cluster_name}-api-workers +listen ${var.cluster_name}-api-compute bind 0.0.0.0:80 bind 0.0.0.0:443 mode tcp - balance roundrobin$WORKER_LINES + balance roundrobin$COMPUTE_LINES EOF @@ -140,7 +140,7 @@ ${length(var.lb_floating_ip) == 0 ? "" : " file /etc/coredns/db.${var.cluster file /etc/coredns/db.${var.cluster_domain} _etcd-server-ssl._tcp.${var.cluster_name}.${var.cluster_domain} { } -${replace(join("\n", formatlist(" file /etc/coredns/db.${var.cluster_domain} ${var.cluster_name}-etcd-%s.${var.cluster_domain} {\n upstream /etc/resolv.conf\n }\n", var.master_port_names)), "master-port-", "")} +${replace(join("\n", formatlist(" file /etc/coredns/db.${var.cluster_domain} ${var.cluster_name}-etcd-%s.${var.cluster_domain} {\n upstream /etc/resolv.conf\n }\n", var.control_plane_port_names)), "control-plane-port-", "")} forward . /etc/resolv.conf { } @@ -179,9 +179,9 @@ $ORIGIN ${var.cluster_domain}. ${length(var.lb_floating_ip) == 0 ? "" : "${var.cluster_name}-api IN A ${var.lb_floating_ip}"} ${length(var.lb_floating_ip) == 0 ? "" : "*.apps.${var.cluster_name} IN A ${var.lb_floating_ip}"} -${replace(join("\n", formatlist("${var.cluster_name}-etcd-%s IN CNAME ${var.cluster_name}-master-%s", var.master_port_names, var.master_port_names)), "master-port-", "")} +${replace(join("\n", formatlist("${var.cluster_name}-etcd-%s IN CNAME ${var.cluster_name}-control-plane-%s", var.control_plane_port_names, var.control_plane_port_names)), "control-plane-port-", "")} -${replace(join("\n", formatlist("_etcd-server-ssl._tcp.${var.cluster_name} 8640 IN SRV 0 10 2380 ${var.cluster_name}-etcd-%s.${var.cluster_domain}.", var.master_port_names)), "master-port-", "")} +${replace(join("\n", formatlist("_etcd-server-ssl._tcp.${var.cluster_name} 8640 IN SRV 0 10 2380 ${var.cluster_name}-etcd-%s.${var.cluster_domain}.", var.control_plane_port_names)), "control-plane-port-", "")} EOF } } diff --git a/data/data/openstack/service/variables.tf b/data/data/openstack/service/variables.tf index 78821286bc5..4709b2e4857 100644 --- a/data/data/openstack/service/variables.tf +++ b/data/data/openstack/service/variables.tf @@ -38,11 +38,11 @@ variable "service_port_id" { description = "The subnet ID for the bootstrap node." } -variable "master_ips" { +variable "control_plane_ips" { type = "list" } -variable "master_port_names" { +variable "control_plane_port_names" { type = "list" } diff --git a/data/data/openstack/topology/common.tf b/data/data/openstack/topology/common.tf index 7d79540c9d6..052ba6de724 100644 --- a/data/data/openstack/topology/common.tf +++ b/data/data/openstack/topology/common.tf @@ -1,3 +1,3 @@ locals { - master_port_ids = ["${coalescelist(openstack_networking_trunk_v2.masters.*.port_id,openstack_networking_port_v2.masters.*.id)}"] + control_plane_port_ids = ["${coalescelist(openstack_networking_trunk_v2.control_plane.*.port_id,openstack_networking_port_v2.control_plane.*.id)}"] } diff --git a/data/data/openstack/topology/outputs.tf b/data/data/openstack/topology/outputs.tf index 8e0c7e1aa14..f82f612e215 100644 --- a/data/data/openstack/topology/outputs.tf +++ b/data/data/openstack/topology/outputs.tf @@ -6,22 +6,22 @@ output "bootstrap_port_id" { value = "${openstack_networking_port_v2.bootstrap_port.id}" } -output "master_ips" { - value = "${flatten(openstack_networking_port_v2.masters.*.all_fixed_ips)}" +output "control_plane_ips" { + value = "${flatten(openstack_networking_port_v2.control_plane.*.all_fixed_ips)}" } -output "master_port_names" { - value = "${openstack_networking_port_v2.masters.*.name}" +output "control_plane_port_names" { + value = "${openstack_networking_port_v2.control_plane.*.name}" } output "service_vm_fixed_ip" { value = "${openstack_networking_port_v2.service_port.all_fixed_ips[0]}" } -output "master_sg_id" { - value = "${openstack_networking_secgroup_v2.master.id}" +output "control_plane_sg_id" { + value = "${openstack_networking_secgroup_v2.control_plane.id}" } -output "master_port_ids" { - value = "${local.master_port_ids}" +output "control_plane_port_ids" { + value = "${local.control_plane_port_ids}" } diff --git a/data/data/openstack/topology/private-network.tf b/data/data/openstack/topology/private-network.tf index b2a5a8b0dcb..10ca576f4cc 100644 --- a/data/data/openstack/topology/private-network.tf +++ b/data/data/openstack/topology/private-network.tf @@ -26,13 +26,13 @@ resource "openstack_networking_subnet_v2" "nodes" { dns_nameservers = ["${openstack_networking_port_v2.service_port.all_fixed_ips[0]}"] } -resource "openstack_networking_port_v2" "masters" { - name = "master-port-${count.index}" - count = "${var.masters_count}" +resource "openstack_networking_port_v2" "control_plane" { + name = "control-plane-port-${count.index}" + count = "${var.control_plane_count}" admin_state_up = "true" network_id = "${openstack_networking_network_v2.openshift-private.id}" - security_group_ids = ["${openstack_networking_secgroup_v2.master.id}"] + security_group_ids = ["${openstack_networking_secgroup_v2.control_plane.id}"] tags = ["openshiftClusterID=${var.cluster_id}"] fixed_ip { @@ -40,13 +40,13 @@ resource "openstack_networking_port_v2" "masters" { } } -resource "openstack_networking_trunk_v2" "masters" { - name = "master-trunk-${count.index}" - count = "${var.trunk_support ? var.masters_count : 0}" +resource "openstack_networking_trunk_v2" "control_plane" { + name = "control-plane-trunk-${count.index}" + count = "${var.trunk_support ? var.control_plane_count : 0}" tags = ["openshiftClusterID=${var.cluster_id}"] admin_state_up = "true" - port_id = "${openstack_networking_port_v2.masters.*.id[count.index]}" + port_id = "${openstack_networking_port_v2.control_plane.*.id[count.index]}" } resource "openstack_networking_port_v2" "bootstrap_port" { @@ -54,7 +54,7 @@ resource "openstack_networking_port_v2" "bootstrap_port" { admin_state_up = "true" network_id = "${openstack_networking_network_v2.openshift-private.id}" - security_group_ids = ["${openstack_networking_secgroup_v2.master.id}"] + security_group_ids = ["${openstack_networking_secgroup_v2.control_plane.id}"] tags = ["openshiftClusterID=${var.cluster_id}"] fixed_ip { diff --git a/data/data/openstack/topology/sg-compute.tf b/data/data/openstack/topology/sg-compute.tf new file mode 100644 index 00000000000..e8ff422b148 --- /dev/null +++ b/data/data/openstack/topology/sg-compute.tf @@ -0,0 +1,148 @@ +resource "openstack_networking_secgroup_v2" "compute" { + name = "compute" + tags = ["openshiftClusterID=${var.cluster_id}"] +} + +resource "openstack_networking_secgroup_rule_v2" "compute_ingress_icmp" { + direction = "ingress" + ethertype = "IPv4" + protocol = "icmp" + port_range_min = 0 + port_range_max = 0 + remote_ip_prefix = "0.0.0.0/0" + security_group_id = "${openstack_networking_secgroup_v2.compute.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "compute_ingress_ssh" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 22 + port_range_max = 22 + remote_ip_prefix = "0.0.0.0/0" + security_group_id = "${openstack_networking_secgroup_v2.compute.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "compute_ingress_http" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 80 + port_range_max = 80 + remote_ip_prefix = "0.0.0.0/0" + security_group_id = "${openstack_networking_secgroup_v2.compute.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "compute_ingress_https" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 443 + port_range_max = 443 + remote_ip_prefix = "0.0.0.0/0" + security_group_id = "${openstack_networking_secgroup_v2.compute.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "compute_ingress_heapster" { + direction = "ingress" + ethertype = "IPv4" + port_range_min = 4194 + port_range_max = 4194 + protocol = "tcp" + security_group_id = "${openstack_networking_secgroup_v2.compute.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "compute_ingress_heapster_from_control_plane" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 4194 + port_range_max = 4194 + remote_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" + security_group_id = "${openstack_networking_secgroup_v2.compute.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "compute_ingress_flannel" { + direction = "ingress" + ethertype = "IPv4" + protocol = "udp" + port_range_min = 4789 + port_range_max = 4789 + security_group_id = "${openstack_networking_secgroup_v2.compute.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "compute_ingress_flannel_from_control_plane" { + direction = "ingress" + ethertype = "IPv4" + protocol = "udp" + port_range_min = 4789 + port_range_max = 4789 + remote_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" + security_group_id = "${openstack_networking_secgroup_v2.compute.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "compute_ingress_node_exporter" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 9100 + port_range_max = 9100 + security_group_id = "${openstack_networking_secgroup_v2.compute.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "compute_ingress_node_exporter_from_control_plane" { + direction = "ingress" + protocol = "tcp" + ethertype = "IPv4" + port_range_min = 9100 + port_range_max = 9100 + remote_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" + security_group_id = "${openstack_networking_secgroup_v2.compute.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "compute_ingress_kubelet_insecure" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 10250 + port_range_max = 10250 + security_group_id = "${openstack_networking_secgroup_v2.compute.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "compute_ingress_kubelet_insecure_from_control_plane" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 10250 + port_range_max = 10250 + remote_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" + security_group_id = "${openstack_networking_secgroup_v2.compute.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "compute_ingress_kubelet_secure" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 10255 + port_range_max = 10255 + security_group_id = "${openstack_networking_secgroup_v2.compute.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "compute_ingress_kubelet_secure_from_control_plane" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 10255 + port_range_max = 10255 + remote_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" + security_group_id = "${openstack_networking_secgroup_v2.compute.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "compute_ingress_services" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 30000 + port_range_max = 32767 + security_group_id = "${openstack_networking_secgroup_v2.compute.id}" +} diff --git a/data/data/openstack/topology/sg-control-plane.tf b/data/data/openstack/topology/sg-control-plane.tf new file mode 100644 index 00000000000..4264fc66cb7 --- /dev/null +++ b/data/data/openstack/topology/sg-control-plane.tf @@ -0,0 +1,214 @@ +resource "openstack_networking_secgroup_v2" "control_plane" { + name = "control-plane" + tags = ["openshiftClusterID=${var.cluster_id}"] +} + +resource "openstack_networking_secgroup_rule_v2" "control_plane_mcs" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 22623 + port_range_max = 22623 + remote_ip_prefix = "${var.cidr_block}" + security_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "control_plane_ingress_icmp" { + direction = "ingress" + ethertype = "IPv4" + protocol = "icmp" + port_range_min = 0 + port_range_max = 0 + remote_ip_prefix = "${var.cidr_block}" + security_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "control_plane_ingress_ssh" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 22 + port_range_max = 22 + remote_ip_prefix = "0.0.0.0/0" + security_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "control_plane_ingress_http" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 80 + port_range_max = 80 + remote_ip_prefix = "${var.cidr_block}" + security_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "control_plane_ingress_https" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 6443 + port_range_max = 6445 + remote_ip_prefix = "${var.cidr_block}" + security_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "control_plane_ingress_heapster" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 4194 + port_range_max = 4194 + security_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "control_plane_ingress_heapster_from_compute" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 4194 + port_range_max = 4194 + remote_group_id = "${openstack_networking_secgroup_v2.compute.id}" + security_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "control_plane_ingress_flannel" { + direction = "ingress" + ethertype = "IPv4" + protocol = "udp" + port_range_min = 4789 + port_range_max = 4789 + security_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "control_plane_ingress_flannel_from_compute" { + direction = "ingress" + ethertype = "IPv4" + protocol = "udp" + port_range_min = 4789 + port_range_max = 4789 + remote_group_id = "${openstack_networking_secgroup_v2.compute.id}" + security_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "control_plane_ingress_internal" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 9000 + port_range_max = 9999 + security_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "control_plane_ingress_internal_from_compute" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 9000 + port_range_max = 9999 + remote_group_id = "${openstack_networking_secgroup_v2.compute.id}" + security_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "control_plane_ingress_kubelet_insecure" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 10250 + port_range_max = 10250 + security_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "control_plane_ingress_kubelet_insecure_from_compute" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 10250 + port_range_max = 10250 + remote_group_id = "${openstack_networking_secgroup_v2.compute.id}" + security_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "control_plane_ingress_kube_scheduler" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 10251 + port_range_max = 10251 + security_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "control_plane_ingress_kube_scheduler_from_compute" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 10251 + port_range_max = 10251 + remote_group_id = "${openstack_networking_secgroup_v2.compute.id}" + security_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "control_plane_ingress_kube_controller_manager" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 10252 + port_range_max = 10252 + security_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "control_plane_ingress_kube_controller_manager_from_compute" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 10252 + port_range_max = 10252 + remote_group_id = "${openstack_networking_secgroup_v2.compute.id}" + security_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "control_plane_ingress_kubelet_secure" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 10255 + port_range_max = 10255 + security_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "control_plane_ingress_kubelet_secure_from_compute" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 10255 + port_range_max = 10255 + remote_group_id = "${openstack_networking_secgroup_v2.compute.id}" + security_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "control_plane_ingress_etcd" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 2379 + port_range_max = 2380 + security_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "control_plane_ingress_bootstrap_etcd" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 12379 + port_range_max = 12380 + security_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" +} + +resource "openstack_networking_secgroup_rule_v2" "control_plane_ingress_services" { + direction = "ingress" + ethertype = "IPv4" + protocol = "tcp" + port_range_min = 30000 + port_range_max = 32767 + security_group_id = "${openstack_networking_secgroup_v2.control_plane.id}" +} diff --git a/data/data/openstack/topology/sg-master.tf b/data/data/openstack/topology/sg-master.tf deleted file mode 100644 index a46a5d27cfb..00000000000 --- a/data/data/openstack/topology/sg-master.tf +++ /dev/null @@ -1,214 +0,0 @@ -resource "openstack_networking_secgroup_v2" "master" { - name = "master" - tags = ["openshiftClusterID=${var.cluster_id}"] -} - -resource "openstack_networking_secgroup_rule_v2" "master_mcs" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 22623 - port_range_max = 22623 - remote_ip_prefix = "${var.cidr_block}" - security_group_id = "${openstack_networking_secgroup_v2.master.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "master_ingress_icmp" { - direction = "ingress" - ethertype = "IPv4" - protocol = "icmp" - port_range_min = 0 - port_range_max = 0 - remote_ip_prefix = "${var.cidr_block}" - security_group_id = "${openstack_networking_secgroup_v2.master.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "master_ingress_ssh" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 22 - port_range_max = 22 - remote_ip_prefix = "0.0.0.0/0" - security_group_id = "${openstack_networking_secgroup_v2.master.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "master_ingress_http" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 80 - port_range_max = 80 - remote_ip_prefix = "${var.cidr_block}" - security_group_id = "${openstack_networking_secgroup_v2.master.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "master_ingress_https" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 6443 - port_range_max = 6445 - remote_ip_prefix = "${var.cidr_block}" - security_group_id = "${openstack_networking_secgroup_v2.master.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "master_ingress_heapster" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 4194 - port_range_max = 4194 - security_group_id = "${openstack_networking_secgroup_v2.master.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "master_ingress_heapster_from_worker" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 4194 - port_range_max = 4194 - remote_group_id = "${openstack_networking_secgroup_v2.worker.id}" - security_group_id = "${openstack_networking_secgroup_v2.master.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "master_ingress_flannel" { - direction = "ingress" - ethertype = "IPv4" - protocol = "udp" - port_range_min = 4789 - port_range_max = 4789 - security_group_id = "${openstack_networking_secgroup_v2.master.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "master_ingress_flannel_from_worker" { - direction = "ingress" - ethertype = "IPv4" - protocol = "udp" - port_range_min = 4789 - port_range_max = 4789 - remote_group_id = "${openstack_networking_secgroup_v2.worker.id}" - security_group_id = "${openstack_networking_secgroup_v2.master.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "master_ingress_internal" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 9000 - port_range_max = 9999 - security_group_id = "${openstack_networking_secgroup_v2.master.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "master_ingress_internal_from_worker" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 9000 - port_range_max = 9999 - remote_group_id = "${openstack_networking_secgroup_v2.worker.id}" - security_group_id = "${openstack_networking_secgroup_v2.master.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "master_ingress_kubelet_insecure" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 10250 - port_range_max = 10250 - security_group_id = "${openstack_networking_secgroup_v2.master.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "master_ingress_kubelet_insecure_from_worker" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 10250 - port_range_max = 10250 - remote_group_id = "${openstack_networking_secgroup_v2.worker.id}" - security_group_id = "${openstack_networking_secgroup_v2.master.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "master_ingress_kube_scheduler" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 10251 - port_range_max = 10251 - security_group_id = "${openstack_networking_secgroup_v2.master.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "master_ingress_kube_scheduler_from_worker" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 10251 - port_range_max = 10251 - remote_group_id = "${openstack_networking_secgroup_v2.worker.id}" - security_group_id = "${openstack_networking_secgroup_v2.master.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "master_ingress_kube_controller_manager" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 10252 - port_range_max = 10252 - security_group_id = "${openstack_networking_secgroup_v2.master.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "master_ingress_kube_controller_manager_from_worker" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 10252 - port_range_max = 10252 - remote_group_id = "${openstack_networking_secgroup_v2.worker.id}" - security_group_id = "${openstack_networking_secgroup_v2.master.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "master_ingress_kubelet_secure" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 10255 - port_range_max = 10255 - security_group_id = "${openstack_networking_secgroup_v2.master.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "master_ingress_kubelet_secure_from_worker" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 10255 - port_range_max = 10255 - remote_group_id = "${openstack_networking_secgroup_v2.worker.id}" - security_group_id = "${openstack_networking_secgroup_v2.master.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "master_ingress_etcd" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 2379 - port_range_max = 2380 - security_group_id = "${openstack_networking_secgroup_v2.master.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "master_ingress_bootstrap_etcd" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 12379 - port_range_max = 12380 - security_group_id = "${openstack_networking_secgroup_v2.master.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "master_ingress_services" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 30000 - port_range_max = 32767 - security_group_id = "${openstack_networking_secgroup_v2.master.id}" -} diff --git a/data/data/openstack/topology/sg-worker.tf b/data/data/openstack/topology/sg-worker.tf deleted file mode 100644 index 579347d805a..00000000000 --- a/data/data/openstack/topology/sg-worker.tf +++ /dev/null @@ -1,148 +0,0 @@ -resource "openstack_networking_secgroup_v2" "worker" { - name = "worker" - tags = ["openshiftClusterID=${var.cluster_id}"] -} - -resource "openstack_networking_secgroup_rule_v2" "worker_ingress_icmp" { - direction = "ingress" - ethertype = "IPv4" - protocol = "icmp" - port_range_min = 0 - port_range_max = 0 - remote_ip_prefix = "0.0.0.0/0" - security_group_id = "${openstack_networking_secgroup_v2.worker.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "worker_ingress_ssh" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 22 - port_range_max = 22 - remote_ip_prefix = "0.0.0.0/0" - security_group_id = "${openstack_networking_secgroup_v2.worker.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "worker_ingress_http" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 80 - port_range_max = 80 - remote_ip_prefix = "0.0.0.0/0" - security_group_id = "${openstack_networking_secgroup_v2.worker.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "worker_ingress_https" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 443 - port_range_max = 443 - remote_ip_prefix = "0.0.0.0/0" - security_group_id = "${openstack_networking_secgroup_v2.worker.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "worker_ingress_heapster" { - direction = "ingress" - ethertype = "IPv4" - port_range_min = 4194 - port_range_max = 4194 - protocol = "tcp" - security_group_id = "${openstack_networking_secgroup_v2.worker.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "worker_ingress_heapster_from_master" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 4194 - port_range_max = 4194 - remote_group_id = "${openstack_networking_secgroup_v2.master.id}" - security_group_id = "${openstack_networking_secgroup_v2.worker.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "worker_ingress_flannel" { - direction = "ingress" - ethertype = "IPv4" - protocol = "udp" - port_range_min = 4789 - port_range_max = 4789 - security_group_id = "${openstack_networking_secgroup_v2.worker.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "worker_ingress_flannel_from_master" { - direction = "ingress" - ethertype = "IPv4" - protocol = "udp" - port_range_min = 4789 - port_range_max = 4789 - remote_group_id = "${openstack_networking_secgroup_v2.master.id}" - security_group_id = "${openstack_networking_secgroup_v2.worker.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "worker_ingress_node_exporter" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 9100 - port_range_max = 9100 - security_group_id = "${openstack_networking_secgroup_v2.worker.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "worker_ingress_node_exporter_from_master" { - direction = "ingress" - protocol = "tcp" - ethertype = "IPv4" - port_range_min = 9100 - port_range_max = 9100 - remote_group_id = "${openstack_networking_secgroup_v2.master.id}" - security_group_id = "${openstack_networking_secgroup_v2.worker.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "worker_ingress_kubelet_insecure" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 10250 - port_range_max = 10250 - security_group_id = "${openstack_networking_secgroup_v2.worker.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "worker_ingress_kubelet_insecure_from_master" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 10250 - port_range_max = 10250 - remote_group_id = "${openstack_networking_secgroup_v2.master.id}" - security_group_id = "${openstack_networking_secgroup_v2.worker.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "worker_ingress_kubelet_secure" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 10255 - port_range_max = 10255 - security_group_id = "${openstack_networking_secgroup_v2.worker.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "worker_ingress_kubelet_secure_from_master" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 10255 - port_range_max = 10255 - remote_group_id = "${openstack_networking_secgroup_v2.master.id}" - security_group_id = "${openstack_networking_secgroup_v2.worker.id}" -} - -resource "openstack_networking_secgroup_rule_v2" "worker_ingress_services" { - direction = "ingress" - ethertype = "IPv4" - protocol = "tcp" - port_range_min = 30000 - port_range_max = 32767 - security_group_id = "${openstack_networking_secgroup_v2.worker.id}" -} diff --git a/data/data/openstack/topology/variables.tf b/data/data/openstack/topology/variables.tf index e56aedfa6ec..c901ac952e8 100644 --- a/data/data/openstack/topology/variables.tf +++ b/data/data/openstack/topology/variables.tf @@ -10,6 +10,10 @@ variable "cluster_name" { type = "string" } +variable "control_plane_count" { + type = "string" +} + variable "external_network" { description = "UUID of the external network providing Floating IP addresses." type = "string" @@ -22,10 +26,6 @@ variable "lb_floating_ip" { default = "" } -variable "masters_count" { - type = "string" -} - variable "trunk_support" { type = "string" } diff --git a/data/data/openstack/variables-openstack.tf b/data/data/openstack/variables-openstack.tf index 60e58cb9034..44a279c82cb 100644 --- a/data/data/openstack/variables-openstack.tf +++ b/data/data/openstack/variables-openstack.tf @@ -211,17 +211,22 @@ Example: `{ "key" = "value", "foo" = "bar" }` EOF } -variable "openstack_master_extra_sg_ids" { +variable "openstack_control_plane_extra_sg_ids" { type = "list" default = [] description = < - - - + + G - + cluster_Target - -Target + +Target cluster_bootkube - -bootkube + +bootkube cluster_bootstrap - -bootstrap + +bootstrap cluster_cluster - -cluster + +cluster cluster_installconfig - -installconfig + +installconfig cluster_kubeconfig - -kubeconfig + +kubeconfig cluster_machine - -machine + +machine cluster_machines - -machines + +machines cluster_manifests - -manifests + +manifests cluster_openshift - -openshift + +openshift cluster_password - -password + +password cluster_rhcos - -rhcos + +rhcos cluster_tls - -tls + +tls installconfig.InstallConfig - -installconfig.InstallConfig + +installconfig.InstallConfig Target Install Config - -Target Install Config + +Target Install Config installconfig.InstallConfig->Target Install Config - - + + - + +machines.ControlPlane + +machines.ControlPlane + + + +installconfig.InstallConfig->machines.ControlPlane + + + + + +installconfig.PlatformCredsCheck + +installconfig.PlatformCredsCheck + + + +installconfig.InstallConfig->installconfig.PlatformCredsCheck + + + + + +rhcos.Image + +rhcos.Image + + + +installconfig.InstallConfig->rhcos.Image + + + + + +machine.ControlPlane + +machine.ControlPlane + + + +installconfig.InstallConfig->machine.ControlPlane + + + + + manifests.Manifests - -manifests.Manifests + +manifests.Manifests - + installconfig.InstallConfig->manifests.Manifests - - + + - + manifests.Ingress - -manifests.Ingress + +manifests.Ingress - + installconfig.InstallConfig->manifests.Ingress - - + + - + manifests.DNS - -manifests.DNS + +manifests.DNS - + installconfig.InstallConfig->manifests.DNS - - + + - + manifests.Infrastructure - -manifests.Infrastructure + +manifests.Infrastructure - + installconfig.InstallConfig->manifests.Infrastructure - - + + - + manifests.Networking - -manifests.Networking + +manifests.Networking - + installconfig.InstallConfig->manifests.Networking - - + + - + tls.IngressCertKey - -tls.IngressCertKey + +tls.IngressCertKey - + installconfig.InstallConfig->tls.IngressCertKey - - + + - + tls.MCSCertKey - -tls.MCSCertKey + +tls.MCSCertKey - + installconfig.InstallConfig->tls.MCSCertKey - - + + - + manifests.Openshift - -manifests.Openshift + +manifests.Openshift - + installconfig.InstallConfig->manifests.Openshift - - + + - + manifests.ClusterK8sIO - -manifests.ClusterK8sIO + +manifests.ClusterK8sIO - + installconfig.InstallConfig->manifests.ClusterK8sIO - - + + - - -machines.Worker - -machines.Worker - - - -installconfig.InstallConfig->machines.Worker - - - - - -installconfig.PlatformCredsCheck - -installconfig.PlatformCredsCheck - - - -installconfig.InstallConfig->installconfig.PlatformCredsCheck - - - - - -rhcos.Image - -rhcos.Image - - - -installconfig.InstallConfig->rhcos.Image - - - - - -machine.Worker - -machine.Worker - - - -installconfig.InstallConfig->machine.Worker - - - - + -machines.Master - -machines.Master +machines.Compute + +machines.Compute - - -installconfig.InstallConfig->machines.Master - - + + +installconfig.InstallConfig->machines.Compute + + - + -machine.Master - -machine.Master +machine.Compute + +machine.Compute - - -installconfig.InstallConfig->machine.Master - - + + +installconfig.InstallConfig->machine.Compute + + kubeconfig.Admin - -kubeconfig.Admin + +kubeconfig.Admin - + installconfig.InstallConfig->kubeconfig.Admin - - + + bootstrap.Bootstrap - -bootstrap.Bootstrap + +bootstrap.Bootstrap - + installconfig.InstallConfig->bootstrap.Bootstrap - - + + tls.APIServerCertKey - -tls.APIServerCertKey + +tls.APIServerCertKey - + installconfig.InstallConfig->tls.APIServerCertKey - - + + kubeconfig.Kubelet - -kubeconfig.Kubelet + +kubeconfig.Kubelet - + installconfig.InstallConfig->kubeconfig.Kubelet - - + + cluster.Metadata - -cluster.Metadata + +cluster.Metadata - + installconfig.InstallConfig->cluster.Metadata - - + + cluster.TerraformVariables - -cluster.TerraformVariables + +cluster.TerraformVariables - + installconfig.InstallConfig->cluster.TerraformVariables - - + + cluster.Cluster - -cluster.Cluster + +cluster.Cluster - + installconfig.InstallConfig->cluster.Cluster - - + + installconfig.sshPublicKey - -installconfig.sshPublicKey + +installconfig.sshPublicKey installconfig.sshPublicKey->installconfig.InstallConfig - - + + installconfig.baseDomain - -installconfig.baseDomain + +installconfig.baseDomain installconfig.baseDomain->installconfig.InstallConfig - - + + installconfig.platform - -installconfig.platform + +installconfig.platform installconfig.platform->installconfig.InstallConfig - - + + installconfig.platform->installconfig.baseDomain - - + + installconfig.clusterName - -installconfig.clusterName + +installconfig.clusterName installconfig.clusterName->installconfig.InstallConfig - - + + installconfig.pullSecret - -installconfig.pullSecret + +installconfig.pullSecret installconfig.pullSecret->installconfig.InstallConfig - - + + bootkube.KubeCloudConfig - -bootkube.KubeCloudConfig + +bootkube.KubeCloudConfig Target Manifest templates - -Target Manifest templates + +Target Manifest templates bootkube.KubeCloudConfig->Target Manifest templates - - + + - + bootkube.KubeCloudConfig->manifests.Manifests - - + + bootkube.MachineConfigServerTLSSecret - -bootkube.MachineConfigServerTLSSecret + +bootkube.MachineConfigServerTLSSecret bootkube.MachineConfigServerTLSSecret->Target Manifest templates - - + + - + bootkube.MachineConfigServerTLSSecret->manifests.Manifests - - + + bootkube.Pull - -bootkube.Pull + +bootkube.Pull bootkube.Pull->Target Manifest templates - - + + - + bootkube.Pull->manifests.Manifests - - + + bootkube.CVOOverrides - -bootkube.CVOOverrides + +bootkube.CVOOverrides bootkube.CVOOverrides->Target Manifest templates - - + + - + bootkube.CVOOverrides->manifests.Manifests - - + + bootkube.HostEtcdServiceEndpointsKubeSystem - -bootkube.HostEtcdServiceEndpointsKubeSystem + +bootkube.HostEtcdServiceEndpointsKubeSystem bootkube.HostEtcdServiceEndpointsKubeSystem->Target Manifest templates - - + + - + bootkube.HostEtcdServiceEndpointsKubeSystem->manifests.Manifests - - + + bootkube.KubeSystemConfigmapEtcdServingCA - -bootkube.KubeSystemConfigmapEtcdServingCA + +bootkube.KubeSystemConfigmapEtcdServingCA bootkube.KubeSystemConfigmapEtcdServingCA->Target Manifest templates - - + + - + bootkube.KubeSystemConfigmapEtcdServingCA->manifests.Manifests - - + + bootkube.KubeSystemConfigmapRootCA - -bootkube.KubeSystemConfigmapRootCA + +bootkube.KubeSystemConfigmapRootCA bootkube.KubeSystemConfigmapRootCA->Target Manifest templates - - + + - + bootkube.KubeSystemConfigmapRootCA->manifests.Manifests - - + + bootkube.KubeSystemSecretEtcdClient - -bootkube.KubeSystemSecretEtcdClient + +bootkube.KubeSystemSecretEtcdClient bootkube.KubeSystemSecretEtcdClient->Target Manifest templates - - + + - + bootkube.KubeSystemSecretEtcdClient->manifests.Manifests - - + + bootkube.OpenshiftMachineConfigOperator - -bootkube.OpenshiftMachineConfigOperator + +bootkube.OpenshiftMachineConfigOperator bootkube.OpenshiftMachineConfigOperator->Target Manifest templates - - + + - + bootkube.OpenshiftMachineConfigOperator->manifests.Manifests - - + + bootkube.EtcdServiceKubeSystem - -bootkube.EtcdServiceKubeSystem + +bootkube.EtcdServiceKubeSystem bootkube.EtcdServiceKubeSystem->Target Manifest templates - - + + - + bootkube.EtcdServiceKubeSystem->manifests.Manifests - - + + bootkube.HostEtcdServiceKubeSystem - -bootkube.HostEtcdServiceKubeSystem + +bootkube.HostEtcdServiceKubeSystem bootkube.HostEtcdServiceKubeSystem->Target Manifest templates - - + + - + bootkube.HostEtcdServiceKubeSystem->manifests.Manifests - - + + openshift.BindingDiscovery - -openshift.BindingDiscovery + +openshift.BindingDiscovery openshift.BindingDiscovery->Target Manifest templates - - + + - + openshift.BindingDiscovery->manifests.Openshift - - + + openshift.CloudCredsSecret - -openshift.CloudCredsSecret + +openshift.CloudCredsSecret openshift.CloudCredsSecret->Target Manifest templates - - + + - + openshift.CloudCredsSecret->manifests.Openshift - - + + openshift.KubeadminPasswordSecret - -openshift.KubeadminPasswordSecret + +openshift.KubeadminPasswordSecret openshift.KubeadminPasswordSecret->Target Manifest templates - - + + - + openshift.KubeadminPasswordSecret->manifests.Openshift - - + + openshift.RoleCloudCredsSecretReader - -openshift.RoleCloudCredsSecretReader + +openshift.RoleCloudCredsSecretReader openshift.RoleCloudCredsSecretReader->Target Manifest templates - - + + - + openshift.RoleCloudCredsSecretReader->manifests.Openshift - - + + Target Manifests - -Target Manifests + +Target Manifests - + -manifests.Manifests->Target Manifests - - +machines.ControlPlane->Target Manifests + + - - -manifests.Manifests->bootstrap.Bootstrap - - + + +machines.ControlPlane->bootstrap.Bootstrap + + + + + +machines.ControlPlane->cluster.TerraformVariables + + installconfig.ClusterID - -installconfig.ClusterID + +installconfig.ClusterID - + +installconfig.ClusterID->machines.ControlPlane + + + + + installconfig.ClusterID->manifests.Manifests - - + + - - -installconfig.ClusterID->machines.Worker - - + + +installconfig.ClusterID->manifests.DNS + + - - -installconfig.ClusterID->machines.Master - - + + +installconfig.ClusterID->machines.Compute + + - + installconfig.ClusterID->cluster.Metadata - - + + - + installconfig.ClusterID->cluster.TerraformVariables - - + + - + installconfig.ClusterID->cluster.Cluster - - + + - - -manifests.Ingress->manifests.Manifests - - + + +installconfig.PlatformCredsCheck->machines.ControlPlane + + - - -manifests.DNS->manifests.Manifests - - + + +installconfig.PlatformCredsCheck->manifests.DNS + + - - -manifests.Infrastructure->manifests.Manifests - - + + +installconfig.PlatformCredsCheck->machines.Compute + + - - -openshift.InfrastructureCRD - -openshift.InfrastructureCRD + + +installconfig.PlatformCredsCheck->cluster.Cluster + + - - -openshift.InfrastructureCRD->manifests.Infrastructure - - + + +rhcos.Image->machines.ControlPlane + + - - -manifests.Networking->manifests.Manifests - - + + +rhcos.Image->machines.Compute + + - - -manifests.Networking->manifests.ClusterK8sIO - - + + +rhcos.Image->cluster.TerraformVariables + + - - -openshift.NetworkCRDs - -openshift.NetworkCRDs + + +machine.ControlPlane->machines.ControlPlane + + - - -openshift.NetworkCRDs->manifests.Networking - - + + +Target Ignition Configs + +Target Ignition Configs + + + +machine.ControlPlane->Target Ignition Configs + + + + + +machine.ControlPlane->cluster.TerraformVariables + + - + tls.RootCA - -tls.RootCA + +tls.RootCA + + + +tls.RootCA->machine.ControlPlane + + - + tls.RootCA->manifests.Manifests - - + + - + tls.EtcdCA - -tls.EtcdCA + +tls.EtcdCA - + tls.RootCA->tls.EtcdCA - - + + - + tls.KubeCA - -tls.KubeCA + +tls.KubeCA - + tls.RootCA->tls.KubeCA - - + + - + tls.RootCA->tls.MCSCertKey - - - - - -tls.RootCA->machine.Worker - - + + - - -tls.RootCA->machine.Master - - + + +tls.RootCA->machine.Compute + + - + tls.RootCA->kubeconfig.Admin - - + + - + tls.RootCA->bootstrap.Bootstrap - - + + tls.AggregatorCA - -tls.AggregatorCA + +tls.AggregatorCA - + tls.RootCA->tls.AggregatorCA - - + + tls.JournalCertKey - -tls.JournalCertKey + +tls.JournalCertKey - + tls.RootCA->tls.JournalCertKey - - + + - + tls.RootCA->kubeconfig.Kubelet - - + + + + + +manifests.Manifests->Target Manifests + + + + + +manifests.Manifests->bootstrap.Bootstrap + + + + + +manifests.Ingress->manifests.Manifests + + + + + +manifests.DNS->manifests.Manifests + + + + + +manifests.Infrastructure->manifests.Manifests + + + + + +openshift.InfrastructureCRD + +openshift.InfrastructureCRD + + + +openshift.InfrastructureCRD->manifests.Infrastructure + + + + + +manifests.Networking->manifests.Manifests + + + + + +manifests.Networking->manifests.ClusterK8sIO + + + + + +openshift.NetworkCRDs + +openshift.NetworkCRDs + + + +openshift.NetworkCRDs->manifests.Networking + + - + tls.EtcdCA->manifests.Manifests - - + + - + tls.EtcdClientCertKey - -tls.EtcdClientCertKey + +tls.EtcdClientCertKey - + tls.EtcdCA->tls.EtcdClientCertKey - - + + - + tls.EtcdCA->bootstrap.Bootstrap - - + + - + tls.IngressCertKey->manifests.Manifests - - + + - + tls.KubeCA->manifests.Manifests - - + + - + tls.KubeCA->tls.IngressCertKey - - + + - + tls.KubeletCertKey - -tls.KubeletCertKey + +tls.KubeletCertKey - + tls.KubeCA->tls.KubeletCertKey - - + + tls.AdminCertKey - -tls.AdminCertKey + +tls.AdminCertKey - + tls.KubeCA->tls.AdminCertKey - - + + - + tls.KubeCA->bootstrap.Bootstrap - - + + - + tls.KubeCA->tls.APIServerCertKey - - + + - + tls.EtcdClientCertKey->manifests.Manifests - - + + - + tls.EtcdClientCertKey->bootstrap.Bootstrap - - + + - + tls.MCSCertKey->manifests.Manifests - - + + - + tls.MCSCertKey->bootstrap.Bootstrap - - + + - + tls.KubeletCertKey->manifests.Manifests - - + + - + tls.KubeletCertKey->bootstrap.Bootstrap - - + + - + tls.KubeletCertKey->kubeconfig.Kubelet - - + + - + manifests.Openshift->Target Manifests - - + + - + manifests.Openshift->bootstrap.Bootstrap - - + + - + manifests.ClusterK8sIO->manifests.Openshift - - + + - - -machines.Worker->manifests.Openshift - - - - - -installconfig.PlatformCredsCheck->machines.Worker - - - - + -installconfig.PlatformCredsCheck->machines.Master - - - - - -installconfig.PlatformCredsCheck->cluster.Cluster - - - - - -rhcos.Image->machines.Worker - - - - - -rhcos.Image->machines.Master - - - - - -rhcos.Image->cluster.TerraformVariables - - - - - -machine.Worker->machines.Worker - - - - - -Target Ignition Configs - -Target Ignition Configs - - - -machine.Worker->Target Ignition Configs - - - - - -machines.Master->manifests.Openshift - - - - - -machines.Master->cluster.TerraformVariables - - - - - -machine.Master->machines.Master - - +machines.Compute->manifests.Openshift + + - - -machine.Master->Target Ignition Configs - - + + +machine.Compute->machines.Compute + + - - -machine.Master->cluster.TerraformVariables - - + + +machine.Compute->Target Ignition Configs + + password.KubeadminPassword - -password.KubeadminPassword + +password.KubeadminPassword - + password.KubeadminPassword->manifests.Openshift - - + + - + password.KubeadminPassword->cluster.Cluster - - + + - + kubeconfig.Admin->Target Ignition Configs - - + + - + kubeconfig.Admin->bootstrap.Bootstrap - - + + Target Cluster - -Target Cluster + +Target Cluster - + kubeconfig.Admin->Target Cluster - - + + - + tls.AdminCertKey->kubeconfig.Admin - - + + - + tls.AdminCertKey->bootstrap.Bootstrap - - + + - + bootstrap.Bootstrap->Target Ignition Configs - - + + - + bootstrap.Bootstrap->cluster.TerraformVariables - - + + - + tls.AggregatorCA->bootstrap.Bootstrap - - + + tls.APIServerProxyCertKey - -tls.APIServerProxyCertKey + +tls.APIServerProxyCertKey - + tls.AggregatorCA->tls.APIServerProxyCertKey - - + + - + tls.APIServerCertKey->bootstrap.Bootstrap - - + + - + tls.APIServerProxyCertKey->bootstrap.Bootstrap - - + + tls.ServiceAccountKeyPair - -tls.ServiceAccountKeyPair + +tls.ServiceAccountKeyPair - + tls.ServiceAccountKeyPair->bootstrap.Bootstrap - - + + - + tls.JournalCertKey->bootstrap.Bootstrap - - + + - + tls.JournalCertKey->Target Cluster - - + + - + kubeconfig.Kubelet->bootstrap.Bootstrap - - + + - + cluster.Metadata->Target Ignition Configs - - + + - + cluster.Metadata->Target Cluster - - + + - + cluster.TerraformVariables->Target Cluster - - + + - + cluster.TerraformVariables->cluster.Cluster - - + + - + cluster.Cluster->Target Cluster - - + + diff --git a/pkg/asset/cluster/tfvars.go b/pkg/asset/cluster/tfvars.go index 1570ec0eedb..d8df122464b 100644 --- a/pkg/asset/cluster/tfvars.go +++ b/pkg/asset/cluster/tfvars.go @@ -58,8 +58,8 @@ func (t *TerraformVariables) Dependencies() []asset.Asset { &installconfig.InstallConfig{}, new(rhcos.Image), &bootstrap.Bootstrap{}, - &machine.Master{}, - &machines.Master{}, + &machine.ControlPlane{}, + &machines.ControlPlane{}, } } @@ -68,24 +68,25 @@ func (t *TerraformVariables) Generate(parents asset.Parents) error { clusterID := &installconfig.ClusterID{} installConfig := &installconfig.InstallConfig{} bootstrapIgnAsset := &bootstrap.Bootstrap{} - masterIgnAsset := &machine.Master{} - mastersAsset := &machines.Master{} + controlPlaneIgnAsset := &machine.ControlPlane{} + controlPlaneAsset := &machines.ControlPlane{} rhcosImage := new(rhcos.Image) - parents.Get(clusterID, installConfig, bootstrapIgnAsset, masterIgnAsset, mastersAsset, rhcosImage) + parents.Get(clusterID, installConfig, bootstrapIgnAsset, controlPlaneIgnAsset, controlPlaneAsset, rhcosImage) bootstrapIgn := string(bootstrapIgnAsset.Files()[0].Data) - masterIgn := string(masterIgnAsset.Files()[0].Data) + controlPlaneIgn := string(controlPlaneIgnAsset.Files()[0].Data) - masters := mastersAsset.Machines() - masterCount := len(masters) + controlPlaneMachines := controlPlaneAsset.Machines() + controlPlaneCount := len(controlPlaneMachines) data, err := tfvars.TFVars( clusterID.ClusterID, installConfig.Config.ObjectMeta.Name, installConfig.Config.BaseDomain, &installConfig.Config.Networking.MachineCIDR.IPNet, bootstrapIgn, - masterIgn, - masterCount, + controlPlaneIgn, + controlPlaneCount, + installConfig.Config.ControlPlane.Name, ) if err != nil { return errors.Wrap(err, "failed to get Terraform variables") @@ -97,18 +98,18 @@ func (t *TerraformVariables) Generate(parents asset.Parents) error { }, } - if masterCount == 0 { - return errors.Errorf("master slice cannot be empty") + if controlPlaneCount == 0 { + return errors.Errorf("controlPlane slice cannot be empty") } switch platform := installConfig.Config.Platform.Name(); platform { case aws.Name: - masters, err := mastersAsset.StructuredMachines() + machines, err := controlPlaneAsset.StructuredMachines() if err != nil { return err } data, err = awstfvars.TFVars( - masters[0].Spec.ProviderSpec.Value.Object.(*awsprovider.AWSMachineProviderConfig), + machines[0].Spec.ProviderSpec.Value.Object.(*awsprovider.AWSMachineProviderConfig), ) if err != nil { return errors.Wrapf(err, "failed to get %s Terraform variables", platform) @@ -118,16 +119,16 @@ func (t *TerraformVariables) Generate(parents asset.Parents) error { Data: data, }) case libvirt.Name: - masters, err := mastersAsset.StructuredMachines() + machines, err := controlPlaneAsset.StructuredMachines() if err != nil { return err } data, err = libvirttfvars.TFVars( - masters[0].Spec.ProviderSpec.Value.Object.(*libvirtprovider.LibvirtMachineProviderConfig), + machines[0].Spec.ProviderSpec.Value.Object.(*libvirtprovider.LibvirtMachineProviderConfig), string(*rhcosImage), &installConfig.Config.Networking.MachineCIDR.IPNet, installConfig.Config.Platform.Libvirt.Network.IfName, - masterCount, + controlPlaneCount, ) if err != nil { return errors.Wrapf(err, "failed to get %s Terraform variables", platform) @@ -138,12 +139,12 @@ func (t *TerraformVariables) Generate(parents asset.Parents) error { }) case none.Name: case openstack.Name: - masters, err := mastersAsset.StructuredMachines() + machines, err := controlPlaneAsset.StructuredMachines() if err != nil { return err } data, err = openstacktfvars.TFVars( - masters[0].Spec.ProviderSpec.Value.Object.(*openstackprovider.OpenstackProviderSpec), + machines[0].Spec.ProviderSpec.Value.Object.(*openstackprovider.OpenstackProviderSpec), installConfig.Config.Platform.OpenStack.Region, installConfig.Config.Platform.OpenStack.ExternalNetwork, installConfig.Config.Platform.OpenStack.LbFloatingIP, diff --git a/pkg/asset/ignition/bootstrap/bootstrap.go b/pkg/asset/ignition/bootstrap/bootstrap.go index 29d6af434ac..e4af5cef53a 100644 --- a/pkg/asset/ignition/bootstrap/bootstrap.go +++ b/pkg/asset/ignition/bootstrap/bootstrap.go @@ -76,7 +76,7 @@ func (a *Bootstrap) Dependencies() []asset.Asset { &tls.JournalCertKey{}, &kubeconfig.Admin{}, &kubeconfig.Kubelet{}, - &machines.Master{}, + &machines.ControlPlane{}, &manifests.Manifests{}, &manifests.Openshift{}, } @@ -349,7 +349,7 @@ func (a *Bootstrap) addParentFiles(dependencies asset.Parents) { for _, asset := range []asset.WritableAsset{ &kubeconfig.Admin{}, &kubeconfig.Kubelet{}, - &machines.Master{}, + &machines.ControlPlane{}, &tls.KubeCA{}, &tls.AggregatorCA{}, &tls.EtcdCA{}, diff --git a/pkg/asset/ignition/machine/worker.go b/pkg/asset/ignition/machine/compute.go similarity index 60% rename from pkg/asset/ignition/machine/worker.go rename to pkg/asset/ignition/machine/compute.go index 9bb0693113a..5362b46b2d9 100644 --- a/pkg/asset/ignition/machine/worker.go +++ b/pkg/asset/ignition/machine/compute.go @@ -10,42 +10,43 @@ import ( "github.com/openshift/installer/pkg/asset" "github.com/openshift/installer/pkg/asset/installconfig" "github.com/openshift/installer/pkg/asset/tls" + "github.com/openshift/installer/pkg/types" ) const ( - workerIgnFilename = "worker.ign" + computeIgnFilename = "compute.ign" ) -// Worker is an asset that generates the ignition config for worker nodes. -type Worker struct { +// Compute is an asset that generates the ignition config for compute nodes. +type Compute struct { Config *igntypes.Config File *asset.File } -var _ asset.WritableAsset = (*Worker)(nil) +var _ asset.WritableAsset = (*Compute)(nil) -// Dependencies returns the assets on which the Worker asset depends. -func (a *Worker) Dependencies() []asset.Asset { +// Dependencies returns the assets on which the Compute asset depends. +func (a *Compute) Dependencies() []asset.Asset { return []asset.Asset{ &installconfig.InstallConfig{}, &tls.RootCA{}, } } -// Generate generates the ignition config for the Worker asset. -func (a *Worker) Generate(dependencies asset.Parents) error { +// Generate generates the ignition config for the Compute asset. +func (a *Compute) Generate(dependencies asset.Parents) error { installConfig := &installconfig.InstallConfig{} rootCA := &tls.RootCA{} dependencies.Get(installConfig, rootCA) - a.Config = pointerIgnitionConfig(installConfig.Config, rootCA.Cert(), "worker") + a.Config = pointerIgnitionConfig(installConfig.Config, rootCA.Cert(), types.ComputeMachineRole) data, err := json.Marshal(a.Config) if err != nil { return errors.Wrap(err, "failed to marshal Ignition config") } a.File = &asset.File{ - Filename: workerIgnFilename, + Filename: computeIgnFilename, Data: data, } @@ -53,21 +54,21 @@ func (a *Worker) Generate(dependencies asset.Parents) error { } // Name returns the human-friendly name of the asset. -func (a *Worker) Name() string { - return "Worker Ignition Config" +func (a *Compute) Name() string { + return "Compute Ignition Config" } // Files returns the files generated by the asset. -func (a *Worker) Files() []*asset.File { +func (a *Compute) Files() []*asset.File { if a.File != nil { return []*asset.File{a.File} } return []*asset.File{} } -// Load returns the worker ignitions from disk. -func (a *Worker) Load(f asset.FileFetcher) (found bool, err error) { - file, err := f.FetchByName(workerIgnFilename) +// Load returns the compute ignitions from disk. +func (a *Compute) Load(f asset.FileFetcher) (found bool, err error) { + file, err := f.FetchByName(computeIgnFilename) if err != nil { if os.IsNotExist(err) { return false, nil diff --git a/pkg/asset/ignition/machine/worker_test.go b/pkg/asset/ignition/machine/compute_test.go similarity index 69% rename from pkg/asset/ignition/machine/worker_test.go rename to pkg/asset/ignition/machine/compute_test.go index d9f225a3d06..d7f168c3814 100644 --- a/pkg/asset/ignition/machine/worker_test.go +++ b/pkg/asset/ignition/machine/compute_test.go @@ -13,8 +13,8 @@ import ( "github.com/openshift/installer/pkg/types/aws" ) -// TestWorkerGenerate tests generating the worker asset. -func TestWorkerGenerate(t *testing.T) { +// TestComputeGenerate tests generating the compute asset. +func TestComputeGenerate(t *testing.T) { installConfig := &installconfig.InstallConfig{ Config: &types.InstallConfig{ Networking: &types.Networking{ @@ -35,11 +35,11 @@ func TestWorkerGenerate(t *testing.T) { parents := asset.Parents{} parents.Add(installConfig, rootCA) - worker := &Worker{} - err = worker.Generate(parents) - assert.NoError(t, err, "unexpected error generating worker asset") + compute := &Compute{} + err = compute.Generate(parents) + assert.NoError(t, err, "unexpected error generating compute asset") - actualFiles := worker.Files() - assert.Equal(t, 1, len(actualFiles), "unexpected number of files in worker state") - assert.Equal(t, "worker.ign", actualFiles[0].Filename, "unexpected name for worker ignition config") + actualFiles := compute.Files() + assert.Equal(t, 1, len(actualFiles), "unexpected number of files in compute state") + assert.Equal(t, "compute.ign", actualFiles[0].Filename, "unexpected name for compute ignition config") } diff --git a/pkg/asset/ignition/machine/master.go b/pkg/asset/ignition/machine/controlplane.go similarity index 58% rename from pkg/asset/ignition/machine/master.go rename to pkg/asset/ignition/machine/controlplane.go index be84b28ca61..793c4d37b10 100644 --- a/pkg/asset/ignition/machine/master.go +++ b/pkg/asset/ignition/machine/controlplane.go @@ -10,42 +10,43 @@ import ( "github.com/openshift/installer/pkg/asset" "github.com/openshift/installer/pkg/asset/installconfig" "github.com/openshift/installer/pkg/asset/tls" + "github.com/openshift/installer/pkg/types" ) const ( - masterIgnFilename = "master.ign" + controlPlaneIgnFilename = "control-plane.ign" ) -// Master is an asset that generates the ignition config for master nodes. -type Master struct { +// ControlPlane is an asset that generates the ignition config for control plane nodes. +type ControlPlane struct { Config *igntypes.Config File *asset.File } -var _ asset.WritableAsset = (*Master)(nil) +var _ asset.WritableAsset = (*ControlPlane)(nil) -// Dependencies returns the assets on which the Master asset depends. -func (a *Master) Dependencies() []asset.Asset { +// Dependencies returns the assets on which the ControlPlane asset depends. +func (a *ControlPlane) Dependencies() []asset.Asset { return []asset.Asset{ &installconfig.InstallConfig{}, &tls.RootCA{}, } } -// Generate generates the ignition config for the Master asset. -func (a *Master) Generate(dependencies asset.Parents) error { +// Generate generates the ignition config for the ControlPlane asset. +func (a *ControlPlane) Generate(dependencies asset.Parents) error { installConfig := &installconfig.InstallConfig{} rootCA := &tls.RootCA{} dependencies.Get(installConfig, rootCA) - a.Config = pointerIgnitionConfig(installConfig.Config, rootCA.Cert(), "master") + a.Config = pointerIgnitionConfig(installConfig.Config, rootCA.Cert(), types.ControlPlaneMachineRole) data, err := json.Marshal(a.Config) if err != nil { return errors.Wrap(err, "failed to marshal Ignition config") } a.File = &asset.File{ - Filename: masterIgnFilename, + Filename: controlPlaneIgnFilename, Data: data, } @@ -53,21 +54,21 @@ func (a *Master) Generate(dependencies asset.Parents) error { } // Name returns the human-friendly name of the asset. -func (a *Master) Name() string { - return "Master Ignition Config" +func (a *ControlPlane) Name() string { + return "Control Plane Ignition Config" } // Files returns the files generated by the asset. -func (a *Master) Files() []*asset.File { +func (a *ControlPlane) Files() []*asset.File { if a.File != nil { return []*asset.File{a.File} } return []*asset.File{} } -// Load returns the master ignitions from disk. -func (a *Master) Load(f asset.FileFetcher) (found bool, err error) { - file, err := f.FetchByName(masterIgnFilename) +// Load returns the control plane ignitions from disk. +func (a *ControlPlane) Load(f asset.FileFetcher) (found bool, err error) { + file, err := f.FetchByName(controlPlaneIgnFilename) if err != nil { if os.IsNotExist(err) { return false, nil diff --git a/pkg/asset/ignition/machine/master_test.go b/pkg/asset/ignition/machine/controlplane_test.go similarity index 75% rename from pkg/asset/ignition/machine/master_test.go rename to pkg/asset/ignition/machine/controlplane_test.go index f727c290a01..5a93ca89980 100644 --- a/pkg/asset/ignition/machine/master_test.go +++ b/pkg/asset/ignition/machine/controlplane_test.go @@ -15,8 +15,8 @@ import ( "github.com/openshift/installer/pkg/types/aws" ) -// TestMasterGenerate tests generating the master asset. -func TestMasterGenerate(t *testing.T) { +// TestControlPlaneGenerate tests generating the control plane asset. +func TestControlPlaneGenerate(t *testing.T) { installConfig := &installconfig.InstallConfig{ Config: &types.InstallConfig{ ObjectMeta: metav1.ObjectMeta{ @@ -32,7 +32,7 @@ func TestMasterGenerate(t *testing.T) { }, }, ControlPlane: &types.MachinePool{ - Name: "master", + Name: "control-plane", Replicas: pointer.Int64Ptr(3), }, }, @@ -45,16 +45,16 @@ func TestMasterGenerate(t *testing.T) { parents := asset.Parents{} parents.Add(installConfig, rootCA) - master := &Master{} - err = master.Generate(parents) - assert.NoError(t, err, "unexpected error generating master asset") + controlPlane := &ControlPlane{} + err = controlPlane.Generate(parents) + assert.NoError(t, err, "unexpected error generating control plane asset") expectedIgnitionConfigNames := []string{ - "master.ign", + "control-plane.ign", } - actualFiles := master.Files() + actualFiles := controlPlane.Files() actualIgnitionConfigNames := make([]string, len(actualFiles)) for i, f := range actualFiles { actualIgnitionConfigNames[i] = f.Filename } - assert.Equal(t, expectedIgnitionConfigNames, actualIgnitionConfigNames, "unexpected names for master ignition configs") + assert.Equal(t, expectedIgnitionConfigNames, actualIgnitionConfigNames, "unexpected names for control plane ignition configs") } diff --git a/pkg/asset/ignition/machine/node.go b/pkg/asset/ignition/machine/node.go index 28f104b5359..868112e7381 100644 --- a/pkg/asset/ignition/machine/node.go +++ b/pkg/asset/ignition/machine/node.go @@ -12,7 +12,7 @@ import ( // pointerIgnitionConfig generates a config which references the remote config // served by the machine config server. -func pointerIgnitionConfig(installConfig *types.InstallConfig, rootCA []byte, role string) *ignition.Config { +func pointerIgnitionConfig(installConfig *types.InstallConfig, rootCA []byte, role types.MachineRole) *ignition.Config { return &ignition.Config{ Ignition: ignition.Ignition{ Version: ignition.MaxVersion.String(), @@ -22,7 +22,7 @@ func pointerIgnitionConfig(installConfig *types.InstallConfig, rootCA []byte, ro return &url.URL{ Scheme: "https", Host: fmt.Sprintf("%s-api.%s:22623", installConfig.ObjectMeta.Name, installConfig.BaseDomain), - Path: fmt.Sprintf("/config/%s", role), + Path: fmt.Sprintf("/config/%s", role.MachineConfigOperatorMachineRole()), } }().String(), }}, diff --git a/pkg/asset/installconfig/installconfig_test.go b/pkg/asset/installconfig/installconfig_test.go index e086e303ca2..fff59abb2b3 100644 --- a/pkg/asset/installconfig/installconfig_test.go +++ b/pkg/asset/installconfig/installconfig_test.go @@ -76,12 +76,12 @@ func TestInstallConfigGenerate_FillsInDefaults(t *testing.T) { }, }, ControlPlane: &types.MachinePool{ - Name: "master", + Name: "control-plane", Replicas: pointer.Int64Ptr(3), }, Compute: []types.MachinePool{ { - Name: "worker", + Name: "compute", Replicas: pointer.Int64Ptr(3), }, }, @@ -135,12 +135,12 @@ pullSecret: "{\"auths\":{\"example.com\":{\"auth\":\"authorization value\"}}}" }, }, ControlPlane: &types.MachinePool{ - Name: "master", + Name: "control-plane", Replicas: pointer.Int64Ptr(3), }, Compute: []types.MachinePool{ { - Name: "worker", + Name: "compute", Replicas: pointer.Int64Ptr(3), }, }, diff --git a/pkg/asset/machines/aws/machines.go b/pkg/asset/machines/aws/machines.go index 9051f188b6c..e2c156e17ca 100644 --- a/pkg/asset/machines/aws/machines.go +++ b/pkg/asset/machines/aws/machines.go @@ -18,7 +18,7 @@ import ( ) // Machines returns a list of machines for a machinepool. -func Machines(clusterID string, config *types.InstallConfig, pool *types.MachinePool, osImage, role, userDataSecret string) ([]machineapi.Machine, error) { +func Machines(clusterID string, config *types.InstallConfig, pool *types.MachinePool, osImage string, role types.MachineRole, userDataSecret string) ([]machineapi.Machine, error) { if configPlatform := config.Platform.Name(); configPlatform != aws.Name { return nil, fmt.Errorf("non-AWS configuration: %q", configPlatform) } @@ -51,8 +51,8 @@ func Machines(clusterID string, config *types.InstallConfig, pool *types.Machine Name: fmt.Sprintf("%s-%s-%d", clustername, pool.Name, idx), Labels: map[string]string{ "sigs.k8s.io/cluster-api-cluster": clustername, - "sigs.k8s.io/cluster-api-machine-role": role, - "sigs.k8s.io/cluster-api-machine-type": role, + "sigs.k8s.io/cluster-api-machine-role": role.ClusterAPIMachineRole(), + "sigs.k8s.io/cluster-api-machine-type": role.ClusterAPIMachineRole(), }, }, Spec: machineapi.MachineSpec{ @@ -69,7 +69,7 @@ func Machines(clusterID string, config *types.InstallConfig, pool *types.Machine return machines, nil } -func provider(clusterID, clusterName string, platform *aws.Platform, mpool *aws.MachinePool, osImage string, azIdx int, role, userDataSecret string) (*awsprovider.AWSMachineProviderConfig, error) { +func provider(clusterID, clusterName string, platform *aws.Platform, mpool *aws.MachinePool, osImage string, azIdx int, role types.MachineRole, userDataSecret string) (*awsprovider.AWSMachineProviderConfig, error) { az := mpool.Zones[azIdx] amiID := osImage tags, err := tagsFromUserTags(clusterID, clusterName, platform.UserTags) @@ -129,8 +129,8 @@ func tagsFromUserTags(clusterID, clusterName string, usertags map[string]string) return tags, nil } -// ConfigMasters sets the PublicIP flag and assigns a set of load balancers to the given machines -func ConfigMasters(machines []machineapi.Machine, clusterName string) { +// ConfigControlPlane sets the PublicIP flag and assigns a set of load balancers to the given machines +func ConfigControlPlane(machines []machineapi.Machine, clusterName string) { for _, machine := range machines { providerSpec := machine.Spec.ProviderSpec.Value.Object.(*awsprovider.AWSMachineProviderConfig) providerSpec.PublicIP = pointer.BoolPtr(true) diff --git a/pkg/asset/machines/aws/machinesets.go b/pkg/asset/machines/aws/machinesets.go index 5d2889d7187..cb78f39d442 100644 --- a/pkg/asset/machines/aws/machinesets.go +++ b/pkg/asset/machines/aws/machinesets.go @@ -14,7 +14,7 @@ import ( ) // MachineSets returns a list of machinesets for a machinepool. -func MachineSets(clusterID string, config *types.InstallConfig, pool *types.MachinePool, osImage, role, userDataSecret string) ([]*machineapi.MachineSet, error) { +func MachineSets(clusterID string, config *types.InstallConfig, pool *types.MachinePool, osImage string, role types.MachineRole, userDataSecret string) ([]*machineapi.MachineSet, error) { if configPlatform := config.Platform.Name(); configPlatform != aws.Name { return nil, fmt.Errorf("non-AWS configuration: %q", configPlatform) } @@ -53,8 +53,8 @@ func MachineSets(clusterID string, config *types.InstallConfig, pool *types.Mach Name: name, Labels: map[string]string{ "sigs.k8s.io/cluster-api-cluster": clustername, - "sigs.k8s.io/cluster-api-machine-role": role, - "sigs.k8s.io/cluster-api-machine-type": role, + "sigs.k8s.io/cluster-api-machine-role": role.ClusterAPIMachineRole(), + "sigs.k8s.io/cluster-api-machine-type": role.ClusterAPIMachineRole(), }, }, Spec: machineapi.MachineSetSpec{ @@ -70,8 +70,8 @@ func MachineSets(clusterID string, config *types.InstallConfig, pool *types.Mach Labels: map[string]string{ "sigs.k8s.io/cluster-api-machineset": name, "sigs.k8s.io/cluster-api-cluster": clustername, - "sigs.k8s.io/cluster-api-machine-role": role, - "sigs.k8s.io/cluster-api-machine-type": role, + "sigs.k8s.io/cluster-api-machine-role": role.ClusterAPIMachineRole(), + "sigs.k8s.io/cluster-api-machine-type": role.ClusterAPIMachineRole(), }, }, Spec: machineapi.MachineSpec{ diff --git a/pkg/asset/machines/worker.go b/pkg/asset/machines/compute.go similarity index 78% rename from pkg/asset/machines/worker.go rename to pkg/asset/machines/compute.go index 44b3e781ef7..1d89371955b 100644 --- a/pkg/asset/machines/worker.go +++ b/pkg/asset/machines/compute.go @@ -17,6 +17,7 @@ import ( "github.com/openshift/installer/pkg/asset/machines/libvirt" "github.com/openshift/installer/pkg/asset/machines/openstack" "github.com/openshift/installer/pkg/asset/rhcos" + "github.com/openshift/installer/pkg/types" awstypes "github.com/openshift/installer/pkg/types/aws" libvirttypes "github.com/openshift/installer/pkg/types/libvirt" nonetypes "github.com/openshift/installer/pkg/types/none" @@ -42,22 +43,22 @@ func defaultOpenStackMachinePoolPlatform(flavor string) openstacktypes.MachinePo } } -// Worker generates the machinesets for `worker` machine pool. -type Worker struct { +// Compute generates the machinesets for compute machine pools. +type Compute struct { MachineSetRaw []byte UserDataSecretRaw []byte } -var _ asset.Asset = (*Worker)(nil) +var _ asset.Asset = (*Compute)(nil) -// Name returns a human friendly name for the Worker Asset. -func (w *Worker) Name() string { - return "Worker Machines" +// Name returns a human friendly name for the Compute Asset. +func (a *Compute) Name() string { + return "Compute Machines" } // Dependencies returns all of the dependencies directly needed by the -// Worker asset -func (w *Worker) Dependencies() []asset.Asset { +// Compute asset +func (a *Compute) Dependencies() []asset.Asset { return []asset.Asset{ &installconfig.ClusterID{}, // PlatformCredsCheck just checks the creds (and asks, if needed) @@ -66,23 +67,23 @@ func (w *Worker) Dependencies() []asset.Asset { &installconfig.PlatformCredsCheck{}, &installconfig.InstallConfig{}, new(rhcos.Image), - &machine.Worker{}, + &machine.Compute{}, } } -// Generate generates the Worker asset. -func (w *Worker) Generate(dependencies asset.Parents) error { +// Generate generates the Compute asset. +func (a *Compute) Generate(dependencies asset.Parents) error { clusterID := &installconfig.ClusterID{} installconfig := &installconfig.InstallConfig{} rhcosImage := new(rhcos.Image) - wign := &machine.Worker{} - dependencies.Get(clusterID, installconfig, rhcosImage, wign) + cign := &machine.Compute{} + dependencies.Get(clusterID, installconfig, rhcosImage, cign) var err error - userDataMap := map[string][]byte{"worker-user-data": wign.File.Data} - w.UserDataSecretRaw, err = userDataList(userDataMap) + userDataMap := map[string][]byte{"compute-user-data": cign.File.Data} + a.UserDataSecretRaw, err = userDataList(userDataMap) if err != nil { - return errors.Wrap(err, "failed to create user-data secret for worker machines") + return errors.Wrap(err, "failed to create user-data secret for compute machines") } machineSets := []runtime.Object{} @@ -103,9 +104,9 @@ func (w *Worker) Generate(dependencies asset.Parents) error { mpool.Zones = azs } pool.Platform.AWS = &mpool - sets, err := aws.MachineSets(clusterID.ClusterID, ic, &pool, string(*rhcosImage), "worker", "worker-user-data") + sets, err := aws.MachineSets(clusterID.ClusterID, ic, &pool, string(*rhcosImage), types.ComputeMachineRole, "compute-user-data") if err != nil { - return errors.Wrap(err, "failed to create worker machine objects") + return errors.Wrap(err, "failed to create compute machine objects") } for _, set := range sets { machineSets = append(machineSets, set) @@ -115,9 +116,9 @@ func (w *Worker) Generate(dependencies asset.Parents) error { mpool.Set(ic.Platform.Libvirt.DefaultMachinePlatform) mpool.Set(pool.Platform.Libvirt) pool.Platform.Libvirt = &mpool - sets, err := libvirt.MachineSets(clusterID.ClusterID, ic, &pool, "worker", "worker-user-data") + sets, err := libvirt.MachineSets(clusterID.ClusterID, ic, &pool, types.ComputeMachineRole, "compute-user-data") if err != nil { - return errors.Wrap(err, "failed to create worker machine objects") + return errors.Wrap(err, "failed to create compute machine objects") } for _, set := range sets { machineSets = append(machineSets, set) @@ -129,9 +130,9 @@ func (w *Worker) Generate(dependencies asset.Parents) error { mpool.Set(pool.Platform.OpenStack) pool.Platform.OpenStack = &mpool - sets, err := openstack.MachineSets(clusterID.ClusterID, ic, &pool, string(*rhcosImage), "worker", "worker-user-data") + sets, err := openstack.MachineSets(clusterID.ClusterID, ic, &pool, string(*rhcosImage), types.ComputeMachineRole, "compute-user-data") if err != nil { - return errors.Wrap(err, "failed to create master machine objects") + return errors.Wrap(err, "failed to create compute machine objects") } for _, set := range sets { machineSets = append(machineSets, set) @@ -155,7 +156,7 @@ func (w *Worker) Generate(dependencies asset.Parents) error { if err != nil { return errors.Wrap(err, "failed to marshal") } - w.MachineSetRaw = raw + a.MachineSetRaw = raw return nil } diff --git a/pkg/asset/machines/master.go b/pkg/asset/machines/controlplane.go similarity index 61% rename from pkg/asset/machines/master.go rename to pkg/asset/machines/controlplane.go index 4ab7a5aa05f..edac3e830f0 100644 --- a/pkg/asset/machines/master.go +++ b/pkg/asset/machines/controlplane.go @@ -16,6 +16,7 @@ import ( "github.com/openshift/installer/pkg/asset/machines/libvirt" "github.com/openshift/installer/pkg/asset/machines/openstack" "github.com/openshift/installer/pkg/asset/rhcos" + "github.com/openshift/installer/pkg/types" awstypes "github.com/openshift/installer/pkg/types/aws" libvirttypes "github.com/openshift/installer/pkg/types/libvirt" nonetypes "github.com/openshift/installer/pkg/types/none" @@ -29,31 +30,31 @@ import ( openstackprovider "sigs.k8s.io/cluster-api-provider-openstack/pkg/apis/openstackproviderconfig/v1alpha1" ) -// Master generates the machines for the `master` machine pool. -type Master struct { +// ControlPlane generates the machines for the control-plane machine pool. +type ControlPlane struct { FileList []*asset.File } var ( directory = "openshift" - // MasterMachineFileName is the format string for constucting the master Machine filenames. - MasterMachineFileName = "99_openshift-cluster-api_master-machines-%s.yaml" + // ControlPlaneMachineFileName is the format string for constucting the control-plane Machine filenames. + ControlPlaneMachineFileName = "99_openshift-cluster-api_control-plane-machines-%s.yaml" - // MasterUserDataFileName is the filename used for the master user-data secret. - MasterUserDataFileName = "99_openshift-cluster-api_master-user-data-secret.yaml" + // ControlPlaneUserDataFileName is the filename used for the control-plane user-data secret. + ControlPlaneUserDataFileName = "99_openshift-cluster-api_control-plane-user-data-secret.yaml" - _ asset.WritableAsset = (*Master)(nil) + _ asset.WritableAsset = (*ControlPlane)(nil) ) -// Name returns a human friendly name for the Master Asset. -func (m *Master) Name() string { - return "Master Machines" +// Name returns a human friendly name for the Control Plane Asset. +func (a *ControlPlane) Name() string { + return "Control Plane Machines" } // Dependencies returns all of the dependencies directly needed by the -// Master asset -func (m *Master) Dependencies() []asset.Asset { +// ControlPlane asset +func (a *ControlPlane) Dependencies() []asset.Asset { return []asset.Asset{ &installconfig.ClusterID{}, // PlatformCredsCheck just checks the creds (and asks, if needed) @@ -62,17 +63,17 @@ func (m *Master) Dependencies() []asset.Asset { &installconfig.PlatformCredsCheck{}, &installconfig.InstallConfig{}, new(rhcos.Image), - &machine.Master{}, + &machine.ControlPlane{}, } } -// Generate generates the Master asset. -func (m *Master) Generate(dependencies asset.Parents) error { +// Generate generates the ControlPlane asset. +func (a *ControlPlane) Generate(dependencies asset.Parents) error { clusterID := &installconfig.ClusterID{} installconfig := &installconfig.InstallConfig{} rhcosImage := new(rhcos.Image) - mign := &machine.Master{} - dependencies.Get(clusterID, installconfig, rhcosImage, mign) + cpign := &machine.ControlPlane{} + dependencies.Get(clusterID, installconfig, rhcosImage, cpign) var err error machines := []machineapi.Machine{} @@ -92,19 +93,19 @@ func (m *Master) Generate(dependencies asset.Parents) error { mpool.Zones = azs } pool.Platform.AWS = &mpool - machines, err = aws.Machines(clusterID.ClusterID, ic, pool, string(*rhcosImage), "master", "master-user-data") + machines, err = aws.Machines(clusterID.ClusterID, ic, pool, string(*rhcosImage), types.ControlPlaneMachineRole, "control-plane-user-data") if err != nil { - return errors.Wrap(err, "failed to create master machine objects") + return errors.Wrap(err, "failed to create control plane machine objects") } - aws.ConfigMasters(machines, ic.ObjectMeta.Name) + aws.ConfigControlPlane(machines, ic.ObjectMeta.Name) case libvirttypes.Name: mpool := defaultLibvirtMachinePoolPlatform() mpool.Set(ic.Platform.Libvirt.DefaultMachinePlatform) mpool.Set(pool.Platform.Libvirt) pool.Platform.Libvirt = &mpool - machines, err = libvirt.Machines(clusterID.ClusterID, ic, pool, "master", "master-user-data") + machines, err = libvirt.Machines(clusterID.ClusterID, ic, pool, types.ControlPlaneMachineRole, "control-plane-user-data") if err != nil { - return errors.Wrap(err, "failed to create master machine objects") + return errors.Wrap(err, "failed to create control plane machine objects") } case nonetypes.Name: return nil @@ -114,41 +115,41 @@ func (m *Master) Generate(dependencies asset.Parents) error { mpool.Set(pool.Platform.OpenStack) pool.Platform.OpenStack = &mpool - machines, err = openstack.Machines(clusterID.ClusterID, ic, pool, string(*rhcosImage), "master", "master-user-data") + machines, err = openstack.Machines(clusterID.ClusterID, ic, pool, string(*rhcosImage), types.ControlPlaneMachineRole, "control-plane-user-data") if err != nil { - return errors.Wrap(err, "failed to create master machine objects") + return errors.Wrap(err, "failed to create control plane machine objects") } - openstack.ConfigMasters(machines, ic.ObjectMeta.Name) + openstack.ConfigControlPlane(machines, ic.ObjectMeta.Name) default: return fmt.Errorf("invalid Platform") } - userDataMap := map[string][]byte{"master-user-data": mign.File.Data} + userDataMap := map[string][]byte{"control-plane-user-data": cpign.File.Data} data, err := userDataList(userDataMap) if err != nil { - return errors.Wrap(err, "failed to create user-data secret for master machines") + return errors.Wrap(err, "failed to create user-data secret for control plane machines") } - m.FileList = []*asset.File{{ - Filename: filepath.Join(directory, MasterUserDataFileName), + a.FileList = []*asset.File{{ + Filename: filepath.Join(directory, ControlPlaneUserDataFileName), Data: data, }} count := len(machines) if count == 0 { - return errors.New("at least one master machine must be configured") + return errors.New("at least one control plane machine must be configured") } padFormat := fmt.Sprintf("%%0%dd", len(fmt.Sprintf("%d", count))) for i, machine := range machines { data, err := yaml.Marshal(machine) if err != nil { - return errors.Wrapf(err, "marshal master %d", i) + return errors.Wrapf(err, "marshal control plane %d", i) } padded := fmt.Sprintf(padFormat, i) - m.FileList = append(m.FileList, &asset.File{ - Filename: filepath.Join(directory, fmt.Sprintf(MasterMachineFileName, padded)), + a.FileList = append(a.FileList, &asset.File{ + Filename: filepath.Join(directory, fmt.Sprintf(ControlPlaneMachineFileName, padded)), Data: data, }) } @@ -157,39 +158,39 @@ func (m *Master) Generate(dependencies asset.Parents) error { } // Files returns the files generated by the asset. -func (m *Master) Files() []*asset.File { - return m.FileList +func (a *ControlPlane) Files() []*asset.File { + return a.FileList } // Load reads the asset files from disk. -func (m *Master) Load(f asset.FileFetcher) (found bool, err error) { - file, err := f.FetchByName(filepath.Join(directory, MasterUserDataFileName)) +func (a *ControlPlane) Load(f asset.FileFetcher) (found bool, err error) { + file, err := f.FetchByName(filepath.Join(directory, ControlPlaneUserDataFileName)) if err != nil { if os.IsNotExist(err) { return false, nil } return false, err } - m.FileList = []*asset.File{file} + a.FileList = []*asset.File{file} - fileList, err := f.FetchByPattern(filepath.Join(directory, fmt.Sprintf(MasterMachineFileName, "*"))) + fileList, err := f.FetchByPattern(filepath.Join(directory, fmt.Sprintf(ControlPlaneMachineFileName, "*"))) if err != nil { return true, err } if len(fileList) == 0 { - return true, errors.Errorf("master machine manifests are required if you also provide %s", file.Filename) + return true, errors.Errorf("control plane machine manifests are required if you also provide %s", file.Filename) } - m.FileList = append(m.FileList, fileList...) + a.FileList = append(a.FileList, fileList...) return true, nil } -// Machines returns master Machine manifest YAML. -func (m *Master) Machines() [][]byte { +// Machines returns control plane Machine manifest YAML. +func (a *ControlPlane) Machines() [][]byte { machines := [][]byte{} - userData := filepath.Join(directory, MasterUserDataFileName) - for _, file := range m.FileList { + userData := filepath.Join(directory, ControlPlaneUserDataFileName) + for _, file := range a.FileList { if file.Filename == userData { continue } @@ -198,8 +199,8 @@ func (m *Master) Machines() [][]byte { return machines } -// StructuredMachines returns master Machine manifest structures. -func (m *Master) StructuredMachines() ([]machineapi.Machine, error) { +// StructuredMachines returns control plane Machine manifest structures. +func (a *ControlPlane) StructuredMachines() ([]machineapi.Machine, error) { scheme := runtime.NewScheme() awsapi.AddToScheme(scheme) libvirtapi.AddToScheme(scheme) @@ -211,16 +212,16 @@ func (m *Master) StructuredMachines() ([]machineapi.Machine, error) { ) machines := []machineapi.Machine{} - for i, data := range m.Machines() { + for i, data := range a.Machines() { machine := &machineapi.Machine{} err := yaml.Unmarshal(data, &machine) if err != nil { - return machines, errors.Wrapf(err, "unmarshal master %d", i) + return machines, errors.Wrapf(err, "unmarshal control plane %d", i) } obj, _, err := decoder.Decode(machine.Spec.ProviderSpec.Value.Raw, nil, nil) if err != nil { - return machines, errors.Wrapf(err, "unmarshal master %d", i) + return machines, errors.Wrapf(err, "unmarshal control plane %d", i) } machine.Spec.ProviderSpec.Value = &runtime.RawExtension{Object: obj} diff --git a/pkg/asset/machines/libvirt/machines.go b/pkg/asset/machines/libvirt/machines.go index 066e515a2ff..3f6d3d54831 100644 --- a/pkg/asset/machines/libvirt/machines.go +++ b/pkg/asset/machines/libvirt/machines.go @@ -14,7 +14,7 @@ import ( ) // Machines returns a list of machines for a machinepool. -func Machines(clusterID string, config *types.InstallConfig, pool *types.MachinePool, role, userDataSecret string) ([]machineapi.Machine, error) { +func Machines(clusterID string, config *types.InstallConfig, pool *types.MachinePool, role types.MachineRole, userDataSecret string) ([]machineapi.Machine, error) { if configPlatform := config.Platform.Name(); configPlatform != libvirt.Name { return nil, fmt.Errorf("non-Libvirt configuration: %q", configPlatform) } @@ -41,8 +41,8 @@ func Machines(clusterID string, config *types.InstallConfig, pool *types.Machine Name: fmt.Sprintf("%s-%s-%d", clustername, pool.Name, idx), Labels: map[string]string{ "sigs.k8s.io/cluster-api-cluster": clustername, - "sigs.k8s.io/cluster-api-machine-role": role, - "sigs.k8s.io/cluster-api-machine-type": role, + "sigs.k8s.io/cluster-api-machine-role": role.ClusterAPIMachineRole(), + "sigs.k8s.io/cluster-api-machine-type": role.ClusterAPIMachineRole(), }, }, Spec: machineapi.MachineSpec{ diff --git a/pkg/asset/machines/libvirt/machinesets.go b/pkg/asset/machines/libvirt/machinesets.go index aaf594da5f8..1d54b088e01 100644 --- a/pkg/asset/machines/libvirt/machinesets.go +++ b/pkg/asset/machines/libvirt/machinesets.go @@ -14,7 +14,7 @@ import ( ) // MachineSets returns a list of machinesets for a machinepool. -func MachineSets(clusterID string, config *types.InstallConfig, pool *types.MachinePool, role, userDataSecret string) ([]*machineapi.MachineSet, error) { +func MachineSets(clusterID string, config *types.InstallConfig, pool *types.MachinePool, role types.MachineRole, userDataSecret string) ([]*machineapi.MachineSet, error) { if configPlatform := config.Platform.Name(); configPlatform != libvirt.Name { return nil, fmt.Errorf("non-Libvirt configuration: %q", configPlatform) } @@ -44,8 +44,8 @@ func MachineSets(clusterID string, config *types.InstallConfig, pool *types.Mach Name: name, Labels: map[string]string{ "sigs.k8s.io/cluster-api-cluster": clustername, - "sigs.k8s.io/cluster-api-machine-role": role, - "sigs.k8s.io/cluster-api-machine-type": role, + "sigs.k8s.io/cluster-api-machine-role": role.ClusterAPIMachineRole(), + "sigs.k8s.io/cluster-api-machine-type": role.ClusterAPIMachineRole(), }, }, Spec: machineapi.MachineSetSpec{ @@ -61,8 +61,8 @@ func MachineSets(clusterID string, config *types.InstallConfig, pool *types.Mach Labels: map[string]string{ "sigs.k8s.io/cluster-api-machineset": name, "sigs.k8s.io/cluster-api-cluster": clustername, - "sigs.k8s.io/cluster-api-machine-role": role, - "sigs.k8s.io/cluster-api-machine-type": role, + "sigs.k8s.io/cluster-api-machine-role": role.ClusterAPIMachineRole(), + "sigs.k8s.io/cluster-api-machine-type": role.ClusterAPIMachineRole(), }, }, Spec: machineapi.MachineSpec{ diff --git a/pkg/asset/machines/openstack/machines.go b/pkg/asset/machines/openstack/machines.go index a64be44bba9..63e691b2f28 100644 --- a/pkg/asset/machines/openstack/machines.go +++ b/pkg/asset/machines/openstack/machines.go @@ -28,7 +28,7 @@ const ( ) // Machines returns a list of machines for a machinepool. -func Machines(clusterID string, config *types.InstallConfig, pool *types.MachinePool, osImage, role, userDataSecret string) ([]machineapi.Machine, error) { +func Machines(clusterID string, config *types.InstallConfig, pool *types.MachinePool, osImage string, role types.MachineRole, userDataSecret string) ([]machineapi.Machine, error) { if configPlatform := config.Platform.Name(); configPlatform != openstack.Name { return nil, fmt.Errorf("non-OpenStack configuration: %q", configPlatform) } @@ -60,8 +60,8 @@ func Machines(clusterID string, config *types.InstallConfig, pool *types.Machine Name: fmt.Sprintf("%s-%s-%d", clustername, pool.Name, idx), Labels: map[string]string{ "sigs.k8s.io/cluster-api-cluster": clustername, - "sigs.k8s.io/cluster-api-machine-role": role, - "sigs.k8s.io/cluster-api-machine-type": role, + "sigs.k8s.io/cluster-api-machine-role": role.ClusterAPIMachineRole(), + "sigs.k8s.io/cluster-api-machine-type": role.ClusterAPIMachineRole(), }, }, Spec: machineapi.MachineSpec{ @@ -78,7 +78,7 @@ func Machines(clusterID string, config *types.InstallConfig, pool *types.Machine return machines, nil } -func provider(clusterID, clusterName string, platform *openstack.Platform, mpool *openstack.MachinePool, osImage string, az string, role, userDataSecret string) (*openstackprovider.OpenstackProviderSpec, error) { +func provider(clusterID, clusterName string, platform *openstack.Platform, mpool *openstack.MachinePool, osImage string, az string, role types.MachineRole, userDataSecret string) (*openstackprovider.OpenstackProviderSpec, error) { return &openstackprovider.OpenstackProviderSpec{ TypeMeta: metav1.TypeMeta{ APIVersion: "openstackproviderconfig.k8s.io/v1alpha1", @@ -101,13 +101,13 @@ func provider(clusterID, clusterName string, platform *openstack.Platform, mpool }, }, AvailabilityZone: az, - SecurityGroups: []string{role}, + SecurityGroups: []string{string(role)}, // TODO(flaper87): Trunk support missing. Need to add it back }, nil } -// ConfigMasters sets the PublicIP flag and assigns a set of load balancers to the given machines -func ConfigMasters(machines []machineapi.Machine, clusterName string) { +// ConfigControlPlane sets the PublicIP flag and assigns a set of load balancers to the given machines +func ConfigControlPlane(machines []machineapi.Machine, clusterName string) { /*for _, machine := range machines { providerSpec := machine.Spec.ProviderSpec.Value.Object.(*openstackprovider.OpenstackProviderSpec) }*/ diff --git a/pkg/asset/machines/openstack/machinesets.go b/pkg/asset/machines/openstack/machinesets.go index 6092a7cba06..5512a987a10 100644 --- a/pkg/asset/machines/openstack/machinesets.go +++ b/pkg/asset/machines/openstack/machinesets.go @@ -14,7 +14,7 @@ import ( ) // MachineSets returns a list of machinesets for a machinepool. -func MachineSets(clusterID string, config *types.InstallConfig, pool *types.MachinePool, osImage, role, userDataSecret string) ([]*clusterapi.MachineSet, error) { +func MachineSets(clusterID string, config *types.InstallConfig, pool *types.MachinePool, osImage string, role types.MachineRole, userDataSecret string) ([]*clusterapi.MachineSet, error) { if configPlatform := config.Platform.Name(); configPlatform != openstack.Name { return nil, fmt.Errorf("non-OpenStack configuration: %q", configPlatform) } @@ -50,8 +50,8 @@ func MachineSets(clusterID string, config *types.InstallConfig, pool *types.Mach Name: name, Labels: map[string]string{ "sigs.k8s.io/cluster-api-cluster": clustername, - "sigs.k8s.io/cluster-api-machine-role": role, - "sigs.k8s.io/cluster-api-machine-type": role, + "sigs.k8s.io/cluster-api-machine-role": role.ClusterAPIMachineRole(), + "sigs.k8s.io/cluster-api-machine-type": role.ClusterAPIMachineRole(), }, }, Spec: clusterapi.MachineSetSpec{ @@ -67,8 +67,8 @@ func MachineSets(clusterID string, config *types.InstallConfig, pool *types.Mach Labels: map[string]string{ "sigs.k8s.io/cluster-api-machineset": name, "sigs.k8s.io/cluster-api-cluster": clustername, - "sigs.k8s.io/cluster-api-machine-role": role, - "sigs.k8s.io/cluster-api-machine-type": role, + "sigs.k8s.io/cluster-api-machine-role": role.ClusterAPIMachineRole(), + "sigs.k8s.io/cluster-api-machine-type": role.ClusterAPIMachineRole(), }, }, Spec: clusterapi.MachineSpec{ diff --git a/pkg/asset/manifests/cluster_k8s_io.go b/pkg/asset/manifests/cluster_k8s_io.go index 3421c42dfa9..a17790be74c 100644 --- a/pkg/asset/manifests/cluster_k8s_io.go +++ b/pkg/asset/manifests/cluster_k8s_io.go @@ -34,7 +34,7 @@ func (c *ClusterK8sIO) Dependencies() []asset.Asset { } } -// Generate generates the Worker asset. +// Generate generates the ClusterK8sIO asset. func (c *ClusterK8sIO) Generate(dependencies asset.Parents) error { installconfig := &installconfig.InstallConfig{} dependencies.Get(installconfig) diff --git a/pkg/asset/manifests/openshift.go b/pkg/asset/manifests/openshift.go index c63a9d70b15..0836e94f709 100644 --- a/pkg/asset/manifests/openshift.go +++ b/pkg/asset/manifests/openshift.go @@ -48,7 +48,7 @@ func (o *Openshift) Dependencies() []asset.Asset { return []asset.Asset{ &installconfig.InstallConfig{}, &ClusterK8sIO{}, - &machines.Worker{}, + &machines.Compute{}, &password.KubeadminPassword{}, &openshift.BindingDiscovery{}, @@ -63,8 +63,8 @@ func (o *Openshift) Generate(dependencies asset.Parents) error { installConfig := &installconfig.InstallConfig{} kubeadminPassword := &password.KubeadminPassword{} clusterk8sio := &ClusterK8sIO{} - worker := &machines.Worker{} - dependencies.Get(installConfig, clusterk8sio, worker, kubeadminPassword) + compute := &machines.Compute{} + dependencies.Get(installConfig, clusterk8sio, compute, kubeadminPassword) var cloudCreds cloudCredsSecretData platform := installConfig.Config.Platform.Name() switch platform { @@ -123,11 +123,11 @@ func (o *Openshift) Generate(dependencies asset.Parents) error { roleCloudCredsSecretReader) assetData := map[string][]byte{ - "99_binding-discovery.yaml": []byte(bindingDiscovery.Files()[0].Data), - "99_kubeadmin-password-secret.yaml": applyTemplateData(kubeadminPasswordSecret.Files()[0].Data, templateData), - "99_openshift-cluster-api_cluster.yaml": clusterk8sio.Raw, - "99_openshift-cluster-api_worker-machineset.yaml": worker.MachineSetRaw, - "99_openshift-cluster-api_worker-user-data-secret.yaml": worker.UserDataSecretRaw, + "99_binding-discovery.yaml": []byte(bindingDiscovery.Files()[0].Data), + "99_kubeadmin-password-secret.yaml": applyTemplateData(kubeadminPasswordSecret.Files()[0].Data, templateData), + "99_openshift-cluster-api_cluster.yaml": clusterk8sio.Raw, + "99_openshift-cluster-api_compute-machineset.yaml": compute.MachineSetRaw, + "99_openshift-cluster-api_compute-user-data-secret.yaml": compute.UserDataSecretRaw, } switch platform { @@ -161,14 +161,14 @@ func (o *Openshift) Load(f asset.FileFetcher) (bool, error) { return false, err } - masterMachinePattern := fmt.Sprintf(machines.MasterMachineFileName, "*") + controlPlaneMachinePattern := fmt.Sprintf(machines.ControlPlaneMachineFileName, "*") for _, file := range fileList { filename := filepath.Base(file.Filename) - if filename == machines.MasterUserDataFileName { + if filename == machines.ControlPlaneUserDataFileName { continue } - matched, err := filepath.Match(masterMachinePattern, filename) + matched, err := filepath.Match(controlPlaneMachinePattern, filename) if err != nil { return true, err } diff --git a/pkg/asset/manifests/template.go b/pkg/asset/manifests/template.go index 1652ec727c4..2837cb8f245 100644 --- a/pkg/asset/manifests/template.go +++ b/pkg/asset/manifests/template.go @@ -27,7 +27,6 @@ type bootkubeTemplateData struct { McsTLSKey string PullSecretBase64 string RootCaCert string - WorkerIgnConfig string CVOClusterID string EtcdEndpointHostnames []string EtcdEndpointDNSSuffix string diff --git a/pkg/asset/store/assetcreate_test.go b/pkg/asset/store/assetcreate_test.go index acdbf6c0f0c..c2058eef62d 100644 --- a/pkg/asset/store/assetcreate_test.go +++ b/pkg/asset/store/assetcreate_test.go @@ -7,9 +7,13 @@ import ( "reflect" "testing" + "github.com/sirupsen/logrus" + "github.com/stretchr/testify/assert" "github.com/openshift/installer/pkg/asset" + "github.com/openshift/installer/pkg/asset/cluster" + "github.com/openshift/installer/pkg/asset/machines" "github.com/openshift/installer/pkg/asset/targets" ) @@ -33,6 +37,7 @@ const userProvidedAssets = `{ }` func TestCreatedAssetsAreNotDirty(t *testing.T) { + logrus.SetLevel(logrus.DebugLevel) cases := []struct { name string targets []asset.WritableAsset @@ -86,19 +91,17 @@ func TestCreatedAssetsAreNotDirty(t *testing.T) { t.Fatalf("failed to create new asset store: %v", err) } - exists := struct{}{} - emptyAssets := map[string]struct{}{ - "Master Machines": exists, // no files for the 'none' platform - "Metadata": exists, // read-only + emptyAssets := map[reflect.Type]bool{ + reflect.TypeOf(&machines.ControlPlane{}): true, // no files for the 'none' platform + reflect.TypeOf(&cluster.Metadata{}): true, // read-only } for _, a := range tc.targets { - name := a.Name() newAsset := reflect.New(reflect.TypeOf(a).Elem()).Interface().(asset.WritableAsset) if err := newAssetStore.Fetch(newAsset); err != nil { t.Fatalf("failed to fetch %q in new store: %v", a.Name(), err) } - assetState := newAssetStore.assets[reflect.TypeOf(a)] - if _, ok := emptyAssets[name]; !ok { + if _, ok := emptyAssets[reflect.TypeOf(a)]; !ok { + assetState := newAssetStore.assets[reflect.TypeOf(a)] assert.Truef(t, assetState.presentOnDisk, "asset %q was not found on disk", a.Name()) } } diff --git a/pkg/asset/targets/targets.go b/pkg/asset/targets/targets.go index bb153c322b4..783e65f7e46 100644 --- a/pkg/asset/targets/targets.go +++ b/pkg/asset/targets/targets.go @@ -22,7 +22,7 @@ var ( // Manifests are the manifests targeted assets. Manifests = []asset.WritableAsset{ - &machines.Master{}, + &machines.ControlPlane{}, &manifests.Manifests{}, &manifests.Openshift{}, } @@ -49,8 +49,8 @@ var ( // IgnitionConfigs are the ignition-configs targeted assets. IgnitionConfigs = []asset.WritableAsset{ &kubeconfig.Admin{}, - &machine.Master{}, - &machine.Worker{}, + &machine.ControlPlane{}, + &machine.Compute{}, &bootstrap.Bootstrap{}, &cluster.Metadata{}, } diff --git a/pkg/tfvars/aws/aws.go b/pkg/tfvars/aws/aws.go index 2e932158048..47ea072deea 100644 --- a/pkg/tfvars/aws/aws.go +++ b/pkg/tfvars/aws/aws.go @@ -11,25 +11,25 @@ import ( type config struct { EC2AMIOverride string `json:"aws_ec2_ami_override,omitempty"` ExtraTags map[string]string `json:"aws_extra_tags,omitempty"` - EC2Type string `json:"aws_master_ec2_type,omitempty"` - IOPS int64 `json:"aws_master_root_volume_iops"` - Size int64 `json:"aws_master_root_volume_size,omitempty"` - Type string `json:"aws_master_root_volume_type,omitempty"` + EC2Type string `json:"aws_control_plane_ec2_type,omitempty"` + IOPS int64 `json:"aws_control_plane_root_volume_iops"` + Size int64 `json:"aws_control_plane_root_volume_size,omitempty"` + Type string `json:"aws_control_plane_root_volume_type,omitempty"` Region string `json:"aws_region,omitempty"` } // TFVars generates AWS-specific Terraform variables launching the cluster. -func TFVars(masterConfig *v1beta1.AWSMachineProviderConfig) ([]byte, error) { - tags := make(map[string]string, len(masterConfig.Tags)) - for _, tag := range masterConfig.Tags { +func TFVars(controlPlaneConfig *v1beta1.AWSMachineProviderConfig) ([]byte, error) { + tags := make(map[string]string, len(controlPlaneConfig.Tags)) + for _, tag := range controlPlaneConfig.Tags { tags[tag.Name] = tag.Value } - if len(masterConfig.BlockDevices) == 0 { + if len(controlPlaneConfig.BlockDevices) == 0 { return nil, errors.New("block device slice cannot be empty") } - rootVolume := masterConfig.BlockDevices[0] + rootVolume := controlPlaneConfig.BlockDevices[0] if rootVolume.EBS == nil { return nil, errors.New("EBS information must be configured for the root volume") } @@ -47,10 +47,10 @@ func TFVars(masterConfig *v1beta1.AWSMachineProviderConfig) ([]byte, error) { } cfg := &config{ - Region: masterConfig.Placement.Region, + Region: controlPlaneConfig.Placement.Region, ExtraTags: tags, - EC2AMIOverride: *masterConfig.AMI.ID, - EC2Type: masterConfig.InstanceType, + EC2AMIOverride: *controlPlaneConfig.AMI.ID, + EC2Type: controlPlaneConfig.InstanceType, Size: *rootVolume.EBS.VolumeSize, Type: *rootVolume.EBS.VolumeType, } diff --git a/pkg/tfvars/libvirt/libvirt.go b/pkg/tfvars/libvirt/libvirt.go index dc9710fa1e6..b39e55b353a 100644 --- a/pkg/tfvars/libvirt/libvirt.go +++ b/pkg/tfvars/libvirt/libvirt.go @@ -12,21 +12,21 @@ import ( ) type config struct { - URI string `json:"libvirt_uri,omitempty"` - Image string `json:"os_image,omitempty"` - IfName string `json:"libvirt_network_if"` - MasterIPs []string `json:"libvirt_master_ips,omitempty"` - BootstrapIP string `json:"libvirt_bootstrap_ip,omitempty"` + URI string `json:"libvirt_uri,omitempty"` + Image string `json:"os_image,omitempty"` + IfName string `json:"libvirt_network_if"` + ControlPlaneIPs []string `json:"libvirt_control_plane_ips,omitempty"` + BootstrapIP string `json:"libvirt_bootstrap_ip,omitempty"` } // TFVars generates libvirt-specific Terraform variables. -func TFVars(masterConfig *v1alpha1.LibvirtMachineProviderConfig, osImage string, machineCIDR *net.IPNet, bridge string, masterCount int) ([]byte, error) { +func TFVars(controlPlaneConfig *v1alpha1.LibvirtMachineProviderConfig, osImage string, machineCIDR *net.IPNet, bridge string, controlPlaneCount int) ([]byte, error) { bootstrapIP, err := cidr.Host(machineCIDR, 10) if err != nil { return nil, errors.Errorf("failed to generate bootstrap IP: %v", err) } - masterIPs, err := generateIPs("master", machineCIDR, masterCount, 11) + controlPlaneIPs, err := generateIPs("control plane", machineCIDR, controlPlaneCount, 11) if err != nil { return nil, err } @@ -37,11 +37,11 @@ func TFVars(masterConfig *v1alpha1.LibvirtMachineProviderConfig, osImage string, } cfg := &config{ - URI: masterConfig.URI, - Image: osImage, - IfName: bridge, - BootstrapIP: bootstrapIP.String(), - MasterIPs: masterIPs, + URI: controlPlaneConfig.URI, + Image: osImage, + IfName: bridge, + BootstrapIP: bootstrapIP.String(), + ControlPlaneIPs: controlPlaneIPs, } return json.MarshalIndent(cfg, "", " ") diff --git a/pkg/tfvars/openstack/openstack.go b/pkg/tfvars/openstack/openstack.go index 4971a372535..9d44c00efea 100644 --- a/pkg/tfvars/openstack/openstack.go +++ b/pkg/tfvars/openstack/openstack.go @@ -12,19 +12,19 @@ type config struct { BaseImage string `json:"openstack_base_image,omitempty"` ExternalNetwork string `json:"openstack_external_network,omitempty"` Cloud string `json:"openstack_credentials_cloud,omitempty"` - FlavorName string `json:"openstack_master_flavor_name,omitempty"` + FlavorName string `json:"openstack_control_plane_flavor_name,omitempty"` LbFloatingIP string `json:"openstack_lb_floating_ip,omitempty"` TrunkSupport string `json:"openstack_trunk_support,omitempty"` } // TFVars generates OpenStack-specific Terraform variables. -func TFVars(masterConfig *v1alpha1.OpenstackProviderSpec, region string, externalNetwork string, lbFloatingIP string, trunkSupport string) ([]byte, error) { +func TFVars(controlPlaneConfig *v1alpha1.OpenstackProviderSpec, region string, externalNetwork string, lbFloatingIP string, trunkSupport string) ([]byte, error) { cfg := &config{ Region: region, - BaseImage: masterConfig.Image, + BaseImage: controlPlaneConfig.Image, ExternalNetwork: externalNetwork, - Cloud: masterConfig.CloudName, - FlavorName: masterConfig.Flavor, + Cloud: controlPlaneConfig.CloudName, + FlavorName: controlPlaneConfig.Flavor, LbFloatingIP: lbFloatingIP, TrunkSupport: trunkSupport, } diff --git a/pkg/tfvars/tfvars.go b/pkg/tfvars/tfvars.go index c61a422b83f..fc7f72fb011 100644 --- a/pkg/tfvars/tfvars.go +++ b/pkg/tfvars/tfvars.go @@ -7,26 +7,28 @@ import ( ) type config struct { - ClusterID string `json:"cluster_id,omitempty"` - Name string `json:"cluster_name,omitempty"` - BaseDomain string `json:"base_domain,omitempty"` - MachineCIDR string `json:"machine_cidr"` - Masters int `json:"master_count,omitempty"` + ClusterID string `json:"cluster_id,omitempty"` + Name string `json:"cluster_name,omitempty"` + BaseDomain string `json:"base_domain,omitempty"` + MachineCIDR string `json:"machine_cidr"` + ControlPlaneCount int `json:"control_plane_count,omitempty"` + ControlPlaneMachinePoolName string `json:"control_plane_machine_pool_name"` - IgnitionBootstrap string `json:"ignition_bootstrap,omitempty"` - IgnitionMaster string `json:"ignition_master,omitempty"` + IgnitionBootstrap string `json:"ignition_bootstrap,omitempty"` + IgnitionControlPlane string `json:"ignition_control_plane,omitempty"` } // TFVars generates terraform.tfvar JSON for launching the cluster. -func TFVars(clusterID string, clusterName string, baseDomain string, machineCIDR *net.IPNet, bootstrapIgn string, masterIgn string, masterCount int) ([]byte, error) { +func TFVars(clusterID string, clusterName string, baseDomain string, machineCIDR *net.IPNet, bootstrapIgn string, controlPlaneIgn string, controlPlaneCount int, controlPlaneMachinePoolName string) ([]byte, error) { config := &config{ - ClusterID: clusterID, - Name: clusterName, - BaseDomain: baseDomain, - MachineCIDR: machineCIDR.String(), - Masters: masterCount, - IgnitionBootstrap: bootstrapIgn, - IgnitionMaster: masterIgn, + ClusterID: clusterID, + Name: clusterName, + BaseDomain: baseDomain, + MachineCIDR: machineCIDR.String(), + ControlPlaneCount: controlPlaneCount, + ControlPlaneMachinePoolName: controlPlaneMachinePoolName, + IgnitionBootstrap: bootstrapIgn, + IgnitionControlPlane: controlPlaneIgn, } return json.MarshalIndent(config, "", " ") diff --git a/pkg/types/consts.go b/pkg/types/consts.go new file mode 100644 index 00000000000..9513b3a5af3 --- /dev/null +++ b/pkg/types/consts.go @@ -0,0 +1,35 @@ +package types + +// MachineRole is the role for a machine +type MachineRole string + +const ( + // ControlPlaneMachineRole is used for machines that comprise the control plane + ControlPlaneMachineRole MachineRole = "control-plane" + // ComputeMachineRole is used for machines that run work loads + ComputeMachineRole MachineRole = "compute" +) + +// ClusterAPIMachineRole returns the machine role used by clusterapi. +func (r MachineRole) ClusterAPIMachineRole() string { + switch r { + case ControlPlaneMachineRole: + return "master" + case ComputeMachineRole: + return "worker" + default: + return "" + } +} + +// MachineConfigOperatorMachineRole returns the machine role used by machine-config-operator. +func (r MachineRole) MachineConfigOperatorMachineRole() string { + switch r { + case ControlPlaneMachineRole: + return "master" + case ComputeMachineRole: + return "worker" + default: + return "" + } +} diff --git a/pkg/types/defaults/installconfig.go b/pkg/types/defaults/installconfig.go index 3aa4e5fd830..bbfbc206386 100644 --- a/pkg/types/defaults/installconfig.go +++ b/pkg/types/defaults/installconfig.go @@ -51,11 +51,11 @@ func SetInstallConfigDefaults(c *types.InstallConfig) { Replicas: &defaultReplicaCount, } } - c.ControlPlane.Name = "master" + c.ControlPlane.Name = "control-plane" if len(c.Compute) == 0 { c.Compute = []types.MachinePool{ { - Name: "worker", + Name: "compute", Replicas: &defaultReplicaCount, }, } diff --git a/pkg/types/defaults/installconfig_test.go b/pkg/types/defaults/installconfig_test.go index 6ac11b4af69..9ffdd9b3613 100644 --- a/pkg/types/defaults/installconfig_test.go +++ b/pkg/types/defaults/installconfig_test.go @@ -32,12 +32,12 @@ func defaultInstallConfig() *types.InstallConfig { }, }, ControlPlane: &types.MachinePool{ - Name: "master", + Name: "control-plane", Replicas: pointer.Int64Ptr(3), }, Compute: []types.MachinePool{ { - Name: "worker", + Name: "compute", Replicas: pointer.Int64Ptr(3), }, }, diff --git a/pkg/types/machinepools.go b/pkg/types/machinepools.go index 9994698b5d6..c696942d676 100644 --- a/pkg/types/machinepools.go +++ b/pkg/types/machinepools.go @@ -9,8 +9,8 @@ import ( // MachinePool is a pool of machines to be installed. type MachinePool struct { // Name is the name of the machine pool. - // For the control plane machine pool, the name will always be "master". - // For the compute machine pools, the only valid name is "worker". + // For the control plane machine pool, the name will always be "control-plane". + // For the compute machine pools, the only valid name is "compute". Name string `json:"name"` // Replicas is the count of machines for this machine pool. diff --git a/pkg/types/validation/installconfig.go b/pkg/types/validation/installconfig.go index f5765ccee07..b08f1a69ba7 100644 --- a/pkg/types/validation/installconfig.go +++ b/pkg/types/validation/installconfig.go @@ -20,7 +20,7 @@ import ( ) const ( - masterPoolName = "master" + controlPlanePoolName = "control-plane" ) // ClusterDomain returns the cluster domain for a cluster with the specified @@ -116,8 +116,8 @@ func validateClusterNetwork(cn *types.ClusterNetworkEntry, fldPath *field.Path, func validateControlPlane(pool *types.MachinePool, fldPath *field.Path, platform string) field.ErrorList { allErrs := field.ErrorList{} - if pool.Name != masterPoolName { - allErrs = append(allErrs, field.NotSupported(fldPath.Child("name"), pool.Name, []string{masterPoolName})) + if pool.Name != controlPlanePoolName { + allErrs = append(allErrs, field.NotSupported(fldPath.Child("name"), pool.Name, []string{controlPlanePoolName})) } if pool.Replicas != nil && *pool.Replicas == 0 { allErrs = append(allErrs, field.Invalid(fldPath.Child("replicas"), pool.Replicas, "number of control plane replicas must be positive")) @@ -132,8 +132,8 @@ func validateCompute(pools []types.MachinePool, fldPath *field.Path, platform st foundPositiveReplicas := false for i, p := range pools { poolFldPath := fldPath.Index(i) - if p.Name != "worker" { - allErrs = append(allErrs, field.NotSupported(poolFldPath.Child("name"), p.Name, []string{"worker"})) + if p.Name != "compute" { + allErrs = append(allErrs, field.NotSupported(poolFldPath.Child("name"), p.Name, []string{"compute"})) } if poolNames[p.Name] { allErrs = append(allErrs, field.Duplicate(poolFldPath.Child("name"), p.Name)) diff --git a/pkg/types/validation/installconfig_test.go b/pkg/types/validation/installconfig_test.go index 900104a1760..7ae9f311700 100644 --- a/pkg/types/validation/installconfig_test.go +++ b/pkg/types/validation/installconfig_test.go @@ -38,12 +38,12 @@ func validInstallConfig() *types.InstallConfig { }, }, ControlPlane: &types.MachinePool{ - Name: "master", + Name: "control-plane", Replicas: pointer.Int64Ptr(3), }, Compute: []types.MachinePool{ { - Name: "worker", + Name: "compute", Replicas: pointer.Int64Ptr(3), }, }, @@ -221,17 +221,17 @@ func TestValidateInstallConfig(t *testing.T) { c := validInstallConfig() c.Compute = []types.MachinePool{ { - Name: "worker", + Name: "compute", Replicas: pointer.Int64Ptr(1), }, { - Name: "worker", + Name: "compute", Replicas: pointer.Int64Ptr(2), }, } return c }(), - expectedError: `^compute\[1\]\.name: Duplicate value: "worker"$`, + expectedError: `^compute\[1\]\.name: Duplicate value: "compute"$`, }, { name: "no compute replicas", @@ -239,7 +239,7 @@ func TestValidateInstallConfig(t *testing.T) { c := validInstallConfig() c.Compute = []types.MachinePool{ { - Name: "worker", + Name: "compute", Replicas: pointer.Int64Ptr(0), }, } @@ -252,7 +252,7 @@ func TestValidateInstallConfig(t *testing.T) { c := validInstallConfig() c.Compute = []types.MachinePool{ { - Name: "worker", + Name: "compute", Replicas: pointer.Int64Ptr(3), Platform: types.MachinePoolPlatform{ OpenStack: &openstack.MachinePool{},