heat_stack.yaml.j2 26 KB

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