blob: 2a7bd37c187e7c5ade5efc955c694a7a2b523862 [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'
Anton Samoylove2e969e2024-10-03 15:28:31 +040053 dns_nameservers:
54 type: json
Anton Samoylov17e7c032024-10-14 23:55:18 +040055 default: ['172.18.224.6', '172.18.176.6']
56 hardware_metadata:
57 description: The content of lab metadata.
58 default: ''
59 type: string
60 worker_metadata:
61 type: json
62 default: {}
63 boot_timeout:
64 type: number
65 description: Boot timeout for instance
66 default: 600
Anton Samoylove2e969e2024-10-03 15:28:31 +040067
68resources:
69
70 keypair_name:
71 type: OS::Heat::RandomString
72 properties:
73 character_classes: [{"class": "hexdigits", "min": 1}]
74 length: 128
75 salt: constant
76 key_pair:
77 type: OS::Nova::KeyPair
78 properties:
79 name: { get_attr: [keypair_name, value] }
80 public_key: { get_param: cluster_public_key }
81 save_private_key: false
82
83 k8s_network:
84 type: OS::Neutron::Net
85 k8s_subnet:
86 type: OS::Neutron::Subnet
87 properties:
88 network: { get_resource: k8s_network }
89 enable_dhcp: false
90 cidr: { get_param: k8s_network_cidr }
91 dns_nameservers: { get_param: dns_nameservers }
Anton Samoylovafd066e2025-08-27 10:58:38 +040092 k8s_subnet_ipv6:
93 type: OS::Neutron::Subnet
94 properties:
95 ip_version: 6
96 network: { get_resource: k8s_network }
97 enable_dhcp: false
98 cidr: { get_param: k8s_network_ipv6_cidr }
Ilya Bumarskov9ec1a262025-09-10 12:08:03 +020099 gateway_ip: { get_param: k8s_network_ipv6_gw_ip }
Anton Samoylove2e969e2024-10-03 15:28:31 +0400100 router:
101 type: OS::Neutron::Router
102 properties:
103 external_gateway_info:
104 network: { get_param: public_net_id }
105 public_router_iface:
106 type: OS::Neutron::RouterInterface
107 properties:
108 router: { get_resource: router }
109 subnet: { get_resource: k8s_subnet }
Ilya Bumarskov9ec1a262025-09-10 12:08:03 +0200110 public_router_iface_v6:
111 type: OS::Neutron::RouterInterface
112 properties:
113 router: { get_resource: router }
114 subnet: { get_resource: k8s_subnet_ipv6 }
Anton Samoylove2e969e2024-10-03 15:28:31 +0400115 data_network:
116 type: OS::Neutron::Net
117 data_subnet:
118 type: OS::Neutron::Subnet
119 properties:
120 network: { get_resource: data_network }
121 enable_dhcp: false
122 cidr: { get_param: data_network_cidr }
Anton Samoylov02a217c2024-10-08 13:54:07 +0400123 gateway_ip: ~
Anton Samoylove2e969e2024-10-03 15:28:31 +0400124
Anton Samoylov17e7c032024-10-14 23:55:18 +0400125 storage_backend_network:
126 type: OS::Neutron::Net
127 storage_backend_subnet:
128 type: OS::Neutron::Subnet
129 properties:
130 network: { get_resource: storage_backend_network }
131 enable_dhcp: false
132 cidr: { get_param: storage_backend_network_cidr }
133 gateway_ip: ~
134
135 storage_frontend_network:
136 type: OS::Neutron::Net
137 storage_frontend_subnet:
138 type: OS::Neutron::Subnet
139 properties:
140 network: { get_resource: storage_frontend_network }
141 enable_dhcp: false
142 cidr: { get_param: storage_frontend_network_cidr }
143 gateway_ip: ~
144
Anton Samoylove2e969e2024-10-03 15:28:31 +0400145 masters:
146 type: OS::Heat::ResourceGroup
147 depends_on:
148 - k8s_network
149 - data_network
150 - public_router_iface
151 properties:
152 count: { get_param: controllers_size }
153 resource_def:
154 type: VMInstances
155 properties:
Anton Samoylove2e969e2024-10-03 15:28:31 +0400156 k8s_network: { get_resource: k8s_network }
157 k8s_subnet_id: { get_resource: k8s_subnet }
Anton Samoylovafd066e2025-08-27 10:58:38 +0400158 k8s_subnet_ipv6_id: { get_resource: k8s_subnet_ipv6 }
Anton Samoylove2e969e2024-10-03 15:28:31 +0400159 public_net_id: { get_param: public_net_id }
Anton Samoylov17e7c032024-10-14 23:55:18 +0400160 storage_frontend_network: { get_resource: storage_frontend_network }
Anton Samoylove2e969e2024-10-03 15:28:31 +0400161 data_network: { get_resource: data_network }
162 availability_zone: { get_param: availability_zone }
163 image: { get_param: image }
164 flavor: { get_param: masters_flavor }
165 key_name: { get_attr: [keypair_name, value] }
Anton Samoylov17e7c032024-10-14 23:55:18 +0400166 boot_timeout: { get_param: boot_timeout }
Anton Samoylove2e969e2024-10-03 15:28:31 +0400167
168 workers:
169 type: OS::Heat::ResourceGroup
170 depends_on:
171 - k8s_network
172 - data_network
173 - public_router_iface
174 properties:
175 count: { get_param: workers_size }
176 resource_def:
Anton Samoylov17e7c032024-10-14 23:55:18 +0400177 type: VMInstancesCeph
Anton Samoylove2e969e2024-10-03 15:28:31 +0400178 properties:
Anton Samoylove2e969e2024-10-03 15:28:31 +0400179 k8s_network: { get_resource: k8s_network }
180 k8s_subnet_id: { get_resource: k8s_subnet }
Anton Samoylovafd066e2025-08-27 10:58:38 +0400181 k8s_subnet_ipv6_id: { get_resource: k8s_subnet_ipv6 }
Anton Samoylove2e969e2024-10-03 15:28:31 +0400182 public_net_id: { get_param: public_net_id }
Anton Samoylov17e7c032024-10-14 23:55:18 +0400183 storage_frontend_network: { get_resource: storage_frontend_network }
184 storage_backend_network: { get_resource: storage_backend_network }
Anton Samoylove2e969e2024-10-03 15:28:31 +0400185 data_network: { get_resource: data_network }
186 availability_zone: { get_param: availability_zone }
187 image: { get_param: image }
188 flavor: { get_param: workers_flavor }
189 key_name: { get_attr: [keypair_name, value] }
Anton Samoylov17e7c032024-10-14 23:55:18 +0400190 metadata: { get_param: worker_metadata }
191 hardware_metadata: { get_param: hardware_metadata}
192 boot_timeout: { get_param: boot_timeout }
Anton Samoylove2e969e2024-10-03 15:28:31 +0400193
194outputs:
195 masters_ips:
196 description: Public IP addresses of the deployed masters instances
197 value: { get_attr: [masters, server_public_ip] }
198 workers_ips:
199 description: Public IP addresses of the deployed worker instances
200 value: { get_attr: [workers, server_public_ip] }
Anton Samoylov17e7c032024-10-14 23:55:18 +0400201 storage_frontend_network_cidr:
202 description: Storage network which is used as clientNet in Ceph CR
203 value: { get_param: storage_frontend_network_cidr }
204 storage_backend_network_cidr:
205 description: Storage network which is used as clusterNet in Ceph CR
206 value: { get_param: storage_backend_network_cidr }
207 workers_wc_data:
208 description: Metadata from workers
209 value: { get_attr: [workers, wc_data] }
Ilya Bumarskov9ec1a262025-09-10 12:08:03 +0200210 public_router_gw_ipv6:
211 description: Public gateway IPv6 address (used for kubevirt tests)
212 value: { get_param: k8s_network_ipv6_gw_ip }