heat_stack.yaml.j2 35 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042
  1. heat_template_version: 2016-10-14
  2. description: OpenShift cluster
  3. parameters:
  4. outputs:
  5. etcd_names:
  6. description: Name of the etcds
  7. value: { get_attr: [ etcd, name ] }
  8. etcd_ips:
  9. description: IPs of the etcds
  10. value: { get_attr: [ etcd, private_ip ] }
  11. etcd_floating_ips:
  12. description: Floating IPs of the etcds
  13. value: { get_attr: [ etcd, floating_ip ] }
  14. master_names:
  15. description: Name of the masters
  16. value: { get_attr: [ masters, name ] }
  17. master_ips:
  18. description: IPs of the masters
  19. value: { get_attr: [ masters, private_ip ] }
  20. master_floating_ips:
  21. description: Floating IPs of the masters
  22. value: { get_attr: [ masters, floating_ip ] }
  23. node_names:
  24. description: Name of the nodes
  25. value: { get_attr: [ compute_nodes, name ] }
  26. node_ips:
  27. description: IPs of the nodes
  28. value: { get_attr: [ compute_nodes, private_ip ] }
  29. node_floating_ips:
  30. description: Floating IPs of the nodes
  31. value: { get_attr: [ compute_nodes, floating_ip ] }
  32. infra_names:
  33. description: Name of the nodes
  34. value: { get_attr: [ infra_nodes, name ] }
  35. infra_ips:
  36. description: IPs of the nodes
  37. value: { get_attr: [ infra_nodes, private_ip ] }
  38. infra_floating_ips:
  39. description: Floating IPs of the nodes
  40. value: { get_attr: [ infra_nodes, floating_ip ] }
  41. {% if openshift_use_kuryr|default(false)|bool %}
  42. vm_subnet:
  43. description: ID of the subnet the Pods will be on
  44. value: { get_resource: subnet }
  45. pod_subnet:
  46. description: ID of the subnet the Pods will be on
  47. value: { get_resource: pod_subnet }
  48. service_subnet:
  49. description: ID of the subnet the services will be on
  50. value: { get_resource: service_subnet }
  51. pod_access_sg_id:
  52. description: Id of the security group for services to be able to reach pods
  53. value: { get_resource: pod_access_sg }
  54. api_lb_vip_port_id:
  55. description: Id of the OpenShift API load balancer VIP port
  56. value: { get_attr: [api_lb, vip_port_id] }
  57. api_lb_sg_id:
  58. description: Security Group Id of the OpenShift API load balancer VIP port
  59. value: { get_resource: lb-secgrp }
  60. api_lb_provider:
  61. description: Id of the OpenShift API load balancer VIP port
  62. value: { get_attr: [api_lb, show, provider] }
  63. {% endif %}
  64. conditions:
  65. no_floating: {% if openshift_openstack_provider_network_name %}true{% else %}false{% endif %}
  66. resources:
  67. {% if not openshift_openstack_provider_network_name %}
  68. {% if openshift_use_kuryr|default(false)|bool %}
  69. api_lb:
  70. type: OS::Neutron::LBaaS::LoadBalancer
  71. properties:
  72. name:
  73. str_replace:
  74. template: openshift-ansible-cluster_id-api-lb
  75. params:
  76. cluster_id: {{ openshift_openstack_full_dns_domain }}
  77. vip_address: {{ openshift_openstack_kuryr_service_subnet_cidr | ipaddr('1') | ipaddr('address') }}
  78. vip_subnet: { get_resource: service_subnet }
  79. api_lb_listener:
  80. type: OS::Neutron::LBaaS::Listener
  81. properties:
  82. name:
  83. str_replace:
  84. template: openshift-ansible-cluster_id-api-lb-listener
  85. params:
  86. cluster_id: {{ openshift_openstack_full_dns_domain }}
  87. loadbalancer: { get_resource: api_lb }
  88. protocol: HTTPS
  89. protocol_port: 443
  90. api_lb_pool:
  91. type: OS::Neutron::LBaaS::Pool
  92. properties:
  93. name:
  94. str_replace:
  95. template: openshift-ansible-cluster_id-api-lb-pool
  96. params:
  97. cluster_id: {{ openshift_openstack_full_dns_domain }}
  98. protocol: HTTPS
  99. lb_algorithm: ROUND_ROBIN
  100. listener: { get_resource: api_lb_listener }
  101. pod_net:
  102. type: OS::Neutron::Net
  103. properties:
  104. name:
  105. str_replace:
  106. template: openshift-ansible-cluster_id-pod-net
  107. params:
  108. cluster_id: {{ openshift_openstack_full_dns_domain }}
  109. pod_subnet:
  110. type: OS::Neutron::Subnet
  111. properties:
  112. network_id: { get_resource: pod_net }
  113. cidr: {{ openshift_openstack_kuryr_pod_subnet_cidr }}
  114. enable_dhcp: False
  115. name:
  116. str_replace:
  117. template: openshift-ansible-cluster_id-pod-subnet
  118. params:
  119. cluster_id: {{ openshift_openstack_full_dns_domain }}
  120. dns_nameservers:
  121. {% for nameserver in openshift_openstack_dns_nameservers %}
  122. - {{ nameserver }}
  123. {% endfor %}
  124. service_net:
  125. type: OS::Neutron::Net
  126. properties:
  127. name:
  128. str_replace:
  129. template: openshift-ansible-cluster_id-service-net
  130. params:
  131. cluster_id: {{ openshift_openstack_full_dns_domain }}
  132. service_subnet:
  133. type: OS::Neutron::Subnet
  134. properties:
  135. network_id: { get_resource: service_net }
  136. cidr: {{ openshift_openstack_kuryr_service_subnet_cidr }}
  137. gateway_ip: {{ openshift_openstack_kuryr_service_subnet_cidr | ipaddr('-2') | ipaddr('address') }}
  138. enable_dhcp: False
  139. allocation_pools:
  140. - start: {{ openshift_openstack_kuryr_service_pool_start }}
  141. end: {{ openshift_openstack_kuryr_service_pool_end }}
  142. name:
  143. str_replace:
  144. template: openshift-ansible-cluster_id-service-subnet
  145. params:
  146. cluster_id: {{ openshift_openstack_full_dns_domain }}
  147. {% endif %}
  148. net:
  149. type: OS::Neutron::Net
  150. properties:
  151. name:
  152. str_replace:
  153. template: openshift-ansible-cluster_id-net
  154. params:
  155. cluster_id: {{ openshift_openstack_full_dns_domain }}
  156. subnet:
  157. type: OS::Neutron::Subnet
  158. properties:
  159. name:
  160. str_replace:
  161. template: openshift-ansible-cluster_id-subnet
  162. params:
  163. cluster_id: {{ openshift_openstack_full_dns_domain }}
  164. network: { get_resource: net }
  165. cidr: {{ openshift_openstack_subnet_cidr }}
  166. allocation_pools:
  167. - start: {{ openshift_openstack_pool_start }}
  168. end: {{ openshift_openstack_pool_end }}
  169. dns_nameservers:
  170. {% for nameserver in openshift_openstack_dns_nameservers %}
  171. - {{ nameserver }}
  172. {% endfor %}
  173. {% if openshift_use_flannel|default(False)|bool %}
  174. data_net:
  175. type: OS::Neutron::Net
  176. properties:
  177. name: openshift-ansible-{{ openshift_openstack_full_dns_domain }}-data-net
  178. port_security_enabled: false
  179. data_subnet:
  180. type: OS::Neutron::Subnet
  181. properties:
  182. name: openshift-ansible-{{ openshift_openstack_full_dns_domain }}-data-subnet
  183. network: { get_resource: data_net }
  184. cidr: {{ osm_cluster_network_cidr|default('10.128.0.0/14') }}
  185. gateway_ip: null
  186. {% endif %}
  187. router:
  188. type: OS::Neutron::Router
  189. properties:
  190. name:
  191. str_replace:
  192. template: openshift-ansible-cluster_id-router
  193. params:
  194. cluster_id: {{ openshift_openstack_full_dns_domain }}
  195. external_gateway_info:
  196. network: {{ openshift_openstack_external_network_name }}
  197. interface:
  198. type: OS::Neutron::RouterInterface
  199. properties:
  200. router_id: { get_resource: router }
  201. subnet_id: { get_resource: subnet }
  202. {% if openshift_use_kuryr|default(false)|bool %}
  203. pod_subnet_interface:
  204. type: OS::Neutron::RouterInterface
  205. properties:
  206. router_id: { get_resource: router }
  207. subnet_id: { get_resource: pod_subnet }
  208. service_router_port:
  209. type: OS::Neutron::Port
  210. properties:
  211. network: { get_resource: service_net}
  212. fixed_ips:
  213. - subnet: { get_resource: service_subnet }
  214. ip_address: {{ openshift_openstack_kuryr_service_subnet_cidr | ipaddr('-2') | ipaddr('address') }}
  215. name:
  216. str_replace:
  217. template: openshift-ansible-cluster_id-service-subnet-router-port
  218. params:
  219. cluster_id: {{ openshift_openstack_full_dns_domain }}
  220. service_subnet_interface:
  221. type: OS::Neutron::RouterInterface
  222. properties:
  223. router_id: { get_resource: router }
  224. port: { get_resource: service_router_port }
  225. {% endif %}
  226. {% endif %}
  227. # keypair:
  228. # type: OS::Nova::KeyPair
  229. # properties:
  230. # name:
  231. # str_replace:
  232. # template: openshift-ansible-cluster_id-keypair
  233. # params:
  234. # cluster_id: {{ openshift_openstack_full_dns_domain }}
  235. # public_key: {{ openshift_openstack_keypair_name }}
  236. common-secgrp:
  237. type: OS::Neutron::SecurityGroup
  238. properties:
  239. name:
  240. str_replace:
  241. template: openshift-ansible-cluster_id-common-secgrp
  242. params:
  243. cluster_id: {{ openshift_openstack_full_dns_domain }}
  244. description:
  245. str_replace:
  246. template: Basic ssh/icmp security group for cluster_id OpenShift cluster
  247. params:
  248. cluster_id: {{ openshift_openstack_full_dns_domain }}
  249. rules:
  250. - direction: ingress
  251. protocol: tcp
  252. port_range_min: 22
  253. port_range_max: 22
  254. remote_ip_prefix: {{ openshift_openstack_ssh_ingress_cidr }}
  255. - direction: ingress
  256. protocol: icmp
  257. remote_ip_prefix: {{ openshift_openstack_ssh_ingress_cidr }}
  258. {% if openshift_use_kuryr|default(false)|bool %}
  259. pod_access_sg:
  260. type: OS::Neutron::SecurityGroup
  261. properties:
  262. name:
  263. str_replace:
  264. template: openshift-ansible-cluster_id-pod-service-secgrp
  265. params:
  266. cluster_id: {{ openshift_openstack_full_dns_domain }}
  267. description: Give services and nodes access to the pods
  268. rules:
  269. - ethertype: IPv4
  270. remote_ip_prefix: {{ openshift_openstack_kuryr_service_subnet_cidr }}
  271. - ethertype: IPv4
  272. remote_ip_prefix: {{ openshift_openstack_subnet_cidr }}
  273. - ethertype: IPv4
  274. remote_mode: remote_group_id
  275. {% endif %}
  276. {% if openshift_openstack_flat_secgrp|default(False)|bool %}
  277. flat-secgrp:
  278. type: OS::Neutron::SecurityGroup
  279. properties:
  280. name:
  281. str_replace:
  282. template: openshift-ansible-cluster_id-flat-secgrp
  283. params:
  284. cluster_id: {{ openshift_openstack_full_dns_domain }}
  285. description:
  286. str_replace:
  287. template: Security group for cluster_id OpenShift cluster
  288. params:
  289. cluster_id: {{ openshift_openstack_full_dns_domain }}
  290. rules:
  291. - direction: ingress
  292. protocol: tcp
  293. port_range_min: 4001
  294. port_range_max: 4001
  295. - direction: ingress
  296. protocol: tcp
  297. port_range_min: {{ openshift_master_api_port|default(8443) }}
  298. port_range_max: {{ openshift_master_api_port|default(8443) }}
  299. - direction: ingress
  300. protocol: tcp
  301. port_range_min: {{ openshift_master_console_port|default(8443) }}
  302. port_range_max: {{ openshift_master_console_port|default(8443) }}
  303. - direction: ingress
  304. protocol: tcp
  305. port_range_min: 8053
  306. port_range_max: 8053
  307. - direction: ingress
  308. protocol: udp
  309. port_range_min: 8053
  310. port_range_max: 8053
  311. - direction: ingress
  312. protocol: tcp
  313. port_range_min: 24224
  314. port_range_max: 24224
  315. - direction: ingress
  316. protocol: udp
  317. port_range_min: 24224
  318. port_range_max: 24224
  319. - direction: ingress
  320. protocol: tcp
  321. port_range_min: 2224
  322. port_range_max: 2224
  323. - direction: ingress
  324. protocol: udp
  325. port_range_min: 5404
  326. port_range_max: 5405
  327. - direction: ingress
  328. protocol: tcp
  329. port_range_min: 9090
  330. port_range_max: 9090
  331. - direction: ingress
  332. protocol: tcp
  333. port_range_min: 2379
  334. port_range_max: 2380
  335. remote_mode: remote_group_id
  336. - direction: ingress
  337. protocol: tcp
  338. port_range_min: 10250
  339. port_range_max: 10250
  340. remote_mode: remote_group_id
  341. - direction: ingress
  342. protocol: udp
  343. port_range_min: 10250
  344. port_range_max: 10250
  345. remote_mode: remote_group_id
  346. - direction: ingress
  347. protocol: tcp
  348. port_range_min: 10255
  349. port_range_max: 10255
  350. remote_mode: remote_group_id
  351. - direction: ingress
  352. protocol: udp
  353. port_range_min: 10255
  354. port_range_max: 10255
  355. remote_mode: remote_group_id
  356. - direction: ingress
  357. protocol: udp
  358. port_range_min: 4789
  359. port_range_max: 4789
  360. remote_mode: remote_group_id
  361. - direction: ingress
  362. protocol: tcp
  363. port_range_min: 30000
  364. port_range_max: 32767
  365. remote_ip_prefix: {{ openshift_openstack_node_ingress_cidr }}
  366. - direction: ingress
  367. protocol: tcp
  368. port_range_min: 30000
  369. port_range_max: 32767
  370. remote_ip_prefix: "{{ openshift_openstack_subnet_cidr }}"
  371. {% else %}
  372. master-secgrp:
  373. type: OS::Neutron::SecurityGroup
  374. properties:
  375. name:
  376. str_replace:
  377. template: openshift-ansible-cluster_id-master-secgrp
  378. params:
  379. cluster_id: {{ openshift_openstack_full_dns_domain }}
  380. description:
  381. str_replace:
  382. template: Security group for cluster_id OpenShift cluster master
  383. params:
  384. cluster_id: {{ openshift_openstack_full_dns_domain }}
  385. rules:
  386. - direction: ingress
  387. protocol: tcp
  388. port_range_min: 4001
  389. port_range_max: 4001
  390. - direction: ingress
  391. protocol: tcp
  392. port_range_min: {{ openshift_master_api_port|default(8443) }}
  393. port_range_max: {{ openshift_master_api_port|default(8443) }}
  394. - direction: ingress
  395. protocol: tcp
  396. port_range_min: {{ openshift_master_console_port|default(8443) }}
  397. port_range_max: {{ openshift_master_console_port|default(8443) }}
  398. - direction: ingress
  399. protocol: tcp
  400. port_range_min: 8053
  401. port_range_max: 8053
  402. - direction: ingress
  403. protocol: udp
  404. port_range_min: 8053
  405. port_range_max: 8053
  406. - direction: ingress
  407. protocol: tcp
  408. port_range_min: 24224
  409. port_range_max: 24224
  410. - direction: ingress
  411. protocol: udp
  412. port_range_min: 24224
  413. port_range_max: 24224
  414. - direction: ingress
  415. protocol: tcp
  416. port_range_min: 2224
  417. port_range_max: 2224
  418. - direction: ingress
  419. protocol: udp
  420. port_range_min: 5404
  421. port_range_max: 5405
  422. - direction: ingress
  423. protocol: tcp
  424. port_range_min: 9090
  425. port_range_max: 9090
  426. {% if openshift_use_flannel|default(False)|bool %}
  427. - direction: ingress
  428. protocol: tcp
  429. port_range_min: 2379
  430. port_range_max: 2379
  431. {% endif %}
  432. etcd-secgrp:
  433. type: OS::Neutron::SecurityGroup
  434. properties:
  435. name:
  436. str_replace:
  437. template: openshift-ansible-cluster_id-etcd-secgrp
  438. params:
  439. cluster_id: {{ openshift_openstack_full_dns_domain }}
  440. description:
  441. str_replace:
  442. template: Security group for cluster_id etcd cluster
  443. params:
  444. cluster_id: {{ openshift_openstack_full_dns_domain }}
  445. rules:
  446. - direction: ingress
  447. protocol: tcp
  448. port_range_min: 2379
  449. port_range_max: 2379
  450. remote_mode: remote_group_id
  451. remote_group_id: { get_resource: master-secgrp }
  452. - direction: ingress
  453. protocol: tcp
  454. port_range_min: 2380
  455. port_range_max: 2380
  456. remote_mode: remote_group_id
  457. node-secgrp:
  458. type: OS::Neutron::SecurityGroup
  459. properties:
  460. name:
  461. str_replace:
  462. template: openshift-ansible-cluster_id-node-secgrp
  463. params:
  464. cluster_id: {{ openshift_openstack_full_dns_domain }}
  465. description:
  466. str_replace:
  467. template: Security group for cluster_id OpenShift cluster nodes
  468. params:
  469. cluster_id: {{ openshift_openstack_full_dns_domain }}
  470. rules:
  471. # NOTE(shadower): the 53 rules are needed for Kuryr
  472. - direction: ingress
  473. protocol: tcp
  474. port_range_min: 53
  475. port_range_max: 53
  476. - direction: ingress
  477. protocol: udp
  478. port_range_min: 53
  479. port_range_max: 53
  480. - direction: ingress
  481. protocol: tcp
  482. port_range_min: 10250
  483. port_range_max: 10250
  484. remote_mode: remote_group_id
  485. - direction: ingress
  486. protocol: tcp
  487. port_range_min: 10255
  488. port_range_max: 10255
  489. remote_mode: remote_group_id
  490. - direction: ingress
  491. protocol: udp
  492. port_range_min: 10255
  493. port_range_max: 10255
  494. remote_mode: remote_group_id
  495. - direction: ingress
  496. protocol: udp
  497. port_range_min: 4789
  498. port_range_max: 4789
  499. remote_mode: remote_group_id
  500. - direction: ingress
  501. protocol: tcp
  502. port_range_min: 30000
  503. port_range_max: 32767
  504. remote_ip_prefix: {{ openshift_openstack_node_ingress_cidr }}
  505. - direction: ingress
  506. protocol: tcp
  507. port_range_min: 30000
  508. port_range_max: 32767
  509. remote_ip_prefix: "{{ openshift_openstack_subnet_cidr }}"
  510. {% endif %}
  511. infra-secgrp:
  512. type: OS::Neutron::SecurityGroup
  513. properties:
  514. name:
  515. str_replace:
  516. template: openshift-ansible-cluster_id-infra-secgrp
  517. params:
  518. cluster_id: {{ openshift_openstack_full_dns_domain }}
  519. description:
  520. str_replace:
  521. template: Security group for cluster_id OpenShift infrastructure cluster nodes
  522. params:
  523. cluster_id: {{ openshift_openstack_full_dns_domain }}
  524. rules:
  525. - direction: ingress
  526. protocol: tcp
  527. port_range_min: 80
  528. port_range_max: 80
  529. - direction: ingress
  530. protocol: tcp
  531. port_range_min: 443
  532. port_range_max: 443
  533. - direction: ingress
  534. protocol: tcp
  535. port_range_min: 1936
  536. port_range_max: 1936
  537. cns-secgrp:
  538. type: OS::Neutron::SecurityGroup
  539. properties:
  540. name:
  541. str_replace:
  542. template: openshift-ansible-cluster_id-cns-secgrp
  543. params:
  544. cluster_id: {{ openshift_openstack_full_dns_domain }}
  545. description:
  546. str_replace:
  547. template: Security group for cluster_id OpenShift cns cluster nodes
  548. params:
  549. cluster_id: {{ openshift_openstack_full_dns_domain }}
  550. rules:
  551. # glusterfs_sshd
  552. - direction: ingress
  553. protocol: tcp
  554. port_range_min: 2222
  555. port_range_max: 2222
  556. # heketi dialing backends
  557. - direction: ingress
  558. protocol: tcp
  559. port_range_min: 10250
  560. port_range_max: 10250
  561. # glusterfs_management
  562. - direction: ingress
  563. protocol: tcp
  564. port_range_min: 24007
  565. port_range_max: 24007
  566. # glusterfs_rdma
  567. - direction: ingress
  568. protocol: tcp
  569. port_range_min: 24008
  570. port_range_max: 24008
  571. # glusterfs_bricks
  572. - direction: ingress
  573. protocol: tcp
  574. port_range_min: 49152
  575. port_range_max: 49251
  576. lb-secgrp:
  577. type: OS::Neutron::SecurityGroup
  578. properties:
  579. name: openshift-ansible-{{ openshift_openstack_full_dns_domain }}-lb-secgrp
  580. description: Security group for {{ openshift_openstack_full_dns_domain }} cluster Load Balancer
  581. rules:
  582. - direction: ingress
  583. protocol: tcp
  584. port_range_min: 443
  585. port_range_max: 443
  586. remote_ip_prefix: {{ openshift_openstack_lb_ingress_cidr }}
  587. - direction: ingress
  588. protocol: tcp
  589. port_range_min: {{ openshift_master_api_port | default(8443) }}
  590. port_range_max: {{ openshift_master_api_port | default(8443) }}
  591. remote_ip_prefix: {{ openshift_openstack_lb_ingress_cidr }}
  592. {% if openshift_master_console_port is defined and openshift_master_console_port != openshift_master_api_port %}
  593. - direction: ingress
  594. protocol: tcp
  595. port_range_min: {{ openshift_master_console_port | default(8443) }}
  596. port_range_max: {{ openshift_master_console_port | default(8443) }}
  597. remote_ip_prefix: {{ openshift_openstack_lb_ingress_cidr }}
  598. {% endif %}
  599. etcd:
  600. type: OS::Heat::ResourceGroup
  601. properties:
  602. count: {{ openshift_openstack_num_etcd }}
  603. resource_def:
  604. type: server.yaml
  605. properties:
  606. name:
  607. str_replace:
  608. template: k8s_type-%index%.cluster_id
  609. params:
  610. cluster_id: {{ openshift_openstack_full_dns_domain }}
  611. k8s_type: {{ openshift_openstack_etcd_hostname }}
  612. cluster_env: {{ openshift_openstack_public_dns_domain }}
  613. cluster_id: {{ openshift_openstack_full_dns_domain }}
  614. group:
  615. str_replace:
  616. template: k8s_type.cluster_id
  617. params:
  618. k8s_type: etcds
  619. cluster_id: {{ openshift_openstack_full_dns_domain }}
  620. type: etcd
  621. image: {{ openshift_openstack_etcd_image }}
  622. flavor: {{ openshift_openstack_etcd_flavor }}
  623. key_name: {{ openshift_openstack_keypair_name }}
  624. {% if openshift_openstack_provider_network_name %}
  625. net: {{ openshift_openstack_provider_network_name }}
  626. net_name: {{ openshift_openstack_provider_network_name }}
  627. {% else %}
  628. net: { get_resource: net }
  629. subnet: { get_resource: subnet }
  630. net_name:
  631. str_replace:
  632. template: openshift-ansible-cluster_id-net
  633. params:
  634. cluster_id: {{ openshift_openstack_full_dns_domain }}
  635. {% endif %}
  636. secgrp:
  637. - { get_resource: {% if openshift_openstack_flat_secgrp|default(False)|bool %}flat-secgrp{% else %}etcd-secgrp{% endif %} }
  638. - { get_resource: common-secgrp }
  639. floating_network:
  640. if:
  641. - no_floating
  642. - ''
  643. - {{ openshift_openstack_external_network_name }}
  644. {% if openshift_openstack_provider_network_name %}
  645. attach_float_net: false
  646. {% endif %}
  647. volume_size: {{ openshift_openstack_etcd_volume_size }}
  648. {% if not openshift_openstack_provider_network_name %}
  649. depends_on:
  650. - interface
  651. {% endif %}
  652. {% if openshift_openstack_master_server_group_policies|length > 0 %}
  653. master_server_group:
  654. type: OS::Nova::ServerGroup
  655. properties:
  656. name: master_server_group
  657. policies: {{ openshift_openstack_master_server_group_policies }}
  658. {% endif %}
  659. {% if openshift_openstack_infra_server_group_policies|length > 0 %}
  660. infra_server_group:
  661. type: OS::Nova::ServerGroup
  662. properties:
  663. name: infra_server_group
  664. policies: {{ openshift_openstack_infra_server_group_policies }}
  665. {% endif %}
  666. {% if openshift_openstack_num_masters|int > 1 %}
  667. loadbalancer:
  668. type: OS::Heat::ResourceGroup
  669. properties:
  670. count: 1
  671. resource_def:
  672. type: server.yaml
  673. properties:
  674. name:
  675. str_replace:
  676. template: k8s_type-%index%.cluster_id
  677. params:
  678. cluster_id: {{ openshift_openstack_full_dns_domain }}
  679. k8s_type: {{ openshift_openstack_lb_hostname }}
  680. cluster_env: {{ openshift_openstack_public_dns_domain }}
  681. cluster_id: {{ openshift_openstack_full_dns_domain }}
  682. group:
  683. str_replace:
  684. template: k8s_type.cluster_id
  685. params:
  686. k8s_type: lb
  687. cluster_id: {{ openshift_openstack_full_dns_domain }}
  688. type: lb
  689. image: {{ openshift_openstack_lb_image }}
  690. flavor: {{ openshift_openstack_lb_flavor }}
  691. key_name: {{ openshift_openstack_keypair_name }}
  692. {% if openshift_openstack_provider_network_name %}
  693. net: {{ openshift_openstack_provider_network_name }}
  694. net_name: {{ openshift_openstack_provider_network_name }}
  695. {% else %}
  696. net: { get_resource: net }
  697. subnet: { get_resource: subnet }
  698. net_name:
  699. str_replace:
  700. template: openshift-ansible-cluster_id-net
  701. params:
  702. cluster_id: {{ openshift_openstack_full_dns_domain }}
  703. {% endif %}
  704. secgrp:
  705. - { get_resource: lb-secgrp }
  706. - { get_resource: common-secgrp }
  707. floating_network:
  708. if:
  709. - no_floating
  710. - ''
  711. - {{ openshift_openstack_external_network_name }}
  712. {% if openshift_openstack_provider_network_name %}
  713. attach_float_net: false
  714. {% endif %}
  715. volume_size: {{ openshift_openstack_lb_volume_size }}
  716. {% if not openshift_openstack_provider_network_name %}
  717. depends_on:
  718. - interface
  719. {% endif %}
  720. {% endif %}
  721. masters:
  722. type: OS::Heat::ResourceGroup
  723. properties:
  724. count: {{ openshift_openstack_num_masters }}
  725. resource_def:
  726. type: server.yaml
  727. properties:
  728. name:
  729. str_replace:
  730. template: k8s_type-%index%.cluster_id
  731. params:
  732. cluster_id: {{ openshift_openstack_full_dns_domain }}
  733. k8s_type: {{ openshift_openstack_master_hostname }}
  734. cluster_env: {{ openshift_openstack_public_dns_domain }}
  735. cluster_id: {{ openshift_openstack_full_dns_domain }}
  736. group:
  737. str_replace:
  738. template: k8s_type.cluster_id
  739. params:
  740. k8s_type: masters
  741. cluster_id: {{ openshift_openstack_full_dns_domain }}
  742. type: master
  743. image: {{ openshift_openstack_master_image }}
  744. flavor: {{ openshift_openstack_master_flavor }}
  745. key_name: {{ openshift_openstack_keypair_name }}
  746. {% if openshift_openstack_provider_network_name %}
  747. net: {{ openshift_openstack_provider_network_name }}
  748. net_name: {{ openshift_openstack_provider_network_name }}
  749. {% else %}
  750. net: { get_resource: net }
  751. subnet: { get_resource: subnet }
  752. net_name:
  753. str_replace:
  754. template: openshift-ansible-cluster_id-net
  755. params:
  756. cluster_id: {{ openshift_openstack_full_dns_domain }}
  757. {% if openshift_use_flannel|default(False)|bool %}
  758. attach_data_net: true
  759. data_net: { get_resource: data_net }
  760. data_subnet: { get_resource: data_subnet }
  761. {% endif %}
  762. {% endif %}
  763. {% if openshift_use_kuryr|default(false)|bool %}
  764. api_lb_pool: { get_resource: api_lb_pool }
  765. {% endif %}
  766. secgrp:
  767. {% if openshift_openstack_flat_secgrp|default(False)|bool %}
  768. - { get_resource: flat-secgrp }
  769. {% else %}
  770. - { get_resource: master-secgrp }
  771. - { get_resource: node-secgrp }
  772. {% if openshift_openstack_num_etcd|int == 0 %}
  773. - { get_resource: etcd-secgrp }
  774. {% endif %}
  775. {% endif %}
  776. - { get_resource: common-secgrp }
  777. floating_network:
  778. if:
  779. - no_floating
  780. - ''
  781. - {{ openshift_openstack_external_network_name }}
  782. {% if openshift_openstack_provider_network_name %}
  783. attach_float_net: false
  784. {% endif %}
  785. volume_size: {{ openshift_openstack_master_volume_size }}
  786. {% if openshift_openstack_master_server_group_policies|length > 0 %}
  787. scheduler_hints:
  788. group: { get_resource: master_server_group }
  789. {% endif %}
  790. {% if not openshift_openstack_provider_network_name %}
  791. depends_on:
  792. - interface
  793. {% endif %}
  794. compute_nodes:
  795. type: OS::Heat::ResourceGroup
  796. properties:
  797. count: {{ openshift_openstack_num_nodes }}
  798. removal_policies:
  799. - resource_list: {{ openshift_openstack_nodes_to_remove | to_json }}
  800. resource_def:
  801. type: server.yaml
  802. properties:
  803. name:
  804. str_replace:
  805. template: sub_type_k8s_type-%index%.cluster_id
  806. params:
  807. cluster_id: {{ openshift_openstack_full_dns_domain }}
  808. sub_type_k8s_type: {{ openshift_openstack_node_hostname }}
  809. cluster_env: {{ openshift_openstack_public_dns_domain }}
  810. cluster_id: {{ openshift_openstack_full_dns_domain }}
  811. group:
  812. str_replace:
  813. template: k8s_type.cluster_id
  814. params:
  815. k8s_type: nodes
  816. cluster_id: {{ openshift_openstack_full_dns_domain }}
  817. type: node
  818. subtype: app
  819. node_labels:
  820. {% for k, v in openshift_openstack_cluster_node_labels.app.items() %}
  821. {{ k|e }}: {{ v|e }}
  822. {% endfor %}
  823. image: {{ openshift_openstack_node_image }}
  824. flavor: {{ openshift_openstack_node_flavor }}
  825. key_name: {{ openshift_openstack_keypair_name }}
  826. {% if openshift_openstack_provider_network_name %}
  827. net: {{ openshift_openstack_provider_network_name }}
  828. net_name: {{ openshift_openstack_provider_network_name }}
  829. {% else %}
  830. net: { get_resource: net }
  831. subnet: { get_resource: subnet }
  832. net_name:
  833. str_replace:
  834. template: openshift-ansible-cluster_id-net
  835. params:
  836. cluster_id: {{ openshift_openstack_full_dns_domain }}
  837. {% if openshift_use_flannel|default(False)|bool %}
  838. attach_data_net: true
  839. data_net: { get_resource: data_net }
  840. data_subnet: { get_resource: data_subnet }
  841. {% endif %}
  842. {% endif %}
  843. secgrp:
  844. - { get_resource: {% if openshift_openstack_flat_secgrp|default(False)|bool %}flat-secgrp{% else %}node-secgrp{% endif %} }
  845. - { get_resource: common-secgrp }
  846. floating_network:
  847. if:
  848. - no_floating
  849. - ''
  850. - {{ openshift_openstack_external_network_name }}
  851. {% if openshift_openstack_provider_network_name %}
  852. attach_float_net: false
  853. {% endif %}
  854. volume_size: {{ openshift_openstack_node_volume_size }}
  855. {% if not openshift_openstack_provider_network_name %}
  856. depends_on:
  857. - interface
  858. {% endif %}
  859. infra_nodes:
  860. type: OS::Heat::ResourceGroup
  861. properties:
  862. count: {{ openshift_openstack_num_infra }}
  863. resource_def:
  864. type: server.yaml
  865. properties:
  866. name:
  867. str_replace:
  868. template: sub_type_k8s_type-%index%.cluster_id
  869. params:
  870. cluster_id: {{ openshift_openstack_full_dns_domain }}
  871. sub_type_k8s_type: {{ openshift_openstack_infra_hostname }}
  872. cluster_env: {{ openshift_openstack_public_dns_domain }}
  873. cluster_id: {{ openshift_openstack_full_dns_domain }}
  874. group:
  875. str_replace:
  876. template: k8s_type.cluster_id
  877. params:
  878. k8s_type: infra
  879. cluster_id: {{ openshift_openstack_full_dns_domain }}
  880. type: node
  881. subtype: infra
  882. node_labels:
  883. {% for k, v in openshift_openstack_cluster_node_labels.infra.items() %}
  884. {{ k|e }}: {{ v|e }}
  885. {% endfor %}
  886. image: {{ openshift_openstack_infra_image }}
  887. flavor: {{ openshift_openstack_infra_flavor }}
  888. key_name: {{ openshift_openstack_keypair_name }}
  889. {% if openshift_openstack_provider_network_name %}
  890. net: {{ openshift_openstack_provider_network_name }}
  891. net_name: {{ openshift_openstack_provider_network_name }}
  892. {% else %}
  893. net: { get_resource: net }
  894. subnet: { get_resource: subnet }
  895. net_name:
  896. str_replace:
  897. template: openshift-ansible-cluster_id-net
  898. params:
  899. cluster_id: {{ openshift_openstack_full_dns_domain }}
  900. {% if openshift_use_flannel|default(False)|bool %}
  901. attach_data_net: true
  902. data_net: { get_resource: data_net }
  903. data_subnet: { get_resource: data_subnet }
  904. {% endif %}
  905. {% endif %}
  906. secgrp:
  907. # TODO(bogdando) filter only required node rules into infra-secgrp
  908. {% if openshift_openstack_flat_secgrp|default(False)|bool %}
  909. - { get_resource: flat-secgrp }
  910. {% else %}
  911. - { get_resource: node-secgrp }
  912. {% endif %}
  913. - { get_resource: infra-secgrp }
  914. - { get_resource: common-secgrp }
  915. floating_network:
  916. if:
  917. - no_floating
  918. - ''
  919. - {{ openshift_openstack_external_network_name }}
  920. {% if openshift_openstack_provider_network_name %}
  921. attach_float_net: false
  922. {% endif %}
  923. volume_size: {{ openshift_openstack_infra_volume_size }}
  924. {% if openshift_openstack_infra_server_group_policies|length > 0 %}
  925. scheduler_hints:
  926. group: { get_resource: infra_server_group }
  927. {% endif %}
  928. {% if not openshift_openstack_provider_network_name %}
  929. depends_on:
  930. - interface
  931. {% endif %}
  932. cns:
  933. type: OS::Heat::ResourceGroup
  934. properties:
  935. count: {{ openshift_openstack_num_cns }}
  936. resource_def:
  937. type: server.yaml
  938. properties:
  939. name:
  940. str_replace:
  941. template: sub_type_k8s_type-%index%.cluster_id
  942. params:
  943. cluster_id: {{ openshift_openstack_full_dns_domain }}
  944. sub_type_k8s_type: {{ openshift_openstack_cns_hostname }}
  945. cluster_env: {{ openshift_openstack_public_dns_domain }}
  946. cluster_id: {{ openshift_openstack_full_dns_domain }}
  947. group:
  948. str_replace:
  949. template: k8s_type.cluster_id
  950. params:
  951. k8s_type: cns
  952. cluster_id: {{ openshift_openstack_full_dns_domain }}
  953. type: cns
  954. image: {{ openshift_openstack_cns_image }}
  955. flavor: {{ openshift_openstack_cns_flavor }}
  956. key_name: {{ openshift_openstack_keypair_name }}
  957. {% if openshift_openstack_provider_network_name %}
  958. net: {{ openshift_openstack_provider_network_name }}
  959. net_name: {{ openshift_openstack_provider_network_name }}
  960. {% else %}
  961. net: { get_resource: net }
  962. subnet: { get_resource: subnet }
  963. net_name:
  964. str_replace:
  965. template: openshift-ansible-cluster_id-net
  966. params:
  967. cluster_id: {{ openshift_openstack_full_dns_domain }}
  968. {% if openshift_use_flannel|default(False)|bool %}
  969. attach_data_net: true
  970. data_net: { get_resource: data_net }
  971. data_subnet: { get_resource: data_subnet }
  972. {% endif %}
  973. {% endif %}
  974. secgrp:
  975. {% if openshift_openstack_flat_secgrp|default(False)|bool %}
  976. - { get_resource: flat-secgrp }
  977. {% else %}
  978. - { get_resource: node-secgrp }
  979. {% endif %}
  980. - { get_resource: cns-secgrp }
  981. - { get_resource: common-secgrp }
  982. {% if not openshift_openstack_provider_network_name %}
  983. floating_network: {{ openshift_openstack_external_network_name }}
  984. {% endif %}
  985. volume_size: {{ openshift_openstack_cns_volume_size }}