heat_stack.yaml.j2 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815
  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 num_dns|int > 0 %}
  42. dns_name:
  43. description: Name of the DNS
  44. value:
  45. get_attr:
  46. - dns
  47. - name
  48. dns_floating_ips:
  49. description: Floating IPs of the DNS
  50. value: { get_attr: [ dns, floating_ip ] }
  51. dns_private_ips:
  52. description: Private IPs of the DNS
  53. value: { get_attr: [ dns, private_ip ] }
  54. {% endif %}
  55. resources:
  56. {% if not provider_network %}
  57. net:
  58. type: OS::Neutron::Net
  59. properties:
  60. name:
  61. str_replace:
  62. template: openshift-ansible-cluster_id-net
  63. params:
  64. cluster_id: {{ stack_name }}
  65. subnet:
  66. type: OS::Neutron::Subnet
  67. properties:
  68. name:
  69. str_replace:
  70. template: openshift-ansible-cluster_id-subnet
  71. params:
  72. cluster_id: {{ stack_name }}
  73. network: { get_resource: net }
  74. cidr:
  75. str_replace:
  76. template: subnet_24_prefix.0/24
  77. params:
  78. subnet_24_prefix: {{ subnet_prefix }}
  79. allocation_pools:
  80. - start:
  81. str_replace:
  82. template: subnet_24_prefix.3
  83. params:
  84. subnet_24_prefix: {{ subnet_prefix }}
  85. end:
  86. str_replace:
  87. template: subnet_24_prefix.254
  88. params:
  89. subnet_24_prefix: {{ subnet_prefix }}
  90. dns_nameservers:
  91. {% for nameserver in dns_nameservers %}
  92. - {{ nameserver }}
  93. {% endfor %}
  94. router:
  95. type: OS::Neutron::Router
  96. properties:
  97. name:
  98. str_replace:
  99. template: openshift-ansible-cluster_id-router
  100. params:
  101. cluster_id: {{ stack_name }}
  102. external_gateway_info:
  103. network: {{ external_network }}
  104. interface:
  105. type: OS::Neutron::RouterInterface
  106. properties:
  107. router_id: { get_resource: router }
  108. subnet_id: { get_resource: subnet }
  109. {% endif %}
  110. # keypair:
  111. # type: OS::Nova::KeyPair
  112. # properties:
  113. # name:
  114. # str_replace:
  115. # template: openshift-ansible-cluster_id-keypair
  116. # params:
  117. # cluster_id: {{ stack_name }}
  118. # public_key: {{ ssh_public_key }}
  119. common-secgrp:
  120. type: OS::Neutron::SecurityGroup
  121. properties:
  122. name:
  123. str_replace:
  124. template: openshift-ansible-cluster_id-common-secgrp
  125. params:
  126. cluster_id: {{ stack_name }}
  127. description:
  128. str_replace:
  129. template: Basic ssh/icmp security group for cluster_id OpenShift cluster
  130. params:
  131. cluster_id: {{ stack_name }}
  132. rules:
  133. - direction: ingress
  134. protocol: tcp
  135. port_range_min: 22
  136. port_range_max: 22
  137. remote_ip_prefix: {{ ssh_ingress_cidr }}
  138. {% if use_bastion|bool %}
  139. - direction: ingress
  140. protocol: tcp
  141. port_range_min: 22
  142. port_range_max: 22
  143. remote_ip_prefix: {{ bastion_ingress_cidr }}
  144. {% endif %}
  145. - direction: ingress
  146. protocol: icmp
  147. remote_ip_prefix: {{ ssh_ingress_cidr }}
  148. {% if openstack_flat_secgrp|default(False)|bool %}
  149. flat-secgrp:
  150. type: OS::Neutron::SecurityGroup
  151. properties:
  152. name:
  153. str_replace:
  154. template: openshift-ansible-cluster_id-flat-secgrp
  155. params:
  156. cluster_id: {{ stack_name }}
  157. description:
  158. str_replace:
  159. template: Security group for cluster_id OpenShift cluster
  160. params:
  161. cluster_id: {{ stack_name }}
  162. rules:
  163. - direction: ingress
  164. protocol: tcp
  165. port_range_min: 4001
  166. port_range_max: 4001
  167. - direction: ingress
  168. protocol: tcp
  169. port_range_min: 8443
  170. port_range_max: 8444
  171. - direction: ingress
  172. protocol: tcp
  173. port_range_min: 8053
  174. port_range_max: 8053
  175. - direction: ingress
  176. protocol: udp
  177. port_range_min: 8053
  178. port_range_max: 8053
  179. - direction: ingress
  180. protocol: tcp
  181. port_range_min: 24224
  182. port_range_max: 24224
  183. - direction: ingress
  184. protocol: udp
  185. port_range_min: 24224
  186. port_range_max: 24224
  187. - direction: ingress
  188. protocol: tcp
  189. port_range_min: 2224
  190. port_range_max: 2224
  191. - direction: ingress
  192. protocol: udp
  193. port_range_min: 5404
  194. port_range_max: 5405
  195. - direction: ingress
  196. protocol: tcp
  197. port_range_min: 9090
  198. port_range_max: 9090
  199. - direction: ingress
  200. protocol: tcp
  201. port_range_min: 2379
  202. port_range_max: 2380
  203. remote_mode: remote_group_id
  204. - direction: ingress
  205. protocol: tcp
  206. port_range_min: 10250
  207. port_range_max: 10250
  208. remote_mode: remote_group_id
  209. - direction: ingress
  210. protocol: udp
  211. port_range_min: 10250
  212. port_range_max: 10250
  213. remote_mode: remote_group_id
  214. - direction: ingress
  215. protocol: tcp
  216. port_range_min: 10255
  217. port_range_max: 10255
  218. remote_mode: remote_group_id
  219. - direction: ingress
  220. protocol: udp
  221. port_range_min: 10255
  222. port_range_max: 10255
  223. remote_mode: remote_group_id
  224. - direction: ingress
  225. protocol: udp
  226. port_range_min: 4789
  227. port_range_max: 4789
  228. remote_mode: remote_group_id
  229. - direction: ingress
  230. protocol: tcp
  231. port_range_min: 30000
  232. port_range_max: 32767
  233. remote_ip_prefix: {{ node_ingress_cidr }}
  234. - direction: ingress
  235. protocol: tcp
  236. port_range_min: 30000
  237. port_range_max: 32767
  238. remote_ip_prefix: "{{ openstack_subnet_prefix }}.0/24"
  239. {% else %}
  240. master-secgrp:
  241. type: OS::Neutron::SecurityGroup
  242. properties:
  243. name:
  244. str_replace:
  245. template: openshift-ansible-cluster_id-master-secgrp
  246. params:
  247. cluster_id: {{ stack_name }}
  248. description:
  249. str_replace:
  250. template: Security group for cluster_id OpenShift cluster master
  251. params:
  252. cluster_id: {{ stack_name }}
  253. rules:
  254. - direction: ingress
  255. protocol: tcp
  256. port_range_min: 4001
  257. port_range_max: 4001
  258. - direction: ingress
  259. protocol: tcp
  260. port_range_min: 8443
  261. port_range_max: 8444
  262. - direction: ingress
  263. protocol: tcp
  264. port_range_min: 8053
  265. port_range_max: 8053
  266. - direction: ingress
  267. protocol: udp
  268. port_range_min: 8053
  269. port_range_max: 8053
  270. - direction: ingress
  271. protocol: tcp
  272. port_range_min: 24224
  273. port_range_max: 24224
  274. - direction: ingress
  275. protocol: udp
  276. port_range_min: 24224
  277. port_range_max: 24224
  278. - direction: ingress
  279. protocol: tcp
  280. port_range_min: 2224
  281. port_range_max: 2224
  282. - direction: ingress
  283. protocol: udp
  284. port_range_min: 5404
  285. port_range_max: 5405
  286. - direction: ingress
  287. protocol: tcp
  288. port_range_min: 9090
  289. port_range_max: 9090
  290. etcd-secgrp:
  291. type: OS::Neutron::SecurityGroup
  292. properties:
  293. name:
  294. str_replace:
  295. template: openshift-ansible-cluster_id-etcd-secgrp
  296. params:
  297. cluster_id: {{ stack_name }}
  298. description:
  299. str_replace:
  300. template: Security group for cluster_id etcd cluster
  301. params:
  302. cluster_id: {{ stack_name }}
  303. rules:
  304. - direction: ingress
  305. protocol: tcp
  306. port_range_min: 2379
  307. port_range_max: 2379
  308. remote_mode: remote_group_id
  309. remote_group_id: { get_resource: master-secgrp }
  310. - direction: ingress
  311. protocol: tcp
  312. port_range_min: 2380
  313. port_range_max: 2380
  314. remote_mode: remote_group_id
  315. node-secgrp:
  316. type: OS::Neutron::SecurityGroup
  317. properties:
  318. name:
  319. str_replace:
  320. template: openshift-ansible-cluster_id-node-secgrp
  321. params:
  322. cluster_id: {{ stack_name }}
  323. description:
  324. str_replace:
  325. template: Security group for cluster_id OpenShift cluster nodes
  326. params:
  327. cluster_id: {{ stack_name }}
  328. rules:
  329. - direction: ingress
  330. protocol: tcp
  331. port_range_min: 10250
  332. port_range_max: 10250
  333. remote_mode: remote_group_id
  334. - direction: ingress
  335. protocol: tcp
  336. port_range_min: 10255
  337. port_range_max: 10255
  338. remote_mode: remote_group_id
  339. - direction: ingress
  340. protocol: udp
  341. port_range_min: 10255
  342. port_range_max: 10255
  343. remote_mode: remote_group_id
  344. - direction: ingress
  345. protocol: udp
  346. port_range_min: 4789
  347. port_range_max: 4789
  348. remote_mode: remote_group_id
  349. - direction: ingress
  350. protocol: tcp
  351. port_range_min: 30000
  352. port_range_max: 32767
  353. remote_ip_prefix: {{ node_ingress_cidr }}
  354. - direction: ingress
  355. protocol: tcp
  356. port_range_min: 30000
  357. port_range_max: 32767
  358. remote_ip_prefix: "{{ openstack_subnet_prefix }}.0/24"
  359. {% endif %}
  360. infra-secgrp:
  361. type: OS::Neutron::SecurityGroup
  362. properties:
  363. name:
  364. str_replace:
  365. template: openshift-ansible-cluster_id-infra-secgrp
  366. params:
  367. cluster_id: {{ stack_name }}
  368. description:
  369. str_replace:
  370. template: Security group for cluster_id OpenShift infrastructure cluster nodes
  371. params:
  372. cluster_id: {{ stack_name }}
  373. rules:
  374. - direction: ingress
  375. protocol: tcp
  376. port_range_min: 80
  377. port_range_max: 80
  378. - direction: ingress
  379. protocol: tcp
  380. port_range_min: 443
  381. port_range_max: 443
  382. {% if num_dns|int > 0 %}
  383. dns-secgrp:
  384. type: OS::Neutron::SecurityGroup
  385. properties:
  386. name:
  387. str_replace:
  388. template: openshift-ansible-cluster_id-dns-secgrp
  389. params:
  390. cluster_id: {{ stack_name }}
  391. description:
  392. str_replace:
  393. template: Security group for cluster_id cluster DNS
  394. params:
  395. cluster_id: {{ stack_name }}
  396. rules:
  397. - direction: ingress
  398. protocol: udp
  399. port_range_min: 53
  400. port_range_max: 53
  401. remote_ip_prefix: {{ node_ingress_cidr }}
  402. - direction: ingress
  403. protocol: udp
  404. port_range_min: 53
  405. port_range_max: 53
  406. remote_ip_prefix: "{{ openstack_subnet_prefix }}.0/24"
  407. - direction: ingress
  408. protocol: tcp
  409. port_range_min: 53
  410. port_range_max: 53
  411. remote_ip_prefix: {{ node_ingress_cidr }}
  412. - direction: ingress
  413. protocol: tcp
  414. port_range_min: 53
  415. port_range_max: 53
  416. remote_ip_prefix: "{{ openstack_subnet_prefix }}.0/24"
  417. {% endif %}
  418. {% if num_masters|int > 1 or ui_ssh_tunnel|bool %}
  419. lb-secgrp:
  420. type: OS::Neutron::SecurityGroup
  421. properties:
  422. name: openshift-ansible-{{ stack_name }}-lb-secgrp
  423. description: Security group for {{ stack_name }} cluster Load Balancer
  424. rules:
  425. - direction: ingress
  426. protocol: tcp
  427. port_range_min: {{ openshift_master_api_port | default(8443) }}
  428. port_range_max: {{ openshift_master_api_port | default(8443) }}
  429. remote_ip_prefix: {{ lb_ingress_cidr | default(bastion_ingress_cidr) }}
  430. {% if ui_ssh_tunnel|bool %}
  431. - direction: ingress
  432. protocol: tcp
  433. port_range_min: {{ openshift_master_api_port | default(8443) }}
  434. port_range_max: {{ openshift_master_api_port | default(8443) }}
  435. remote_ip_prefix: {{ ssh_ingress_cidr }}
  436. {% endif %}
  437. {% if openshift_master_console_port is defined and openshift_master_console_port != openshift_master_api_port %}
  438. - direction: ingress
  439. protocol: tcp
  440. port_range_min: {{ openshift_master_console_port | default(8443) }}
  441. port_range_max: {{ openshift_master_console_port | default(8443) }}
  442. remote_ip_prefix: {{ lb_ingress_cidr | default(bastion_ingress_cidr) }}
  443. {% endif %}
  444. {% endif %}
  445. etcd:
  446. type: OS::Heat::ResourceGroup
  447. properties:
  448. count: {{ num_etcd }}
  449. resource_def:
  450. {% if use_bastion|bool %}
  451. type: server_nofloating.yaml
  452. {% else %}
  453. type: server.yaml
  454. {% endif %}
  455. properties:
  456. name:
  457. str_replace:
  458. template: k8s_type-%index%.cluster_id
  459. params:
  460. cluster_id: {{ stack_name }}
  461. k8s_type: {{ etcd_hostname }}
  462. cluster_env: {{ public_dns_domain }}
  463. cluster_id: {{ stack_name }}
  464. group:
  465. str_replace:
  466. template: k8s_type.cluster_id
  467. params:
  468. k8s_type: etcds
  469. cluster_id: {{ stack_name }}
  470. type: etcd
  471. image: {{ openstack_etcd_image }}
  472. flavor: {{ etcd_flavor }}
  473. key_name: {{ ssh_public_key }}
  474. {% if provider_network %}
  475. net: {{ provider_network }}
  476. net_name: {{ provider_network }}
  477. {% else %}
  478. net: { get_resource: net }
  479. subnet: { get_resource: subnet }
  480. net_name:
  481. str_replace:
  482. template: openshift-ansible-cluster_id-net
  483. params:
  484. cluster_id: {{ stack_name }}
  485. {% endif %}
  486. secgrp:
  487. - { get_resource: {% if openstack_flat_secgrp|default(False)|bool %}flat-secgrp{% else %}etcd-secgrp{% endif %} }
  488. - { get_resource: common-secgrp }
  489. {% if not use_bastion|bool and not provider_network %}
  490. floating_network: {{ external_network }}
  491. {% endif %}
  492. volume_size: {{ etcd_volume_size }}
  493. {% if not provider_network %}
  494. depends_on:
  495. - interface
  496. {% endif %}
  497. {% if num_masters|int > 1 %}
  498. loadbalancer:
  499. type: OS::Heat::ResourceGroup
  500. properties:
  501. count: 1
  502. resource_def:
  503. type: server.yaml
  504. properties:
  505. name:
  506. str_replace:
  507. template: k8s_type-%index%.cluster_id
  508. params:
  509. cluster_id: {{ stack_name }}
  510. k8s_type: {{ lb_hostname }}
  511. cluster_env: {{ public_dns_domain }}
  512. cluster_id: {{ stack_name }}
  513. group:
  514. str_replace:
  515. template: k8s_type.cluster_id
  516. params:
  517. k8s_type: lb
  518. cluster_id: {{ stack_name }}
  519. type: lb
  520. image: {{ openstack_lb_image }}
  521. flavor: {{ lb_flavor }}
  522. key_name: {{ ssh_public_key }}
  523. {% if provider_network %}
  524. net: {{ provider_network }}
  525. net_name: {{ provider_network }}
  526. {% else %}
  527. net: { get_resource: net }
  528. subnet: { get_resource: subnet }
  529. net_name:
  530. str_replace:
  531. template: openshift-ansible-cluster_id-net
  532. params:
  533. cluster_id: {{ stack_name }}
  534. {% endif %}
  535. secgrp:
  536. - { get_resource: lb-secgrp }
  537. - { get_resource: common-secgrp }
  538. {% if not provider_network %}
  539. floating_network: {{ external_network }}
  540. {% endif %}
  541. volume_size: {{ lb_volume_size }}
  542. {% if not provider_network %}
  543. depends_on:
  544. - interface
  545. {% endif %}
  546. {% endif %}
  547. masters:
  548. type: OS::Heat::ResourceGroup
  549. properties:
  550. count: {{ num_masters }}
  551. resource_def:
  552. {% if use_bastion|bool %}
  553. type: server_nofloating.yaml
  554. {% else %}
  555. type: server.yaml
  556. {% endif %}
  557. properties:
  558. name:
  559. str_replace:
  560. template: k8s_type-%index%.cluster_id
  561. params:
  562. cluster_id: {{ stack_name }}
  563. k8s_type: {{ master_hostname }}
  564. cluster_env: {{ public_dns_domain }}
  565. cluster_id: {{ stack_name }}
  566. group:
  567. str_replace:
  568. template: k8s_type.cluster_id
  569. params:
  570. k8s_type: masters
  571. cluster_id: {{ stack_name }}
  572. type: master
  573. image: {{ openstack_master_image }}
  574. flavor: {{ master_flavor }}
  575. key_name: {{ ssh_public_key }}
  576. {% if provider_network %}
  577. net: {{ provider_network }}
  578. net_name: {{ provider_network }}
  579. {% else %}
  580. net: { get_resource: net }
  581. subnet: { get_resource: subnet }
  582. net_name:
  583. str_replace:
  584. template: openshift-ansible-cluster_id-net
  585. params:
  586. cluster_id: {{ stack_name }}
  587. {% endif %}
  588. secgrp:
  589. {% if openstack_flat_secgrp|default(False)|bool %}
  590. - { get_resource: flat-secgrp }
  591. {% else %}
  592. - { get_resource: master-secgrp }
  593. - { get_resource: node-secgrp }
  594. {% if num_etcd|int == 0 %}
  595. - { get_resource: etcd-secgrp }
  596. {% endif %}
  597. {% endif %}
  598. - { get_resource: common-secgrp }
  599. {% if not use_bastion|bool and not provider_network %}
  600. floating_network: {{ external_network }}
  601. {% endif %}
  602. volume_size: {{ master_volume_size }}
  603. {% if not provider_network %}
  604. depends_on:
  605. - interface
  606. {% endif %}
  607. compute_nodes:
  608. type: OS::Heat::ResourceGroup
  609. properties:
  610. count: {{ num_nodes }}
  611. removal_policies:
  612. - resource_list: {{ nodes_to_remove }}
  613. resource_def:
  614. {% if use_bastion|bool %}
  615. type: server_nofloating.yaml
  616. {% else %}
  617. type: server.yaml
  618. {% endif %}
  619. properties:
  620. name:
  621. str_replace:
  622. template: sub_type_k8s_type-%index%.cluster_id
  623. params:
  624. cluster_id: {{ stack_name }}
  625. sub_type_k8s_type: {{ node_hostname }}
  626. cluster_env: {{ public_dns_domain }}
  627. cluster_id: {{ stack_name }}
  628. group:
  629. str_replace:
  630. template: k8s_type.cluster_id
  631. params:
  632. k8s_type: nodes
  633. cluster_id: {{ stack_name }}
  634. type: node
  635. subtype: app
  636. node_labels:
  637. {% for k, v in openshift_cluster_node_labels.app.iteritems() %}
  638. {{ k|e }}: {{ v|e }}
  639. {% endfor %}
  640. image: {{ openstack_node_image }}
  641. flavor: {{ node_flavor }}
  642. key_name: {{ ssh_public_key }}
  643. {% if provider_network %}
  644. net: {{ provider_network }}
  645. net_name: {{ provider_network }}
  646. {% else %}
  647. net: { get_resource: net }
  648. subnet: { get_resource: subnet }
  649. net_name:
  650. str_replace:
  651. template: openshift-ansible-cluster_id-net
  652. params:
  653. cluster_id: {{ stack_name }}
  654. {% endif %}
  655. secgrp:
  656. - { get_resource: {% if openstack_flat_secgrp|default(False)|bool %}flat-secgrp{% else %}node-secgrp{% endif %} }
  657. - { get_resource: common-secgrp }
  658. {% if not use_bastion|bool and not provider_network %}
  659. floating_network: {{ external_network }}
  660. {% endif %}
  661. volume_size: {{ node_volume_size }}
  662. {% if not provider_network %}
  663. depends_on:
  664. - interface
  665. {% endif %}
  666. infra_nodes:
  667. type: OS::Heat::ResourceGroup
  668. properties:
  669. count: {{ num_infra }}
  670. resource_def:
  671. type: server.yaml
  672. properties:
  673. name:
  674. str_replace:
  675. template: sub_type_k8s_type-%index%.cluster_id
  676. params:
  677. cluster_id: {{ stack_name }}
  678. sub_type_k8s_type: {{ infra_hostname }}
  679. cluster_env: {{ public_dns_domain }}
  680. cluster_id: {{ stack_name }}
  681. group:
  682. str_replace:
  683. template: k8s_type.cluster_id
  684. params:
  685. k8s_type: infra
  686. cluster_id: {{ stack_name }}
  687. type: node
  688. subtype: infra
  689. node_labels:
  690. {% for k, v in openshift_cluster_node_labels.infra.iteritems() %}
  691. {{ k|e }}: {{ v|e }}
  692. {% endfor %}
  693. image: {{ openstack_infra_image }}
  694. flavor: {{ infra_flavor }}
  695. key_name: {{ ssh_public_key }}
  696. {% if provider_network %}
  697. net: {{ provider_network }}
  698. net_name: {{ provider_network }}
  699. {% else %}
  700. net: { get_resource: net }
  701. subnet: { get_resource: subnet }
  702. net_name:
  703. str_replace:
  704. template: openshift-ansible-cluster_id-net
  705. params:
  706. cluster_id: {{ stack_name }}
  707. {% endif %}
  708. secgrp:
  709. # TODO(bogdando) filter only required node rules into infra-secgrp
  710. {% if openstack_flat_secgrp|default(False)|bool %}
  711. - { get_resource: flat-secgrp }
  712. {% else %}
  713. - { get_resource: node-secgrp }
  714. {% endif %}
  715. {% if ui_ssh_tunnel|bool and num_masters|int < 2 %}
  716. - { get_resource: lb-secgrp }
  717. {% endif %}
  718. - { get_resource: infra-secgrp }
  719. - { get_resource: common-secgrp }
  720. {% if not provider_network %}
  721. floating_network: {{ external_network }}
  722. {% endif %}
  723. volume_size: {{ infra_volume_size }}
  724. {% if not provider_network %}
  725. depends_on:
  726. - interface
  727. {% endif %}
  728. {% if num_dns|int > 0 %}
  729. dns:
  730. type: OS::Heat::ResourceGroup
  731. properties:
  732. count: {{ num_dns }}
  733. resource_def:
  734. type: server.yaml
  735. properties:
  736. name:
  737. str_replace:
  738. template: k8s_type-%index%.cluster_id
  739. params:
  740. cluster_id: {{ stack_name }}
  741. k8s_type: {{ dns_hostname }}
  742. cluster_env: {{ public_dns_domain }}
  743. cluster_id: {{ stack_name }}
  744. group:
  745. str_replace:
  746. template: k8s_type.cluster_id
  747. params:
  748. k8s_type: dns
  749. cluster_id: {{ stack_name }}
  750. type: dns
  751. image: {{ openstack_dns_image }}
  752. flavor: {{ dns_flavor }}
  753. key_name: {{ ssh_public_key }}
  754. {% if provider_network %}
  755. net: {{ provider_network }}
  756. net_name: {{ provider_network }}
  757. {% else %}
  758. net: { get_resource: net }
  759. subnet: { get_resource: subnet }
  760. net_name:
  761. str_replace:
  762. template: openshift-ansible-cluster_id-net
  763. params:
  764. cluster_id: {{ stack_name }}
  765. {% endif %}
  766. secgrp:
  767. - { get_resource: dns-secgrp }
  768. - { get_resource: common-secgrp }
  769. {% if not provider_network %}
  770. floating_network: {{ external_network }}
  771. {% endif %}
  772. volume_size: {{ dns_volume_size }}
  773. {% if not provider_network %}
  774. depends_on:
  775. - interface
  776. {% endif %}
  777. {% endif %}