blob: 06bdb5be1c8383f8d4da74fb016f73e284283d4a [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'
Anton Samoylove2e969e2024-10-03 15:28:31 +040039 data_network_cidr:
40 type: string
41 description: The CIDR of k8s network
42 default: '10.11.0.0/24'
Anton Samoylov17e7c032024-10-14 23:55:18 +040043 storage_backend_network_cidr:
44 type: string
45 default: '10.12.0.0/24'
46 storage_frontend_network_cidr:
47 type: string
48 default: '10.12.1.0/24'
Anton Samoylove2e969e2024-10-03 15:28:31 +040049 dns_nameservers:
50 type: json
Anton Samoylov17e7c032024-10-14 23:55:18 +040051 default: ['172.18.224.6', '172.18.176.6']
52 hardware_metadata:
53 description: The content of lab metadata.
54 default: ''
55 type: string
56 worker_metadata:
57 type: json
58 default: {}
59 boot_timeout:
60 type: number
61 description: Boot timeout for instance
62 default: 600
Anton Samoylove2e969e2024-10-03 15:28:31 +040063
64resources:
65
66 keypair_name:
67 type: OS::Heat::RandomString
68 properties:
69 character_classes: [{"class": "hexdigits", "min": 1}]
70 length: 128
71 salt: constant
72 key_pair:
73 type: OS::Nova::KeyPair
74 properties:
75 name: { get_attr: [keypair_name, value] }
76 public_key: { get_param: cluster_public_key }
77 save_private_key: false
78
79 k8s_network:
80 type: OS::Neutron::Net
81 k8s_subnet:
82 type: OS::Neutron::Subnet
83 properties:
84 network: { get_resource: k8s_network }
85 enable_dhcp: false
86 cidr: { get_param: k8s_network_cidr }
87 dns_nameservers: { get_param: dns_nameservers }
Anton Samoylovafd066e2025-08-27 10:58:38 +040088 k8s_subnet_ipv6:
89 type: OS::Neutron::Subnet
90 properties:
91 ip_version: 6
92 network: { get_resource: k8s_network }
93 enable_dhcp: false
94 cidr: { get_param: k8s_network_ipv6_cidr }
Anton Samoylove2e969e2024-10-03 15:28:31 +040095 router:
96 type: OS::Neutron::Router
97 properties:
98 external_gateway_info:
99 network: { get_param: public_net_id }
100 public_router_iface:
101 type: OS::Neutron::RouterInterface
102 properties:
103 router: { get_resource: router }
104 subnet: { get_resource: k8s_subnet }
105
106 data_network:
107 type: OS::Neutron::Net
108 data_subnet:
109 type: OS::Neutron::Subnet
110 properties:
111 network: { get_resource: data_network }
112 enable_dhcp: false
113 cidr: { get_param: data_network_cidr }
Anton Samoylov02a217c2024-10-08 13:54:07 +0400114 gateway_ip: ~
Anton Samoylove2e969e2024-10-03 15:28:31 +0400115
Anton Samoylov17e7c032024-10-14 23:55:18 +0400116 storage_backend_network:
117 type: OS::Neutron::Net
118 storage_backend_subnet:
119 type: OS::Neutron::Subnet
120 properties:
121 network: { get_resource: storage_backend_network }
122 enable_dhcp: false
123 cidr: { get_param: storage_backend_network_cidr }
124 gateway_ip: ~
125
126 storage_frontend_network:
127 type: OS::Neutron::Net
128 storage_frontend_subnet:
129 type: OS::Neutron::Subnet
130 properties:
131 network: { get_resource: storage_frontend_network }
132 enable_dhcp: false
133 cidr: { get_param: storage_frontend_network_cidr }
134 gateway_ip: ~
135
Anton Samoylove2e969e2024-10-03 15:28:31 +0400136 masters:
137 type: OS::Heat::ResourceGroup
138 depends_on:
139 - k8s_network
140 - data_network
141 - public_router_iface
142 properties:
143 count: { get_param: controllers_size }
144 resource_def:
145 type: VMInstances
146 properties:
Anton Samoylove2e969e2024-10-03 15:28:31 +0400147 k8s_network: { get_resource: k8s_network }
148 k8s_subnet_id: { get_resource: k8s_subnet }
Anton Samoylovafd066e2025-08-27 10:58:38 +0400149 k8s_subnet_ipv6_id: { get_resource: k8s_subnet_ipv6 }
Anton Samoylove2e969e2024-10-03 15:28:31 +0400150 public_net_id: { get_param: public_net_id }
Anton Samoylov17e7c032024-10-14 23:55:18 +0400151 storage_frontend_network: { get_resource: storage_frontend_network }
Anton Samoylove2e969e2024-10-03 15:28:31 +0400152 data_network: { get_resource: data_network }
153 availability_zone: { get_param: availability_zone }
154 image: { get_param: image }
155 flavor: { get_param: masters_flavor }
156 key_name: { get_attr: [keypair_name, value] }
Anton Samoylov17e7c032024-10-14 23:55:18 +0400157 boot_timeout: { get_param: boot_timeout }
Anton Samoylove2e969e2024-10-03 15:28:31 +0400158
159 workers:
160 type: OS::Heat::ResourceGroup
161 depends_on:
162 - k8s_network
163 - data_network
164 - public_router_iface
165 properties:
166 count: { get_param: workers_size }
167 resource_def:
Anton Samoylov17e7c032024-10-14 23:55:18 +0400168 type: VMInstancesCeph
Anton Samoylove2e969e2024-10-03 15:28:31 +0400169 properties:
Anton Samoylove2e969e2024-10-03 15:28:31 +0400170 k8s_network: { get_resource: k8s_network }
171 k8s_subnet_id: { get_resource: k8s_subnet }
Anton Samoylovafd066e2025-08-27 10:58:38 +0400172 k8s_subnet_ipv6_id: { get_resource: k8s_subnet_ipv6 }
Anton Samoylove2e969e2024-10-03 15:28:31 +0400173 public_net_id: { get_param: public_net_id }
Anton Samoylov17e7c032024-10-14 23:55:18 +0400174 storage_frontend_network: { get_resource: storage_frontend_network }
175 storage_backend_network: { get_resource: storage_backend_network }
Anton Samoylove2e969e2024-10-03 15:28:31 +0400176 data_network: { get_resource: data_network }
177 availability_zone: { get_param: availability_zone }
178 image: { get_param: image }
179 flavor: { get_param: workers_flavor }
180 key_name: { get_attr: [keypair_name, value] }
Anton Samoylov17e7c032024-10-14 23:55:18 +0400181 metadata: { get_param: worker_metadata }
182 hardware_metadata: { get_param: hardware_metadata}
183 boot_timeout: { get_param: boot_timeout }
Anton Samoylove2e969e2024-10-03 15:28:31 +0400184
185outputs:
186 masters_ips:
187 description: Public IP addresses of the deployed masters instances
188 value: { get_attr: [masters, server_public_ip] }
189 workers_ips:
190 description: Public IP addresses of the deployed worker instances
191 value: { get_attr: [workers, server_public_ip] }
Anton Samoylov17e7c032024-10-14 23:55:18 +0400192 storage_frontend_network_cidr:
193 description: Storage network which is used as clientNet in Ceph CR
194 value: { get_param: storage_frontend_network_cidr }
195 storage_backend_network_cidr:
196 description: Storage network which is used as clusterNet in Ceph CR
197 value: { get_param: storage_backend_network_cidr }
198 workers_wc_data:
199 description: Metadata from workers
200 value: { get_attr: [workers, wc_data] }