heat_stack.yaml.j2 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182
  1. heat_template_version: {{ openshift_openstack_heat_template_version }}
  2. description: OpenShift cluster
  3. parameters:
  4. outputs:
  5. {% if openshift_openstack_resolve_heat_outputs|default(True)|bool %}
  6. etcd_names:
  7. description: Name of the etcds
  8. value: { get_attr: [ etcd, name ] }
  9. etcd_ips:
  10. description: IPs of the etcds
  11. value: { get_attr: [ etcd, private_ip ] }
  12. {% if openshift_openstack_etcd_floating_ip | default(True) | bool %}
  13. etcd_floating_ips:
  14. description: Floating IPs of the etcds
  15. value: { get_attr: [ etcd, floating_ip ] }
  16. {% endif %}
  17. master_names:
  18. description: Name of the masters
  19. value: { get_attr: [ masters, name ] }
  20. master_ips:
  21. description: IPs of the masters
  22. value: { get_attr: [ masters, private_ip ] }
  23. {% if openshift_openstack_master_floating_ip | default(True) | bool %}
  24. master_floating_ips:
  25. description: Floating IPs of the masters
  26. value: { get_attr: [ masters, floating_ip ] }
  27. {% endif %}
  28. node_names:
  29. description: Name of the nodes
  30. value: { get_attr: [ compute_nodes, name ] }
  31. node_ips:
  32. description: IPs of the nodes
  33. value: { get_attr: [ compute_nodes, private_ip ] }
  34. {% if openshift_openstack_compute_floating_ip | default(True) | bool %}
  35. node_floating_ips:
  36. description: Floating IPs of the nodes
  37. value: { get_attr: [ compute_nodes, floating_ip ] }
  38. {% endif %}
  39. infra_names:
  40. description: Name of the nodes
  41. value: { get_attr: [ infra_nodes, name ] }
  42. infra_ips:
  43. description: IPs of the nodes
  44. value: { get_attr: [ infra_nodes, private_ip ] }
  45. {% if openshift_openstack_infra_floating_ip | default(True) | bool %}
  46. infra_floating_ips:
  47. description: Floating IPs of the nodes
  48. value: { get_attr: [ infra_nodes, floating_ip ] }
  49. {% endif %}
  50. {% endif %}
  51. public_api_ip:
  52. description: IP address for the API/UI endpoint
  53. {% if openshift_openstack_use_lbaas_load_balancer and openshift_openstack_load_balancer_floating_ip %}
  54. value: { get_attr: [api_lb_floating_ip, floating_ip_address] }
  55. {% elif openshift_openstack_use_lbaas_load_balancer and not openshift_openstack_load_balancer_floating_ip %}
  56. value: { get_attr: [api_lb, vip_address] }
  57. {% elif openshift_openstack_use_vm_load_balancer %}
  58. value: { get_attr: [loadbalancer, resource.0, floating_ip] }
  59. {% else %}
  60. value: { get_attr: [masters, resource.0, floating_ip] }
  61. {% endif %}
  62. public_router_ip:
  63. description: IP address of the apps/router endpoint
  64. {% if openshift_openstack_use_lbaas_load_balancer and openshift_openstack_load_balancer_floating_ip %}
  65. value: { get_attr: [router_lb_floating_ip, floating_ip_address] }
  66. {% elif openshift_openstack_use_lbaas_load_balancer and not openshift_openstack_load_balancer_floating_ip %}
  67. value: { get_attr: [router_lb, vip_address] }
  68. {% else %}
  69. # NOTE(shadower): The VM-based loadbalancer only supports master nodes
  70. value: { get_attr: [infra_nodes, resource.0, floating_ip] }
  71. {% endif %}
  72. private_api_ip:
  73. description: >
  74. The address of the private OpenShift API. This is used during OpenShift
  75. deployment and for API access by the internal pods and services.
  76. {% if openshift_openstack_use_lbaas_load_balancer or openshift_use_kuryr|default(false)|bool %}
  77. value: { get_attr: [api_lb, vip_address] }
  78. {% elif openshift_openstack_use_vm_load_balancer %}
  79. value: { get_attr: [loadbalancer, resource.0, private_ip] }
  80. {% else %}
  81. value: { get_attr: [masters, resource.0, private_ip] }
  82. {% endif %}
  83. {% if openshift_use_kuryr|default(false)|bool %}
  84. vm_subnet:
  85. description: ID of the subnet the Pods will be on
  86. {% if not openshift_openstack_node_subnet_name %}
  87. value: { get_resource: subnet }
  88. {% else %}
  89. value: {{ openshift_openstack_node_subnet_id }}
  90. {% endif %}
  91. pod_subnet:
  92. description: ID of the subnet the Pods will be on
  93. value: { get_resource: pod_subnet }
  94. service_subnet:
  95. description: ID of the subnet the services will be on
  96. value: { get_resource: service_subnet }
  97. pod_router:
  98. description: ID of the router where the pod subnet will be connected
  99. {% if not openshift_openstack_router_name %}
  100. value: { get_resource: router }
  101. {% else %}
  102. value: {{ openshift_openstack_router_id }}
  103. {% endif %}
  104. {% if openshift_kuryr_subnet_driver|default('default') == 'namespace' %}
  105. pod_subnet_pool:
  106. description: ID of the subnet pool to use for the pod_subnets CIDRs
  107. value: { get_resource: pod_subnet_pool }
  108. {% endif %}
  109. {% if openshift_kuryr_sg_driver|default('default') == 'namespace' %}
  110. sg_allow_from_default:
  111. description: ID of the security group to enable access from default namespace
  112. value: { get_resource: sg_allow_from_default}
  113. sg_allow_from_namespace:
  114. description: ID of the security group to enable access from namespaces to default namespace
  115. value: { get_resource: sg_allow_from_namespace}
  116. {% endif %}
  117. pod_access_sg_id:
  118. description: Id of the security group for services to be able to reach pods
  119. value: { get_resource: pod_access_sg }
  120. api_lb_vip_port_id:
  121. description: Id of the OpenShift API load balancer VIP port
  122. value: { get_attr: [api_lb, vip_port_id] }
  123. api_lb_sg_id:
  124. description: Security Group Id of the OpenShift API load balancer VIP port
  125. value: { get_resource: lb-secgrp }
  126. api_lb_provider:
  127. description: Id of the OpenShift API load balancer VIP port
  128. value: { get_attr: [api_lb, show, provider] }
  129. {% endif %}
  130. conditions:
  131. no_floating: {% if openshift_openstack_provider_network_name %}true{% else %}false{% endif %}
  132. resources:
  133. # NOTE: With Kuryr, the load balancer is necessary.
  134. {% if openshift_openstack_use_lbaas_load_balancer or (openshift_use_kuryr|default(false)|bool and not openshift_openstack_provider_network_name) %}
  135. api_lb:
  136. type: OS::{{ openshift_openstack_lbaasv2_provider }}::LoadBalancer
  137. properties:
  138. name:
  139. str_replace:
  140. template: openshift-ansible-cluster_id-api-lb
  141. params:
  142. cluster_id: {{ openshift_openstack_full_dns_domain }}
  143. {% if openshift_use_kuryr|default(false)|bool %}
  144. vip_address: {{ openshift_openstack_kuryr_service_subnet_cidr | ipaddr('1') | ipaddr('address') }}
  145. vip_subnet: { get_resource: service_subnet }
  146. {% elif openshift_openstack_node_subnet_name %}
  147. vip_subnet: {{ openshift_openstack_node_subnet_name }}
  148. {% else %}
  149. vip_subnet: { get_resource: subnet }
  150. {% endif %}
  151. api_lb_listener:
  152. type: OS::{{ openshift_openstack_lbaasv2_provider }}::Listener
  153. properties:
  154. name:
  155. str_replace:
  156. template: openshift-ansible-cluster_id-api-lb-listener
  157. params:
  158. cluster_id: {{ openshift_openstack_full_dns_domain }}
  159. loadbalancer: { get_resource: api_lb }
  160. protocol: HTTPS
  161. protocol_port: {{ openshift_master_api_port }}
  162. default_pool: { get_resource: api_lb_pool }
  163. {% if openshift_use_kuryr|default(false)|bool and openshift_master_api_port|default(8443) != 443 %}
  164. # 443 listener for pod access. In non-kuryr envs handled by iptables
  165. internal_api_lb_listener:
  166. type: OS::{{ openshift_openstack_lbaasv2_provider }}::Listener
  167. properties:
  168. name:
  169. str_replace:
  170. template: openshift-ansible-cluster_id-api-lb-internal-listener
  171. params:
  172. cluster_id: {{ openshift_openstack_full_dns_domain }}
  173. loadbalancer: { get_resource: api_lb }
  174. protocol: HTTPS
  175. protocol_port: 443
  176. default_pool: { get_resource: api_lb_pool }
  177. {% endif %}
  178. api_lb_pool:
  179. type: OS::{{ openshift_openstack_lbaasv2_provider }}::Pool
  180. properties:
  181. name:
  182. str_replace:
  183. template: openshift-ansible-cluster_id-api-lb-pool
  184. params:
  185. cluster_id: {{ openshift_openstack_full_dns_domain }}
  186. protocol: HTTPS
  187. # TODO(shadower): Make this configurable?
  188. lb_algorithm: ROUND_ROBIN
  189. loadbalancer: { get_resource: api_lb }
  190. {% endif %}
  191. {% if not openshift_openstack_provider_network_name %}
  192. {% if openshift_use_kuryr|default(false)|bool %}
  193. pod_net:
  194. type: OS::Neutron::Net
  195. properties:
  196. name:
  197. str_replace:
  198. template: openshift-ansible-cluster_id-pod-net
  199. params:
  200. cluster_id: {{ openshift_openstack_full_dns_domain }}
  201. {% if openshift_kuryr_subnet_driver|default('default') == 'namespace' %}
  202. pod_subnet_pool:
  203. type: OS::Neutron::SubnetPool
  204. properties:
  205. prefixes: [ {{ openshift_openstack_kuryr_pod_subnet_cidr }} ]
  206. default_prefixlen: 24
  207. name:
  208. str_replace:
  209. template: openshift-ansible-cluster_id-pod-subnet-pool
  210. params:
  211. cluster_id: {{ openshift_openstack_full_dns_domain }}
  212. {% endif %}
  213. {% if openshift_kuryr_sg_driver|default('default') == 'namespace' %}
  214. sg_allow_from_default:
  215. type: OS::Neutron::SecurityGroup
  216. properties:
  217. name:
  218. str_replace:
  219. template: openshift-ansible-cluster_id-allow_from_default
  220. params:
  221. cluster_id: {{ openshift_openstack_full_dns_domain }}
  222. description: Give access to the services and pods from the default namespace
  223. sg_allow_from_namespace:
  224. type: OS::Neutron::SecurityGroup
  225. properties:
  226. name:
  227. str_replace:
  228. template: openshift-ansible-cluster_id-allow_from_namespace
  229. params:
  230. cluster_id: {{ openshift_openstack_full_dns_domain }}
  231. description: Give access to the services and pods on the default namespace from the other namespaces
  232. rules:
  233. - ethertype: IPv4
  234. remote_group_id: { get_resource: sg_allow_from_default }
  235. remote_mode: remote_group_id
  236. sg_allow_from_default_rule:
  237. type: OS::Neutron::SecurityGroupRule
  238. properties:
  239. security_group: { get_resource: sg_allow_from_default }
  240. ethertype: IPv4
  241. remote_group: { get_resource: sg_allow_from_namespace }
  242. common-secgrp_namespace_rule:
  243. type: OS::Neutron::SecurityGroupRule
  244. properties:
  245. security_group: { get_resource: common-secgrp }
  246. ethertype: IPv4
  247. remote_group: { get_resource: sg_allow_from_namespace }
  248. common-secgrp_default_rule:
  249. type: OS::Neutron::SecurityGroupRule
  250. properties:
  251. security_group: { get_resource: common-secgrp }
  252. ethertype: IPv4
  253. remote_group: { get_resource: sg_allow_from_default }
  254. {% endif %}
  255. pod_subnet:
  256. type: OS::Neutron::Subnet
  257. properties:
  258. network_id: { get_resource: pod_net }
  259. {% if openshift_kuryr_subnet_driver|default('default') == 'namespace' %}
  260. subnetpool: { get_resource: pod_subnet_pool }
  261. {% else %}
  262. cidr: {{ openshift_openstack_kuryr_pod_subnet_cidr }}
  263. {% endif %}
  264. enable_dhcp: False
  265. name:
  266. str_replace:
  267. template: openshift-ansible-cluster_id-pod-subnet
  268. params:
  269. cluster_id: {{ openshift_openstack_full_dns_domain }}
  270. dns_nameservers:
  271. {% for nameserver in openshift_openstack_dns_nameservers %}
  272. - {{ nameserver }}
  273. {% endfor %}
  274. service_net:
  275. type: OS::Neutron::Net
  276. properties:
  277. name:
  278. str_replace:
  279. template: openshift-ansible-cluster_id-service-net
  280. params:
  281. cluster_id: {{ openshift_openstack_full_dns_domain }}
  282. service_subnet:
  283. type: OS::Neutron::Subnet
  284. properties:
  285. network_id: { get_resource: service_net }
  286. cidr: {{ openshift_openstack_kuryr_service_subnet_cidr }}
  287. gateway_ip: {{ openshift_openstack_kuryr_service_subnet_cidr | ipaddr('-2') | ipaddr('address') }}
  288. enable_dhcp: False
  289. allocation_pools:
  290. - start: {{ openshift_openstack_kuryr_service_pool_start }}
  291. end: {{ openshift_openstack_kuryr_service_pool_end }}
  292. name:
  293. str_replace:
  294. template: openshift-ansible-cluster_id-service-subnet
  295. params:
  296. cluster_id: {{ openshift_openstack_full_dns_domain }}
  297. {% endif %}
  298. {% if not openshift_openstack_node_subnet_name %}
  299. net:
  300. type: OS::Neutron::Net
  301. properties:
  302. name:
  303. str_replace:
  304. template: openshift-ansible-cluster_id-net
  305. params:
  306. cluster_id: {{ openshift_openstack_full_dns_domain }}
  307. {% endif %}
  308. {% if not openshift_openstack_node_subnet_name %}
  309. subnet:
  310. type: OS::Neutron::Subnet
  311. properties:
  312. name:
  313. str_replace:
  314. template: openshift-ansible-cluster_id-subnet
  315. params:
  316. cluster_id: {{ openshift_openstack_full_dns_domain }}
  317. network: { get_resource: net }
  318. cidr: {{ openshift_openstack_subnet_cidr }}
  319. allocation_pools:
  320. - start: {{ openshift_openstack_pool_start }}
  321. end: {{ openshift_openstack_pool_end }}
  322. dns_nameservers:
  323. {% for nameserver in openshift_openstack_dns_nameservers %}
  324. - {{ nameserver }}
  325. {% endfor %}
  326. {% endif %}
  327. {% if openshift_use_flannel|default(False)|bool %}
  328. data_net:
  329. type: OS::Neutron::Net
  330. properties:
  331. name: openshift-ansible-{{ openshift_openstack_full_dns_domain }}-data-net
  332. port_security_enabled: false
  333. data_subnet:
  334. type: OS::Neutron::Subnet
  335. properties:
  336. name: openshift-ansible-{{ openshift_openstack_full_dns_domain }}-data-subnet
  337. network: { get_resource: data_net }
  338. cidr: {{ openshift_cluster_network_cidr }}
  339. gateway_ip: null
  340. {% endif %}
  341. {% if not openshift_openstack_router_name and not openshift_openstack_node_subnet_name %}
  342. router:
  343. type: OS::Neutron::Router
  344. properties:
  345. name:
  346. str_replace:
  347. template: openshift-ansible-cluster_id-router
  348. params:
  349. cluster_id: {{ openshift_openstack_full_dns_domain }}
  350. external_gateway_info:
  351. network: {{ openshift_openstack_external_network_name }}
  352. interface:
  353. type: OS::Neutron::RouterInterface
  354. properties:
  355. router_id: { get_resource: router }
  356. subnet_id: { get_resource: subnet }
  357. {% endif %}
  358. {% if openshift_use_kuryr|default(false)|bool %}
  359. pod_subnet_interface:
  360. type: OS::Neutron::RouterInterface
  361. properties:
  362. {% if not openshift_openstack_router_name %}
  363. router_id: { get_resource: router }
  364. {% else %}
  365. router_id: {{ openshift_openstack_router_id }}
  366. {% endif %}
  367. subnet_id: { get_resource: pod_subnet }
  368. service_router_port:
  369. type: OS::Neutron::Port
  370. properties:
  371. network: { get_resource: service_net}
  372. fixed_ips:
  373. - subnet: { get_resource: service_subnet }
  374. ip_address: {{ openshift_openstack_kuryr_service_subnet_cidr | ipaddr('-2') | ipaddr('address') }}
  375. name:
  376. str_replace:
  377. template: openshift-ansible-cluster_id-service-subnet-router-port
  378. params:
  379. cluster_id: {{ openshift_openstack_full_dns_domain }}
  380. service_subnet_interface:
  381. type: OS::Neutron::RouterInterface
  382. properties:
  383. {% if not openshift_openstack_router_name %}
  384. router_id: { get_resource: router }
  385. {% else %}
  386. router_id: {{ openshift_openstack_router_id }}
  387. {% endif %}
  388. port: { get_resource: service_router_port }
  389. {% endif %}
  390. {% endif %}
  391. # keypair:
  392. # type: OS::Nova::KeyPair
  393. # properties:
  394. # name:
  395. # str_replace:
  396. # template: openshift-ansible-cluster_id-keypair
  397. # params:
  398. # cluster_id: {{ openshift_openstack_full_dns_domain }}
  399. # public_key: {{ openshift_openstack_keypair_name }}
  400. common-secgrp:
  401. type: OS::Neutron::SecurityGroup
  402. properties:
  403. name:
  404. str_replace:
  405. template: openshift-ansible-cluster_id-common-secgrp
  406. params:
  407. cluster_id: {{ openshift_openstack_full_dns_domain }}
  408. description:
  409. str_replace:
  410. template: Basic ssh/icmp security group for cluster_id OpenShift cluster
  411. params:
  412. cluster_id: {{ openshift_openstack_full_dns_domain }}
  413. rules: {{ openshift_openstack_common_secgroup_rules|to_json }}
  414. {% if openshift_use_kuryr|default(false)|bool %}
  415. pod_access_sg:
  416. type: OS::Neutron::SecurityGroup
  417. properties:
  418. name:
  419. str_replace:
  420. template: openshift-ansible-cluster_id-pod-service-secgrp
  421. params:
  422. cluster_id: {{ openshift_openstack_full_dns_domain }}
  423. description: Give services and nodes access to the pods
  424. rules:
  425. - ethertype: IPv4
  426. remote_ip_prefix: {{ openshift_openstack_kuryr_service_subnet_cidr }}
  427. - ethertype: IPv4
  428. remote_ip_prefix: {{ openshift_openstack_subnet_cidr }}
  429. {% if openshift_kuryr_sg_driver|default('default') != 'namespace' %}
  430. - ethertype: IPv4
  431. remote_mode: remote_group_id
  432. {% endif %}
  433. {% endif %}
  434. {% if openshift_openstack_flat_secgrp|default(False)|bool %}
  435. flat-secgrp:
  436. type: OS::Neutron::SecurityGroup
  437. properties:
  438. name:
  439. str_replace:
  440. template: openshift-ansible-cluster_id-flat-secgrp
  441. params:
  442. cluster_id: {{ openshift_openstack_full_dns_domain }}
  443. description:
  444. str_replace:
  445. template: Security group for cluster_id OpenShift cluster
  446. params:
  447. cluster_id: {{ openshift_openstack_full_dns_domain }}
  448. rules:
  449. {% for rule in openshift_openstack_master_secgroup_rules|list %}
  450. - {{ rule|to_json }}
  451. {% endfor %}
  452. {% for rule in openshift_openstack_etcd_secgroup_rules|list %}
  453. - {{ rule|to_json }}
  454. {% endfor %}
  455. {% for rule in openshift_openstack_node_secgroup_rules|list %}
  456. - {{ rule|to_json }}
  457. {% endfor %}
  458. {% for rule in openshift_openstack_infra_secgroup_rules|list %}
  459. - {{ rule|to_json }}
  460. {% endfor %}
  461. {% else %}
  462. master-secgrp:
  463. type: OS::Neutron::SecurityGroup
  464. properties:
  465. name:
  466. str_replace:
  467. template: openshift-ansible-cluster_id-master-secgrp
  468. params:
  469. cluster_id: {{ openshift_openstack_full_dns_domain }}
  470. description:
  471. str_replace:
  472. template: Security group for cluster_id OpenShift cluster master
  473. params:
  474. cluster_id: {{ openshift_openstack_full_dns_domain }}
  475. rules: {{ openshift_openstack_master_secgroup_rules|to_json }}
  476. etcd-secgrp:
  477. type: OS::Neutron::SecurityGroup
  478. properties:
  479. name:
  480. str_replace:
  481. template: openshift-ansible-cluster_id-etcd-secgrp
  482. params:
  483. cluster_id: {{ openshift_openstack_full_dns_domain }}
  484. description:
  485. str_replace:
  486. template: Security group for cluster_id etcd cluster
  487. params:
  488. cluster_id: {{ openshift_openstack_full_dns_domain }}
  489. rules: {{ openshift_openstack_etcd_secgroup_rules|to_json }}
  490. node-secgrp:
  491. type: OS::Neutron::SecurityGroup
  492. properties:
  493. name:
  494. str_replace:
  495. template: openshift-ansible-cluster_id-node-secgrp
  496. params:
  497. cluster_id: {{ openshift_openstack_full_dns_domain }}
  498. description:
  499. str_replace:
  500. template: Security group for cluster_id OpenShift cluster nodes
  501. params:
  502. cluster_id: {{ openshift_openstack_full_dns_domain }}
  503. rules: {{ openshift_openstack_node_secgroup_rules|to_json }}
  504. infra-secgrp:
  505. type: OS::Neutron::SecurityGroup
  506. properties:
  507. name:
  508. str_replace:
  509. template: openshift-ansible-cluster_id-infra-secgrp
  510. params:
  511. cluster_id: {{ openshift_openstack_full_dns_domain }}
  512. description:
  513. str_replace:
  514. template: Security group for cluster_id OpenShift infrastructure cluster nodes
  515. params:
  516. cluster_id: {{ openshift_openstack_full_dns_domain }}
  517. rules: {{ openshift_openstack_infra_secgroup_rules|to_json }}
  518. {% if openshift_openstack_num_cns > 0 %}
  519. cns-secgrp:
  520. type: OS::Neutron::SecurityGroup
  521. properties:
  522. name:
  523. str_replace:
  524. template: openshift-ansible-cluster_id-cns-secgrp
  525. params:
  526. cluster_id: {{ openshift_openstack_full_dns_domain }}
  527. description:
  528. str_replace:
  529. template: Security group for cluster_id OpenShift cns cluster nodes
  530. params:
  531. cluster_id: {{ openshift_openstack_full_dns_domain }}
  532. rules: {{ openshift_openstack_cns_secgroup_rules|to_json }}
  533. {% endif %}
  534. {% endif %}
  535. lb-secgrp:
  536. type: OS::Neutron::SecurityGroup
  537. properties:
  538. name: openshift-ansible-{{ openshift_openstack_full_dns_domain }}-lb-secgrp
  539. description: Security group for {{ openshift_openstack_full_dns_domain }} cluster Load Balancer
  540. rules:
  541. {% if openshift_master_console_port is defined and openshift_master_console_port != openshift_master_api_port %}
  542. {% for rule in openshift_openstack_lb_base_secgroup_rules|list %}
  543. - {{ rule|to_json }}
  544. {% endfor %}
  545. {% for rule in openshift_openstack_lb_console_secgroup_rules|list %}
  546. - {{ rule|to_json }}
  547. {% endfor %}
  548. {% else %}
  549. {{ openshift_openstack_lb_base_secgroup_rules|to_json }}
  550. {% endif %}
  551. etcd:
  552. type: OS::Heat::ResourceGroup
  553. properties:
  554. count: {{ openshift_openstack_num_etcd }}
  555. resource_def:
  556. type: server.yaml
  557. properties:
  558. name:
  559. str_replace:
  560. template: hostname-%index%domain_suffix
  561. params:
  562. hostname: {{ openshift_openstack_etcd_hostname }}
  563. domain_suffix: {{ l_hostname_domain_suffix }}
  564. cluster_env: {{ openshift_openstack_public_dns_domain }}
  565. cluster_id: {{ openshift_openstack_full_dns_domain }}
  566. group:
  567. str_replace:
  568. template: k8s_type.cluster_id
  569. params:
  570. k8s_type: etcds
  571. cluster_id: {{ openshift_openstack_full_dns_domain }}
  572. type: etcd
  573. image: {{ openshift_openstack_etcd_image }}
  574. flavor: {{ openshift_openstack_etcd_flavor }}
  575. key_name: {{ openshift_openstack_keypair_name }}
  576. {% if openshift_openstack_provider_network_name %}
  577. net: {{ openshift_openstack_provider_network_name }}
  578. net_name: {{ openshift_openstack_provider_network_name }}
  579. {% else %}
  580. {% if openshift_openstack_node_network_id|default(false) %}
  581. net: {{ openshift_openstack_node_network_id }}
  582. {% else %}
  583. net: { get_resource: net }
  584. {% endif %}
  585. {% if openshift_openstack_node_subnet_name %}
  586. subnet: {{ openshift_openstack_node_subnet_name }}
  587. {% else %}
  588. subnet: { get_resource: subnet }
  589. {% endif %}
  590. {% if openshift_use_kuryr|default(false)|bool %}
  591. pod_net: { get_resource: pod_net }
  592. pod_subnet: { get_resource: pod_subnet }
  593. {% endif %}
  594. net_name:
  595. str_replace:
  596. template: openshift-ansible-cluster_id-net
  597. params:
  598. cluster_id: {{ openshift_openstack_full_dns_domain }}
  599. {% endif %}
  600. secgrp:
  601. - { get_resource: {% if openshift_openstack_flat_secgrp|default(False)|bool %}flat-secgrp{% else %}etcd-secgrp{% endif %} }
  602. - { get_resource: common-secgrp }
  603. {% if openshift_use_kuryr|default(false)|bool %}
  604. pod_secgrp:
  605. - { get_resource: pod_access_sg }
  606. {% endif %}
  607. floating_network:
  608. if:
  609. - no_floating
  610. - ''
  611. - {{ openshift_openstack_external_network_name }}
  612. {% if openshift_openstack_provider_network_name or not openshift_openstack_etcd_floating_ip | default(False) | bool %}
  613. attach_float_net: false
  614. {% endif %}
  615. volume_size: {{ openshift_openstack_etcd_volume_size }}
  616. {% if not openshift_openstack_provider_network_name and not openshift_openstack_node_subnet_name %}
  617. depends_on:
  618. - interface
  619. {% endif %}
  620. {% if openshift_openstack_master_server_group_policies|length > 0 %}
  621. master_server_group:
  622. type: OS::Nova::ServerGroup
  623. properties:
  624. name: master_server_group
  625. policies: {{ openshift_openstack_master_server_group_policies }}
  626. {% endif %}
  627. {% if openshift_openstack_infra_server_group_policies|length > 0 %}
  628. infra_server_group:
  629. type: OS::Nova::ServerGroup
  630. properties:
  631. name: infra_server_group
  632. policies: {{ openshift_openstack_infra_server_group_policies }}
  633. {% endif %}
  634. {% if openshift_openstack_use_vm_load_balancer %}
  635. loadbalancer:
  636. type: OS::Heat::ResourceGroup
  637. properties:
  638. count: 1
  639. resource_def:
  640. type: server.yaml
  641. properties:
  642. name:
  643. str_replace:
  644. template: hostname-%index%domain_suffix
  645. params:
  646. hostname: {{ openshift_openstack_lb_hostname }}
  647. domain_suffix: {{ l_hostname_domain_suffix }}
  648. cluster_env: {{ openshift_openstack_public_dns_domain }}
  649. cluster_id: {{ openshift_openstack_full_dns_domain }}
  650. group:
  651. str_replace:
  652. template: k8s_type.cluster_id
  653. params:
  654. k8s_type: lb
  655. cluster_id: {{ openshift_openstack_full_dns_domain }}
  656. type: lb
  657. image: {{ openshift_openstack_lb_image }}
  658. flavor: {{ openshift_openstack_lb_flavor }}
  659. key_name: {{ openshift_openstack_keypair_name }}
  660. {% if openshift_openstack_provider_network_name %}
  661. net: {{ openshift_openstack_provider_network_name }}
  662. net_name: {{ openshift_openstack_provider_network_name }}
  663. {% elif openshift_openstack_node_network_id|default(false) %}
  664. net: {{ openshift_openstack_node_network_id }}
  665. {% else %}
  666. net: { get_resource: net }
  667. {% if openshift_openstack_node_subnet_name %}
  668. subnet: {{ openshift_openstack_node_subnet_name }}
  669. {% else %}
  670. subnet: { get_resource: subnet }
  671. {% endif %}
  672. {% if openshift_use_kuryr|default(false)|bool %}
  673. pod_net: { get_resource: pod_net }
  674. pod_subnet: { get_resource: pod_subnet }
  675. {% endif %}
  676. net_name:
  677. str_replace:
  678. template: openshift-ansible-cluster_id-net
  679. params:
  680. cluster_id: {{ openshift_openstack_full_dns_domain }}
  681. {% endif %}
  682. secgrp:
  683. - { get_resource: lb-secgrp }
  684. - { get_resource: common-secgrp }
  685. {% if openshift_use_kuryr|default(false)|bool %}
  686. pod_secgrp:
  687. - { get_resource: pod_access_sg }
  688. {% endif %}
  689. floating_network:
  690. if:
  691. - no_floating
  692. - ''
  693. - {{ openshift_openstack_external_network_name }}
  694. {% if openshift_openstack_provider_network_name or not openshift_openstack_load_balancer_floating_ip | default(True) | bool %}
  695. attach_float_net: false
  696. {% endif %}
  697. volume_size: {{ openshift_openstack_lb_volume_size }}
  698. {% if not openshift_openstack_provider_network_name and not openshift_openstack_node_subnet_name %}
  699. depends_on:
  700. - interface
  701. {% endif %}
  702. {% endif %}
  703. masters:
  704. type: OS::Heat::ResourceGroup
  705. properties:
  706. count: {{ openshift_openstack_num_masters }}
  707. resource_def:
  708. type: server.yaml
  709. properties:
  710. name:
  711. str_replace:
  712. template: hostname-%index%domain_suffix
  713. params:
  714. hostname: {{ openshift_openstack_master_hostname }}
  715. domain_suffix: {{ l_hostname_domain_suffix }}
  716. cluster_env: {{ openshift_openstack_public_dns_domain }}
  717. cluster_id: {{ openshift_openstack_full_dns_domain }}
  718. group:
  719. str_replace:
  720. template: k8s_type.cluster_id
  721. params:
  722. k8s_type: masters
  723. cluster_id: {{ openshift_openstack_full_dns_domain }}
  724. type: master
  725. openshift_node_group_name: {{ openshift_openstack_master_group_name }}
  726. image: {{ openshift_openstack_master_image }}
  727. flavor: {{ openshift_openstack_master_flavor }}
  728. key_name: {{ openshift_openstack_keypair_name }}
  729. {% if openshift_openstack_use_lbaas_load_balancer or openshift_use_kuryr|default(false)|bool %}
  730. api_lb_pool: { get_resource: api_lb_pool }
  731. {% endif %}
  732. {% if openshift_openstack_provider_network_name %}
  733. net: {{ openshift_openstack_provider_network_name }}
  734. net_name: {{ openshift_openstack_provider_network_name }}
  735. {% else %}
  736. {% if openshift_openstack_node_network_id|default(false) %}
  737. net: {{ openshift_openstack_node_network_id }}
  738. {% else %}
  739. net: { get_resource: net }
  740. {% endif %}
  741. {% if openshift_openstack_node_subnet_name %}
  742. subnet: {{ openshift_openstack_node_subnet_name }}
  743. {% else %}
  744. subnet: { get_resource: subnet }
  745. {% endif %}
  746. {% if openshift_use_kuryr|default(false)|bool %}
  747. pod_net: { get_resource: pod_net }
  748. pod_subnet: { get_resource: pod_subnet }
  749. {% endif %}
  750. net_name:
  751. str_replace:
  752. template: openshift-ansible-cluster_id-net
  753. params:
  754. cluster_id: {{ openshift_openstack_full_dns_domain }}
  755. {% if openshift_use_flannel|default(False)|bool %}
  756. attach_data_net: true
  757. data_net: { get_resource: data_net }
  758. data_subnet: { get_resource: data_subnet }
  759. {% endif %}
  760. {% endif %}
  761. {% if openshift_use_kuryr|default(false)|bool %}
  762. api_lb_pool: { get_resource: api_lb_pool }
  763. {% endif %}
  764. secgrp:
  765. - { get_resource: common-secgrp }
  766. {% if openshift_openstack_flat_secgrp|default(False)|bool %}
  767. - { get_resource: flat-secgrp }
  768. {% else %}
  769. - { get_resource: master-secgrp }
  770. - { get_resource: node-secgrp }
  771. {% if openshift_openstack_num_etcd|int == 0 %}
  772. - { get_resource: etcd-secgrp }
  773. {% endif %}
  774. {% if openshift_use_kuryr|default(false)|bool %}
  775. pod_secgrp:
  776. - { get_resource: pod_access_sg }
  777. {% endif %}
  778. {% endif %}
  779. floating_network:
  780. if:
  781. - no_floating
  782. - ''
  783. - {{ openshift_openstack_external_network_name }}
  784. {% if openshift_openstack_provider_network_name or not openshift_openstack_master_floating_ip | default(False) | bool %}
  785. attach_float_net: false
  786. {% endif %}
  787. volume_size: {{ openshift_openstack_master_volume_size }}
  788. {% if openshift_openstack_master_server_group_policies|length > 0 %}
  789. scheduler_hints:
  790. group: { get_resource: master_server_group }
  791. {% endif %}
  792. {% if not openshift_openstack_provider_network_name and not openshift_openstack_node_subnet_name %}
  793. depends_on:
  794. - interface
  795. {% endif %}
  796. compute_nodes:
  797. type: OS::Heat::ResourceGroup
  798. properties:
  799. count: {{ openshift_openstack_num_nodes }}
  800. removal_policies:
  801. - resource_list: {{ openshift_openstack_nodes_to_remove | to_json }}
  802. resource_def:
  803. type: server.yaml
  804. properties:
  805. name:
  806. str_replace:
  807. template: hostname-%index%domain_suffix
  808. params:
  809. hostname: {{ openshift_openstack_node_hostname }}
  810. domain_suffix: {{ l_hostname_domain_suffix }}
  811. cluster_env: {{ openshift_openstack_public_dns_domain }}
  812. cluster_id: {{ openshift_openstack_full_dns_domain }}
  813. group:
  814. str_replace:
  815. template: k8s_type.cluster_id
  816. params:
  817. k8s_type: nodes
  818. cluster_id: {{ openshift_openstack_full_dns_domain }}
  819. type: node
  820. subtype: app
  821. openshift_node_group_name: {{ openshift_openstack_compute_group_name }}
  822. image: {{ openshift_openstack_node_image }}
  823. flavor: {{ openshift_openstack_node_flavor }}
  824. key_name: {{ openshift_openstack_keypair_name }}
  825. {% if openshift_openstack_provider_network_name %}
  826. net: {{ openshift_openstack_provider_network_name }}
  827. net_name: {{ openshift_openstack_provider_network_name }}
  828. {% else %}
  829. {% if openshift_openstack_node_network_id|default(false) %}
  830. net: {{ openshift_openstack_node_network_id }}
  831. {% else %}
  832. net: { get_resource: net }
  833. {% endif %}
  834. {% if openshift_openstack_node_subnet_name %}
  835. subnet: {{ openshift_openstack_node_subnet_name }}
  836. {% else %}
  837. subnet: { get_resource: subnet }
  838. {% endif %}
  839. {% if openshift_use_kuryr|default(false)|bool %}
  840. pod_net: { get_resource: pod_net }
  841. pod_subnet: { get_resource: pod_subnet }
  842. {% endif %}
  843. net_name:
  844. str_replace:
  845. template: openshift-ansible-cluster_id-net
  846. params:
  847. cluster_id: {{ openshift_openstack_full_dns_domain }}
  848. {% if openshift_use_flannel|default(False)|bool %}
  849. attach_data_net: true
  850. data_net: { get_resource: data_net }
  851. data_subnet: { get_resource: data_subnet }
  852. {% endif %}
  853. {% endif %}
  854. secgrp:
  855. - { get_resource: {% if openshift_openstack_flat_secgrp|default(False)|bool %}flat-secgrp{% else %}node-secgrp{% endif %} }
  856. - { get_resource: common-secgrp }
  857. {% if openshift_use_kuryr|default(false)|bool %}
  858. pod_secgrp:
  859. - { get_resource: pod_access_sg }
  860. {% endif %}
  861. floating_network:
  862. if:
  863. - no_floating
  864. - ''
  865. - {{ openshift_openstack_external_network_name }}
  866. {% if openshift_openstack_provider_network_name or not openshift_openstack_compute_floating_ip | default(False) | bool %}
  867. attach_float_net: false
  868. {% endif %}
  869. volume_size: {{ openshift_openstack_node_volume_size }}
  870. {% if not openshift_openstack_provider_network_name and not openshift_openstack_node_subnet_name %}
  871. depends_on:
  872. - interface
  873. {% endif %}
  874. infra_nodes:
  875. type: OS::Heat::ResourceGroup
  876. properties:
  877. count: {{ openshift_openstack_num_infra }}
  878. resource_def:
  879. type: server.yaml
  880. properties:
  881. name:
  882. str_replace:
  883. template: hostname-%index%domain_suffix
  884. params:
  885. hostname: {{ openshift_openstack_infra_hostname }}
  886. domain_suffix: {{ l_hostname_domain_suffix }}
  887. cluster_env: {{ openshift_openstack_public_dns_domain }}
  888. cluster_id: {{ openshift_openstack_full_dns_domain }}
  889. group:
  890. str_replace:
  891. template: k8s_type.cluster_id
  892. params:
  893. k8s_type: infra
  894. cluster_id: {{ openshift_openstack_full_dns_domain }}
  895. type: node
  896. subtype: infra
  897. openshift_node_group_name: {{ openshift_openstack_infra_group_name }}
  898. image: {{ openshift_openstack_infra_image }}
  899. flavor: {{ openshift_openstack_infra_flavor }}
  900. key_name: {{ openshift_openstack_keypair_name }}
  901. {% if openshift_openstack_use_lbaas_load_balancer %}
  902. router_lb_pool_http: { get_resource: router_lb_pool_http }
  903. router_lb_pool_https: { get_resource: router_lb_pool_https }
  904. {% endif %}
  905. {% if openshift_openstack_provider_network_name %}
  906. net: {{ openshift_openstack_provider_network_name }}
  907. net_name: {{ openshift_openstack_provider_network_name }}
  908. {% else %}
  909. {% if openshift_openstack_node_network_id|default(false) %}
  910. net: {{ openshift_openstack_node_network_id }}
  911. {% else %}
  912. net: { get_resource: net }
  913. {% endif %}
  914. {% if openshift_openstack_node_subnet_name %}
  915. subnet: {{ openshift_openstack_node_subnet_name }}
  916. {% else %}
  917. subnet: { get_resource: subnet }
  918. {% endif %}
  919. {% if openshift_use_kuryr|default(false)|bool %}
  920. pod_net: { get_resource: pod_net }
  921. pod_subnet: { get_resource: pod_subnet }
  922. {% endif %}
  923. net_name:
  924. str_replace:
  925. template: openshift-ansible-cluster_id-net
  926. params:
  927. cluster_id: {{ openshift_openstack_full_dns_domain }}
  928. {% if openshift_use_flannel|default(False)|bool %}
  929. attach_data_net: true
  930. data_net: { get_resource: data_net }
  931. data_subnet: { get_resource: data_subnet }
  932. {% endif %}
  933. {% endif %}
  934. secgrp:
  935. # TODO(bogdando) filter only required node rules into infra-secgrp
  936. - { get_resource: common-secgrp }
  937. {% if openshift_openstack_flat_secgrp|default(False)|bool %}
  938. - { get_resource: flat-secgrp }
  939. {% else %}
  940. - { get_resource: node-secgrp }
  941. - { get_resource: infra-secgrp }
  942. {% if openshift_use_kuryr|default(false)|bool %}
  943. pod_secgrp:
  944. - { get_resource: pod_access_sg }
  945. {% endif %}
  946. {% endif %}
  947. floating_network:
  948. if:
  949. - no_floating
  950. - ''
  951. - {{ openshift_openstack_external_network_name }}
  952. {% if openshift_openstack_provider_network_name or not openshift_openstack_infra_floating_ip | default(True) | bool %}
  953. attach_float_net: false
  954. {% endif %}
  955. volume_size: {{ openshift_openstack_infra_volume_size }}
  956. {% if openshift_openstack_infra_server_group_policies|length > 0 %}
  957. scheduler_hints:
  958. group: { get_resource: infra_server_group }
  959. {% endif %}
  960. {% if not openshift_openstack_provider_network_name and not openshift_openstack_node_subnet_name %}
  961. depends_on:
  962. - interface
  963. {% endif %}
  964. cns:
  965. type: OS::Heat::ResourceGroup
  966. properties:
  967. count: {{ openshift_openstack_num_cns }}
  968. resource_def:
  969. type: server.yaml
  970. properties:
  971. name:
  972. str_replace:
  973. template: hostname-%index%domain_suffix
  974. params:
  975. hostname: {{ openshift_openstack_cns_hostname }}
  976. domain_suffix: {{ l_hostname_domain_suffix }}
  977. cluster_env: {{ openshift_openstack_public_dns_domain }}
  978. cluster_id: {{ openshift_openstack_full_dns_domain }}
  979. group:
  980. str_replace:
  981. template: k8s_type.cluster_id
  982. params:
  983. k8s_type: cns
  984. cluster_id: {{ openshift_openstack_full_dns_domain }}
  985. type: cns
  986. openshift_node_group_name: node-config-compute
  987. image: {{ openshift_openstack_cns_image }}
  988. flavor: {{ openshift_openstack_cns_flavor }}
  989. key_name: {{ openshift_openstack_keypair_name }}
  990. {% if openshift_openstack_provider_network_name %}
  991. net: {{ openshift_openstack_provider_network_name }}
  992. net_name: {{ openshift_openstack_provider_network_name }}
  993. {% else %}
  994. {% if openshift_openstack_node_network_id|default(false) %}
  995. net: {{ openshift_openstack_node_network_id }}
  996. {% else %}
  997. net: { get_resource: net }
  998. {% endif %}
  999. {% if openshift_openstack_node_subnet_name %}
  1000. subnet: {{ openshift_openstack_node_subnet_name }}
  1001. {% else %}
  1002. subnet: { get_resource: subnet }
  1003. {% endif %}
  1004. {% if openshift_use_kuryr|default(false)|bool %}
  1005. pod_net: { get_resource: pod_net }
  1006. pod_subnet: { get_resource: pod_subnet }
  1007. {% endif %}
  1008. net_name:
  1009. str_replace:
  1010. template: openshift-ansible-cluster_id-net
  1011. params:
  1012. cluster_id: {{ openshift_openstack_full_dns_domain }}
  1013. {% if openshift_use_flannel|default(False)|bool %}
  1014. attach_data_net: true
  1015. data_net: { get_resource: data_net }
  1016. data_subnet: { get_resource: data_subnet }
  1017. {% endif %}
  1018. {% endif %}
  1019. secgrp:
  1020. - { get_resource: common-secgrp }
  1021. {% if openshift_openstack_flat_secgrp|default(False)|bool %}
  1022. - { get_resource: flat-secgrp }
  1023. {% else %}
  1024. - { get_resource: node-secgrp }
  1025. {% if openshift_openstack_num_cns > 0 %}
  1026. - { get_resource: cns-secgrp }
  1027. {% endif %}
  1028. {% if openshift_use_kuryr|default(false)|bool %}
  1029. pod_secgrp:
  1030. - { get_resource: pod_access_sg }
  1031. {% endif %}
  1032. {% endif %}
  1033. {% if not openshift_openstack_provider_network_name %}
  1034. floating_network: {{ openshift_openstack_external_network_name }}
  1035. {% endif %}
  1036. volume_size: {{ openshift_openstack_cns_volume_size }}
  1037. {% if not openshift_openstack_provider_network_name and not openshift_openstack_node_subnet_name %}
  1038. depends_on:
  1039. - interface
  1040. {% endif %}
  1041. {% if openshift_openstack_use_lbaas_load_balancer %}
  1042. {% if openshift_openstack_load_balancer_floating_ip | default(True) | bool %}
  1043. api_lb_floating_ip:
  1044. condition: { not: no_floating }
  1045. depends_on:
  1046. - api_lb
  1047. - api_lb_listener
  1048. - api_lb_pool
  1049. type: OS::Neutron::FloatingIP
  1050. properties:
  1051. floating_network: {{ openshift_openstack_external_network_name }}
  1052. port_id: { get_attr: [api_lb, vip_port_id] }
  1053. {% endif %}
  1054. router_lb:
  1055. type: OS::{{ openshift_openstack_lbaasv2_provider }}::LoadBalancer
  1056. properties:
  1057. {% if openshift_openstack_node_subnet_name %}
  1058. vip_subnet: {{ openshift_openstack_node_subnet_name }}
  1059. {% else %}
  1060. vip_subnet: { get_resource: subnet }
  1061. {% endif %}
  1062. {% if openshift_openstack_load_balancer_floating_ip | default(True) | bool %}
  1063. router_lb_floating_ip:
  1064. condition: { not: no_floating }
  1065. depends_on:
  1066. - router_lb
  1067. - router_lb_listener_http
  1068. - router_lb_pool_http
  1069. - router_lb_listener_https
  1070. - router_lb_pool_https
  1071. type: OS::Neutron::FloatingIP
  1072. properties:
  1073. floating_network: {{ openshift_openstack_external_network_name }}
  1074. port_id: { get_attr: [router_lb, vip_port_id] }
  1075. {% endif %}
  1076. router_lb_listener_http:
  1077. type: OS::{{ openshift_openstack_lbaasv2_provider }}::Listener
  1078. properties:
  1079. protocol: HTTP
  1080. protocol_port: 80
  1081. loadbalancer: { get_resource: router_lb }
  1082. router_lb_pool_http:
  1083. type: OS::{{ openshift_openstack_lbaasv2_provider }}::Pool
  1084. properties:
  1085. # TODO(shadower): Make this configurable?
  1086. lb_algorithm: ROUND_ROBIN
  1087. protocol: HTTP
  1088. listener: { get_resource: router_lb_listener_http }
  1089. router_lb_listener_https:
  1090. type: OS::{{ openshift_openstack_lbaasv2_provider }}::Listener
  1091. properties:
  1092. protocol: HTTPS
  1093. protocol_port: 443
  1094. loadbalancer: { get_resource: router_lb }
  1095. router_lb_pool_https:
  1096. type: OS::{{ openshift_openstack_lbaasv2_provider }}::Pool
  1097. properties:
  1098. # TODO(shadower): Make this configurable?
  1099. lb_algorithm: ROUND_ROBIN
  1100. protocol: HTTPS
  1101. listener: { get_resource: router_lb_listener_https }
  1102. {% endif %}