heat_stack.yaml.j2 30 KB

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