heat_stack.yaml.j2 29 KB

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