heat_stack.yaml.j2 24 KB

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