blob: f8104b2dd8595e8086cbf649502f2ae56c80fd8e [file] [log] [blame]
Anton Samoylove2e969e2024-10-03 15:28:31 +04001heat_template_version: queens
2
3parameters:
4 controllers_size:
5 type: number
6 description: Number of masters instances to deploy
7 default: 1
8 workers_size:
9 type: number
10 description: Number of workers to deploy
11 default: 3
12 image:
13 type: string
14 description: Name of image to use for servers
15 availability_zone:
16 type: string
17 default: "nova"
18 masters_flavor:
19 type: string
20 default: 'system.compact.openstack.control'
21 workers_flavor:
22 type: string
23 default: 'system.compact.openstack.control'
24 cluster_public_key:
25 type: string
26 public_net_id:
27 type: string
28 default: ''
29 description: >
30 UUID of public network
31 k8s_network_cidr:
32 type: string
33 description: The CIDR of k8s network
34 default: '10.10.0.0/24'
Anton Samoylovafd066e2025-08-27 10:58:38 +040035 k8s_network_ipv6_cidr:
36 type: string
37 description: The CIDR of k8s network IPV6
38 default: 'fd12:3456:789a:0a0a::/64'
Ilya Bumarskov9ec1a262025-09-10 12:08:03 +020039 k8s_network_ipv6_gw_ip:
40 type: string
41 description: The GW of k8s network IPV6
42 default: 'fd12:3456:789a:0a0a::1'
Anton Samoylove2e969e2024-10-03 15:28:31 +040043 data_network_cidr:
44 type: string
45 description: The CIDR of k8s network
46 default: '10.11.0.0/24'
Anton Samoylov17e7c032024-10-14 23:55:18 +040047 storage_backend_network_cidr:
48 type: string
49 default: '10.12.0.0/24'
50 storage_frontend_network_cidr:
51 type: string
52 default: '10.12.1.0/24'
Denis Egorenko9dd84da2025-09-23 15:05:32 +040053 storage_volumes_per_node:
54 type: number
55 default: 0
Anton Samoylove2e969e2024-10-03 15:28:31 +040056 dns_nameservers:
57 type: json
Anton Samoylov17e7c032024-10-14 23:55:18 +040058 default: ['172.18.224.6', '172.18.176.6']
59 hardware_metadata:
60 description: The content of lab metadata.
61 default: ''
62 type: string
63 worker_metadata:
64 type: json
65 default: {}
66 boot_timeout:
67 type: number
68 description: Boot timeout for instance
69 default: 600
Ilya Bumarskov54f2ffb2025-10-14 13:29:14 +020070 # Hybrid lab parameters
71 hybrid_lab:
72 type: boolean
73 description: Deploy VM Compute for hybrid deployment (BM + virtual nodes).
74 default: false
75 vm_compute_flavor:
76 type: string
77 default: 'system.golden.openstack.control'
78 pxe_network:
79 type: string
80 description: The name of pxe network
81 default: ''
82 pxe_subnet:
83 type: string
84 default: ''
Ilya Bumarskovd668fb72025-11-18 16:09:34 +010085 k8s_vip:
86 type: string
87 k8s_svc_network_cidr:
88 type: string
Ilya Bumarskov54f2ffb2025-10-14 13:29:14 +020089
90conditions:
91
92 deploy_vm_compute:
93 get_param: hybrid_lab
Anton Samoylove2e969e2024-10-03 15:28:31 +040094
95resources:
96
97 keypair_name:
98 type: OS::Heat::RandomString
99 properties:
100 character_classes: [{"class": "hexdigits", "min": 1}]
101 length: 128
102 salt: constant
103 key_pair:
104 type: OS::Nova::KeyPair
105 properties:
106 name: { get_attr: [keypair_name, value] }
107 public_key: { get_param: cluster_public_key }
108 save_private_key: false
109
110 k8s_network:
111 type: OS::Neutron::Net
112 k8s_subnet:
113 type: OS::Neutron::Subnet
114 properties:
115 network: { get_resource: k8s_network }
116 enable_dhcp: false
117 cidr: { get_param: k8s_network_cidr }
118 dns_nameservers: { get_param: dns_nameservers }
Anton Samoylovafd066e2025-08-27 10:58:38 +0400119 k8s_subnet_ipv6:
120 type: OS::Neutron::Subnet
121 properties:
122 ip_version: 6
123 network: { get_resource: k8s_network }
124 enable_dhcp: false
125 cidr: { get_param: k8s_network_ipv6_cidr }
Ilya Bumarskov9ec1a262025-09-10 12:08:03 +0200126 gateway_ip: { get_param: k8s_network_ipv6_gw_ip }
Anton Samoylove2e969e2024-10-03 15:28:31 +0400127 router:
128 type: OS::Neutron::Router
129 properties:
130 external_gateway_info:
131 network: { get_param: public_net_id }
132 public_router_iface:
133 type: OS::Neutron::RouterInterface
134 properties:
135 router: { get_resource: router }
136 subnet: { get_resource: k8s_subnet }
Ilya Bumarskov9ec1a262025-09-10 12:08:03 +0200137 public_router_iface_v6:
138 type: OS::Neutron::RouterInterface
139 properties:
140 router: { get_resource: router }
141 subnet: { get_resource: k8s_subnet_ipv6 }
Anton Samoylove2e969e2024-10-03 15:28:31 +0400142 data_network:
143 type: OS::Neutron::Net
144 data_subnet:
145 type: OS::Neutron::Subnet
146 properties:
147 network: { get_resource: data_network }
148 enable_dhcp: false
149 cidr: { get_param: data_network_cidr }
Anton Samoylov02a217c2024-10-08 13:54:07 +0400150 gateway_ip: ~
Anton Samoylove2e969e2024-10-03 15:28:31 +0400151
Anton Samoylov17e7c032024-10-14 23:55:18 +0400152 storage_backend_network:
153 type: OS::Neutron::Net
154 storage_backend_subnet:
155 type: OS::Neutron::Subnet
156 properties:
157 network: { get_resource: storage_backend_network }
158 enable_dhcp: false
159 cidr: { get_param: storage_backend_network_cidr }
160 gateway_ip: ~
161
162 storage_frontend_network:
163 type: OS::Neutron::Net
164 storage_frontend_subnet:
165 type: OS::Neutron::Subnet
166 properties:
167 network: { get_resource: storage_frontend_network }
168 enable_dhcp: false
169 cidr: { get_param: storage_frontend_network_cidr }
170 gateway_ip: ~
171
Anton Samoylove2e969e2024-10-03 15:28:31 +0400172 masters:
173 type: OS::Heat::ResourceGroup
174 depends_on:
175 - k8s_network
176 - data_network
177 - public_router_iface
178 properties:
179 count: { get_param: controllers_size }
180 resource_def:
181 type: VMInstances
182 properties:
Anton Samoylove2e969e2024-10-03 15:28:31 +0400183 k8s_network: { get_resource: k8s_network }
184 k8s_subnet_id: { get_resource: k8s_subnet }
Anton Samoylovafd066e2025-08-27 10:58:38 +0400185 k8s_subnet_ipv6_id: { get_resource: k8s_subnet_ipv6 }
Anton Samoylove2e969e2024-10-03 15:28:31 +0400186 public_net_id: { get_param: public_net_id }
Anton Samoylov17e7c032024-10-14 23:55:18 +0400187 storage_frontend_network: { get_resource: storage_frontend_network }
Anton Samoylove2e969e2024-10-03 15:28:31 +0400188 data_network: { get_resource: data_network }
189 availability_zone: { get_param: availability_zone }
190 image: { get_param: image }
191 flavor: { get_param: masters_flavor }
192 key_name: { get_attr: [keypair_name, value] }
Anton Samoylov17e7c032024-10-14 23:55:18 +0400193 boot_timeout: { get_param: boot_timeout }
Anton Samoylove2e969e2024-10-03 15:28:31 +0400194
195 workers:
196 type: OS::Heat::ResourceGroup
197 depends_on:
198 - k8s_network
199 - data_network
200 - public_router_iface
201 properties:
202 count: { get_param: workers_size }
203 resource_def:
Anton Samoylov17e7c032024-10-14 23:55:18 +0400204 type: VMInstancesCeph
Anton Samoylove2e969e2024-10-03 15:28:31 +0400205 properties:
Anton Samoylove2e969e2024-10-03 15:28:31 +0400206 k8s_network: { get_resource: k8s_network }
207 k8s_subnet_id: { get_resource: k8s_subnet }
Anton Samoylovafd066e2025-08-27 10:58:38 +0400208 k8s_subnet_ipv6_id: { get_resource: k8s_subnet_ipv6 }
Anton Samoylove2e969e2024-10-03 15:28:31 +0400209 public_net_id: { get_param: public_net_id }
Anton Samoylov17e7c032024-10-14 23:55:18 +0400210 storage_frontend_network: { get_resource: storage_frontend_network }
211 storage_backend_network: { get_resource: storage_backend_network }
Denis Egorenko9dd84da2025-09-23 15:05:32 +0400212 storage_volumes_per_node: { get_param: storage_volumes_per_node }
Anton Samoylove2e969e2024-10-03 15:28:31 +0400213 data_network: { get_resource: data_network }
214 availability_zone: { get_param: availability_zone }
215 image: { get_param: image }
216 flavor: { get_param: workers_flavor }
217 key_name: { get_attr: [keypair_name, value] }
Anton Samoylov17e7c032024-10-14 23:55:18 +0400218 metadata: { get_param: worker_metadata }
219 hardware_metadata: { get_param: hardware_metadata}
220 boot_timeout: { get_param: boot_timeout }
Ilya Bumarskov54f2ffb2025-10-14 13:29:14 +0200221 hybrid_lab: { get_param: hybrid_lab }
222 pxe_network: { get_param: pxe_network }
223 pxe_subnet: { get_param: pxe_subnet }
224
225 vm_compute:
226 type: ./fragments/VMCompute.yaml
227 condition: deploy_vm_compute
228 depends_on:
229 - k8s_network
230 - data_network
231 - public_router_iface
232 properties:
233 k8s_network: { get_resource: k8s_network }
234 k8s_subnet_id: { get_resource: k8s_subnet }
235 public_net_id: { get_param: public_net_id }
236 pxe_network: { get_param: pxe_network }
237 pxe_subnet: { get_param: pxe_subnet }
238 image: { get_param: image }
239 flavor: { get_param: vm_compute_flavor }
240 key_name: { get_attr: [ keypair_name, value ] }
Ilya Bumarskovd668fb72025-11-18 16:09:34 +0100241 k8s_vip: { get_param: k8s_vip }
242 k8s_svc_network_cidr: { get_param: k8s_svc_network_cidr }
Anton Samoylove2e969e2024-10-03 15:28:31 +0400243
244outputs:
245 masters_ips:
246 description: Public IP addresses of the deployed masters instances
247 value: { get_attr: [masters, server_public_ip] }
248 workers_ips:
249 description: Public IP addresses of the deployed worker instances
250 value: { get_attr: [workers, server_public_ip] }
Anton Samoylov17e7c032024-10-14 23:55:18 +0400251 storage_frontend_network_cidr:
252 description: Storage network which is used as clientNet in Ceph CR
253 value: { get_param: storage_frontend_network_cidr }
254 storage_backend_network_cidr:
255 description: Storage network which is used as clusterNet in Ceph CR
256 value: { get_param: storage_backend_network_cidr }
257 workers_wc_data:
258 description: Metadata from workers
259 value: { get_attr: [workers, wc_data] }
Ilya Bumarskov9ec1a262025-09-10 12:08:03 +0200260 public_router_gw_ipv6:
261 description: Public gateway IPv6 address (used for kubevirt tests)
262 value: { get_param: k8s_network_ipv6_gw_ip }
Ilya Bumarskov54f2ffb2025-10-14 13:29:14 +0200263 vm_compute_ip:
264 condition: deploy_vm_compute
265 description: Public IP address of the deployed compute instance
266 value: { get_attr: [ vm_compute, server_public_ip ] }
267 vbmc_ip:
268 condition: deploy_vm_compute
269 description: IP address of interface in PXE network (is used for virtual BMC)
270 value: { get_attr: [ vm_compute, vbmc_ip ] }
271 vnodes_data:
272 condition: deploy_vm_compute
273 description: Virtual nodes data (mac addresses and vbmc ports)
274 value: { get_attr: [ vm_compute, vnodes_data ] }