차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 다음 판 | 이전 판 | ||
| redhat_openstack_16.2_installation [2022/02/17 13:38] – 만듦 koov | redhat_openstack_16.2_installation [2022/02/18 06:26] (현재) – koov | ||
|---|---|---|---|
| 줄 2: | 줄 2: | ||
| + | ===== 절차 ===== | ||
| + | 오픈스택 구성 절차는 아래와 같이 진행한다. | ||
| + | - undercloud(director) 구성 | ||
| + | - roles 구성 | ||
| + | - network 구성 | ||
| + | - template rendering | ||
| + | - node 정의 | ||
| + | |||
| + | ====== Undercloud(Director) 구성 ====== | ||
| + | ==== containers-prepare-parameter.yaml ==== | ||
| + | |||
| + | <WRAP prewrap> | ||
| + | <code yaml> | ||
| + | # Generated with the following on 2022-02-07T15: | ||
| + | # | ||
| + | # | ||
| + | # | ||
| + | |||
| + | parameter_defaults: | ||
| + | ContainerImagePrepare: | ||
| + | - push_destination: | ||
| + | set: | ||
| + | ceph_alertmanager_image: | ||
| + | ceph_alertmanager_namespace: | ||
| + | ceph_alertmanager_tag: | ||
| + | ceph_grafana_image: | ||
| + | ceph_grafana_namespace: | ||
| + | ceph_grafana_tag: | ||
| + | ceph_image: rhceph-4-rhel8 | ||
| + | ceph_namespace: | ||
| + | ceph_node_exporter_image: | ||
| + | ceph_node_exporter_namespace: | ||
| + | ceph_node_exporter_tag: | ||
| + | ceph_prometheus_image: | ||
| + | ceph_prometheus_namespace: | ||
| + | ceph_prometheus_tag: | ||
| + | ceph_tag: latest | ||
| + | name_prefix: | ||
| + | name_suffix: | ||
| + | namespace: registry.redhat.io/ | ||
| + | neutron_driver: | ||
| + | rhel_containers: | ||
| + | tag: ' | ||
| + | tag_from_label: | ||
| + | ContainerImageRegistryCredentials: | ||
| + | registry.redhat.io: | ||
| + | userid@domain.co.kr: | ||
| + | ContainerImageRegistryLogin: | ||
| + | |||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ==== undercloud.conf ==== | ||
| + | |||
| + | <WRAP prewrap> | ||
| + | <code properties> | ||
| + | [DEFAULT] | ||
| + | # 배포/ | ||
| + | clean_nodes = true | ||
| + | # 배포 후 임시파일 정리 여부(디버깅에 필요한경우 false) | ||
| + | #cleanup = true | ||
| + | # 컨테이너 이미지 환경설정 | ||
| + | container_images_file = / | ||
| + | # 비보안 컨테이너 레지스트리 목록 | ||
| + | # | ||
| + | # telemetry 서비스 사용 여부 | ||
| + | enable_telemetry = false | ||
| + | local_interface = enp2s0 | ||
| + | local_ip = 192.168.10.1/ | ||
| + | #local_mtu = 1500 | ||
| + | local_subnet = ctlplane-subnet | ||
| + | # 오버클라우드 배포용 DNS 도메인명. 오버클라우드 배포시 CloudDomain 매개변수를 동일하게 맞춰야함 | ||
| + | # | ||
| + | |||
| + | subnets = ctlplane-subnet | ||
| + | undercloud_admin_host = 192.168.10.3 | ||
| + | undercloud_hostname = director.osp.kepri | ||
| + | undercloud_public_host = 192.168.10.2 | ||
| + | undercloud_ntp_servers = 192.168.10.250 | ||
| + | undercloud_timezone = ' | ||
| + | |||
| + | [ctlplane-subnet] | ||
| + | cidr = 192.168.10.0/ | ||
| + | dhcp_end = 192.168.10.249 | ||
| + | dhcp_start = 192.168.10.230 | ||
| + | gateway = 192.168.10.1 | ||
| + | inspection_iprange = 192.168.10.210, | ||
| + | masquerade = true | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ====== Overcloud 구성 ====== | ||
| + | '' | ||
| + | ===== roles 구성 ===== | ||
| + | <WRAP prewrap> | ||
| + | <code bash> | ||
| + | # 제공되는 roles 확인 | ||
| + | $ openstack overcloud roles list | ||
| + | |||
| + | # 필요한 role 기반으로 roles_data.yaml 생성 | ||
| + | $ openstack overcloud roles generate \ | ||
| + | --roles-path / | ||
| + | -o / | ||
| + | Controller Compute ComputeAlt BlockStorage ObjectStorage CephStorage | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== network 구성 ===== | ||
| + | 네트워크 아키텍처에 기반한 네트워크 대역 및 VLAN설정 | ||
| + | |||
| + | <WRAP prewrap> | ||
| + | <code yaml> | ||
| + | - name: Storage | ||
| + | vip: true | ||
| + | vlan: 30 | ||
| + | name_lower: storage | ||
| + | ip_subnet: ' | ||
| + | allocation_pools: | ||
| + | mtu: 1500 | ||
| + | - name: StorageMgmt | ||
| + | name_lower: storage_mgmt | ||
| + | vip: true | ||
| + | vlan: 40 | ||
| + | ip_subnet: ' | ||
| + | allocation_pools: | ||
| + | mtu: 1500 | ||
| + | - name: InternalApi | ||
| + | name_lower: internal_api | ||
| + | vip: true | ||
| + | vlan: 20 | ||
| + | ip_subnet: ' | ||
| + | allocation_pools: | ||
| + | mtu: 1500 | ||
| + | - name: Tenant | ||
| + | vip: false # Tenant network does not use VIPs | ||
| + | name_lower: tenant | ||
| + | vlan: 50 | ||
| + | ip_subnet: ' | ||
| + | allocation_pools: | ||
| + | mtu: 1500 | ||
| + | - name: External | ||
| + | vip: true | ||
| + | name_lower: external | ||
| + | ip_subnet: ' | ||
| + | allocation_pools: | ||
| + | gateway_ip: ' | ||
| + | mtu: 1500 | ||
| + | </ | ||
| + | </ | ||
| + | ===== template rendering ===== | ||
| + | 위에서 생성된 '' | ||
| + | |||
| + | <WRAP prewrap> | ||
| + | <code bash> | ||
| + | #!/bin/bash | ||
| + | cd / | ||
| + | ./ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== node 정의 ===== | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | 참조 : https:// | ||
| + | |||
| + | ==== nodes.yaml ==== | ||
| + | <WRAP prewrap> | ||
| + | <code yaml> | ||
| + | nodes: | ||
| + | - mac: | ||
| + | - " | ||
| + | name: " | ||
| + | pm_type: " | ||
| + | pm_user: " | ||
| + | pm_password: | ||
| + | pm_addr: " | ||
| + | pm_port: " | ||
| + | capabilities: | ||
| + | - mac: | ||
| + | - " | ||
| + | name: " | ||
| + | pm_type: " | ||
| + | pm_user: " | ||
| + | pm_password: | ||
| + | pm_addr: " | ||
| + | pm_port: " | ||
| + | capabilities: | ||
| + | - mac: | ||
| + | - " | ||
| + | name: " | ||
| + | pm_type: " | ||
| + | pm_user: " | ||
| + | pm_password: | ||
| + | pm_addr: " | ||
| + | pm_port: " | ||
| + | capabilities: | ||
| + | - mac: | ||
| + | - " | ||
| + | name: " | ||
| + | pm_type: " | ||
| + | pm_user: " | ||
| + | pm_password: | ||
| + | pm_addr: " | ||
| + | pm_port: " | ||
| + | capabilities: | ||
| + | - mac: | ||
| + | - " | ||
| + | name: " | ||
| + | pm_type: " | ||
| + | pm_user: " | ||
| + | pm_password: | ||
| + | pm_addr: " | ||
| + | pm_port: " | ||
| + | capabilities: | ||
| + | - mac: | ||
| + | - " | ||
| + | name: " | ||
| + | pm_type: " | ||
| + | pm_user: " | ||
| + | pm_password: | ||
| + | pm_addr: " | ||
| + | pm_port: " | ||
| + | capabilities: | ||
| + | - mac: | ||
| + | - " | ||
| + | name: " | ||
| + | pm_type: " | ||
| + | pm_user: " | ||
| + | pm_password: | ||
| + | pm_addr: " | ||
| + | pm_port: " | ||
| + | capabilities: | ||
| + | - mac: | ||
| + | - " | ||
| + | name: " | ||
| + | pm_type: " | ||
| + | pm_user: " | ||
| + | pm_password: | ||
| + | pm_addr: " | ||
| + | pm_port: " | ||
| + | capabilities: | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== template ===== | ||
| + | 렌더링 된 템플릿 구성중 네트워크 아키텍처에 맞춰서 아래 파일들을 설정한다. | ||
| + | |||
| + | ==== network-environment.yaml ==== | ||
| + | <WRAP prewrap> | ||
| + | <code yaml> | ||
| + | resource_registry: | ||
| + | OS:: | ||
| + | ../ | ||
| + | OS:: | ||
| + | ../ | ||
| + | parameter_defaults: | ||
| + | StorageNetCidr: | ||
| + | StorageAllocationPools: | ||
| + | StorageNetworkVlanID: | ||
| + | StorageMgmtNetCidr: | ||
| + | StorageMgmtAllocationPools: | ||
| + | StorageMgmtNetworkVlanID: | ||
| + | InternalApiNetCidr: | ||
| + | InternalApiAllocationPools: | ||
| + | InternalApiNetworkVlanID: | ||
| + | TenantNetCidr: | ||
| + | TenantAllocationPools: | ||
| + | TenantNetworkVlanID: | ||
| + | TenantNetPhysnetMtu: | ||
| + | ExternalNetCidr: | ||
| + | ExternalAllocationPools: | ||
| + | ExternalInterfaceDefaultRoute: | ||
| + | DnsServers: [' | ||
| + | NeutronNetworkType: | ||
| + | NeutronNetworkVLANRanges: | ||
| + | BondInterfaceOvsOptions: | ||
| + | NeutronEnableDVR: | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== NIC Config ===== | ||
| + | |||
| + | ==== controller.yaml ==== | ||
| + | |||
| + | <WRAP prewrap> | ||
| + | <code yml> | ||
| + | heat_template_version: | ||
| + | description: | ||
| + | Software Config to drive os-net-config to configure multiple interfaces for the Controller role. | ||
| + | parameters: | ||
| + | ControlPlaneIp: | ||
| + | default: '' | ||
| + | description: | ||
| + | type: string | ||
| + | ControlPlaneSubnetCidr: | ||
| + | default: '' | ||
| + | description: | ||
| + | The subnet CIDR of the control plane network. (The parameter is | ||
| + | automatically resolved from the ctlplane subnet' | ||
| + | type: string | ||
| + | ControlPlaneDefaultRoute: | ||
| + | default: '' | ||
| + | description: | ||
| + | is automatically resolved from the ctlplane subnet' | ||
| + | type: string | ||
| + | ControlPlaneStaticRoutes: | ||
| + | default: [] | ||
| + | description: | ||
| + | Routes for the ctlplane network traffic. | ||
| + | JSON route e.g. [{' | ||
| + | Unless the default is changed, the parameter is automatically resolved | ||
| + | from the subnet host_routes attribute. | ||
| + | type: json | ||
| + | ControlPlaneMtu: | ||
| + | default: 1500 | ||
| + | description: | ||
| + | guaranteed to pass through the data path of the segments in the network. | ||
| + | (The parameter is automatically resolved from the ctlplane network' | ||
| + | type: number | ||
| + | |||
| + | StorageIpSubnet: | ||
| + | default: '' | ||
| + | description: | ||
| + | type: string | ||
| + | StorageNetworkVlanID: | ||
| + | default: 30 | ||
| + | description: | ||
| + | type: number | ||
| + | StorageMtu: | ||
| + | default: 1500 | ||
| + | description: | ||
| + | guaranteed to pass through the data path of the segments in the | ||
| + | Storage network. | ||
| + | type: number | ||
| + | StorageInterfaceRoutes: | ||
| + | default: [] | ||
| + | description: | ||
| + | Routes for the storage network traffic. | ||
| + | JSON route e.g. [{' | ||
| + | Unless the default is changed, the parameter is automatically resolved | ||
| + | from the subnet host_routes attribute. | ||
| + | type: json | ||
| + | StorageMgmtIpSubnet: | ||
| + | default: '' | ||
| + | description: | ||
| + | type: string | ||
| + | StorageMgmtNetworkVlanID: | ||
| + | default: 40 | ||
| + | description: | ||
| + | type: number | ||
| + | StorageMgmtMtu: | ||
| + | default: 1500 | ||
| + | description: | ||
| + | guaranteed to pass through the data path of the segments in the | ||
| + | StorageMgmt network. | ||
| + | type: number | ||
| + | StorageMgmtInterfaceRoutes: | ||
| + | default: [] | ||
| + | description: | ||
| + | Routes for the storage_mgmt network traffic. | ||
| + | JSON route e.g. [{' | ||
| + | Unless the default is changed, the parameter is automatically resolved | ||
| + | from the subnet host_routes attribute. | ||
| + | type: json | ||
| + | InternalApiIpSubnet: | ||
| + | default: '' | ||
| + | description: | ||
| + | type: string | ||
| + | InternalApiNetworkVlanID: | ||
| + | default: 20 | ||
| + | description: | ||
| + | type: number | ||
| + | InternalApiMtu: | ||
| + | default: 1500 | ||
| + | description: | ||
| + | guaranteed to pass through the data path of the segments in the | ||
| + | InternalApi network. | ||
| + | type: number | ||
| + | InternalApiInterfaceRoutes: | ||
| + | default: [] | ||
| + | description: | ||
| + | Routes for the internal_api network traffic. | ||
| + | JSON route e.g. [{' | ||
| + | Unless the default is changed, the parameter is automatically resolved | ||
| + | from the subnet host_routes attribute. | ||
| + | type: json | ||
| + | TenantIpSubnet: | ||
| + | default: '' | ||
| + | description: | ||
| + | type: string | ||
| + | TenantNetworkVlanID: | ||
| + | default: 50 | ||
| + | description: | ||
| + | type: number | ||
| + | TenantMtu: | ||
| + | default: 1500 | ||
| + | description: | ||
| + | guaranteed to pass through the data path of the segments in the | ||
| + | Tenant network. | ||
| + | type: number | ||
| + | TenantInterfaceRoutes: | ||
| + | default: [] | ||
| + | description: | ||
| + | Routes for the tenant network traffic. | ||
| + | JSON route e.g. [{' | ||
| + | Unless the default is changed, the parameter is automatically resolved | ||
| + | from the subnet host_routes attribute. | ||
| + | type: json | ||
| + | ExternalIpSubnet: | ||
| + | default: '' | ||
| + | description: | ||
| + | type: string | ||
| + | ExternalNetworkVlanID: | ||
| + | default: 10 | ||
| + | description: | ||
| + | type: number | ||
| + | ExternalMtu: | ||
| + | default: 1500 | ||
| + | description: | ||
| + | guaranteed to pass through the data path of the segments in the | ||
| + | External network. | ||
| + | type: number | ||
| + | ExternalInterfaceDefaultRoute: | ||
| + | default: '' | ||
| + | description: | ||
| + | type: string | ||
| + | ExternalInterfaceRoutes: | ||
| + | default: [] | ||
| + | description: | ||
| + | Routes for the external network traffic. | ||
| + | JSON route e.g. [{' | ||
| + | Unless the default is changed, the parameter is automatically resolved | ||
| + | from the subnet host_routes attribute. | ||
| + | type: json | ||
| + | |||
| + | DnsServers: # Override this via parameter_defaults | ||
| + | default: [] | ||
| + | description: | ||
| + | DNS servers to use for the Overcloud (2 max for some implementations). | ||
| + | If not set the nameservers configured in the ctlplane subnet' | ||
| + | dns_nameservers attribute will be used. | ||
| + | type: comma_delimited_list | ||
| + | DnsSearchDomains: | ||
| + | default: [] | ||
| + | description: | ||
| + | type: comma_delimited_list | ||
| + | ######################################################################### | ||
| + | resources: | ||
| + | |||
| + | MinViableMtu: | ||
| + | # This resource resolves the minimum viable MTU for interfaces, bonds and | ||
| + | # bridges that carry multiple VLANs. Each VLAN may have different MTU. The | ||
| + | # bridge, bond or interface must have an MTU to allow the VLAN with the | ||
| + | # largest MTU. | ||
| + | type: OS:: | ||
| + | properties: | ||
| + | type: number | ||
| + | value: | ||
| + | yaql: | ||
| + | expression: $.data.max() | ||
| + | data: | ||
| + | - {get_param: ControlPlaneMtu} | ||
| + | - {get_param: StorageMtu} | ||
| + | - {get_param: InternalApiMtu} | ||
| + | - {get_param: TenantMtu} | ||
| + | |||
| + | OsNetConfigImpl: | ||
| + | type: OS:: | ||
| + | properties: | ||
| + | group: script | ||
| + | config: | ||
| + | str_replace: | ||
| + | template: | ||
| + | get_file: ../ | ||
| + | params: | ||
| + | $network_config: | ||
| + | network_config: | ||
| + | |||
| + | ############## | ||
| + | - type: interface | ||
| + | name: nic1 | ||
| + | mtu: | ||
| + | get_param: ControlPlaneMtu | ||
| + | use_dhcp: false | ||
| + | dns_servers: | ||
| + | get_param: DnsServers | ||
| + | domain: | ||
| + | get_param: DnsSearchDomains | ||
| + | addresses: | ||
| + | - ip_netmask: | ||
| + | list_join: | ||
| + | - / | ||
| + | - - get_param: ControlPlaneIp | ||
| + | - get_param: ControlPlaneSubnetCidr | ||
| + | routes: | ||
| + | list_concat_unique: | ||
| + | - get_param: ControlPlaneStaticRoutes | ||
| + | |||
| + | |||
| + | ############## | ||
| + | - type: ovs_bridge | ||
| + | name: br-local | ||
| + | dns_server: | ||
| + | get_param: DnsServers | ||
| + | use_dhcp: false | ||
| + | |||
| + | members: | ||
| + | ################ | ||
| + | - type: interface | ||
| + | name: nic2 | ||
| + | mtu: | ||
| + | get_attr: [MinViableMtu, | ||
| + | # force the MAC address of the bridge to this interface | ||
| + | primary: true | ||
| + | ################ | ||
| + | - type: vlan | ||
| + | mtu: | ||
| + | get_param: StorageMtu | ||
| + | vlan_id: | ||
| + | get_param: StorageNetworkVlanID | ||
| + | addresses: | ||
| + | - ip_netmask: | ||
| + | get_param: StorageIpSubnet | ||
| + | routes: | ||
| + | list_concat_unique: | ||
| + | - get_param: StorageInterfaceRoutes | ||
| + | ################ | ||
| + | - type: vlan | ||
| + | mtu: | ||
| + | get_param: StorageMgmtMtu | ||
| + | vlan_id: | ||
| + | get_param: StorageMgmtNetworkVlanID | ||
| + | addresses: | ||
| + | - ip_netmask: | ||
| + | get_param: StorageMgmtIpSubnet | ||
| + | routes: | ||
| + | list_concat_unique: | ||
| + | - get_param: StorageMgmtInterfaceRoutes | ||
| + | ################ | ||
| + | - type: vlan | ||
| + | mtu: | ||
| + | get_param: InternalApiMtu | ||
| + | vlan_id: | ||
| + | get_param: InternalApiNetworkVlanID | ||
| + | addresses: | ||
| + | - ip_netmask: | ||
| + | get_param: InternalApiIpSubnet | ||
| + | routes: | ||
| + | list_concat_unique: | ||
| + | - get_param: InternalApiInterfaceRoutes | ||
| + | ################ | ||
| + | - type: vlan | ||
| + | mtu: | ||
| + | get_param: TenantMtu | ||
| + | vlan_id: | ||
| + | get_param: TenantNetworkVlanID | ||
| + | addresses: | ||
| + | - ip_netmask: | ||
| + | get_param: TenantIpSubnet | ||
| + | routes: | ||
| + | list_concat_unique: | ||
| + | - get_param: TenantInterfaceRoutes | ||
| + | |||
| + | ############## | ||
| + | - type: ovs_bridge | ||
| + | name: bridge_name | ||
| + | mtu: | ||
| + | get_param: ExternalMtu | ||
| + | dns_servers: | ||
| + | get_param: DnsServers | ||
| + | use_dhcp: false | ||
| + | addresses: | ||
| + | - ip_netmask: | ||
| + | get_param: ExternalIpSubnet | ||
| + | routes: | ||
| + | list_concat_unique: | ||
| + | - get_param: ExternalInterfaceRoutes | ||
| + | - - default: true | ||
| + | next_hop: | ||
| + | get_param: ExternalInterfaceDefaultRoute | ||
| + | members: | ||
| + | - type: interface | ||
| + | name: nic3 | ||
| + | mtu: | ||
| + | get_param: ExternalMtu | ||
| + | use_dhcp: false | ||
| + | primary: true | ||
| + | |||
| + | ######################################################################### | ||
| + | outputs: | ||
| + | OS:: | ||
| + | description: | ||
| + | value: | ||
| + | get_resource: | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ==== compute.yaml ==== | ||
| + | |||
| + | <WRAP prewrap> | ||
| + | <code yaml> | ||
| + | heat_template_version: | ||
| + | description: | ||
| + | Software Config to drive os-net-config to configure multiple interfaces for the Compute role. | ||
| + | parameters: | ||
| + | ControlPlaneIp: | ||
| + | default: '' | ||
| + | description: | ||
| + | type: string | ||
| + | ControlPlaneSubnetCidr: | ||
| + | default: '' | ||
| + | description: | ||
| + | The subnet CIDR of the control plane network. (The parameter is | ||
| + | automatically resolved from the ctlplane subnet' | ||
| + | type: string | ||
| + | ControlPlaneDefaultRoute: | ||
| + | default: '' | ||
| + | description: | ||
| + | is automatically resolved from the ctlplane subnet' | ||
| + | type: string | ||
| + | ControlPlaneStaticRoutes: | ||
| + | default: [] | ||
| + | description: | ||
| + | Routes for the ctlplane network traffic. | ||
| + | JSON route e.g. [{' | ||
| + | Unless the default is changed, the parameter is automatically resolved | ||
| + | from the subnet host_routes attribute. | ||
| + | type: json | ||
| + | ControlPlaneMtu: | ||
| + | default: 1500 | ||
| + | description: | ||
| + | guaranteed to pass through the data path of the segments in the network. | ||
| + | (The parameter is automatically resolved from the ctlplane network' | ||
| + | type: number | ||
| + | |||
| + | StorageIpSubnet: | ||
| + | default: '' | ||
| + | description: | ||
| + | type: string | ||
| + | StorageNetworkVlanID: | ||
| + | default: 30 | ||
| + | description: | ||
| + | type: number | ||
| + | StorageMtu: | ||
| + | default: 1500 | ||
| + | description: | ||
| + | guaranteed to pass through the data path of the segments in the | ||
| + | Storage network. | ||
| + | type: number | ||
| + | StorageInterfaceRoutes: | ||
| + | default: [] | ||
| + | description: | ||
| + | Routes for the storage network traffic. | ||
| + | JSON route e.g. [{' | ||
| + | Unless the default is changed, the parameter is automatically resolved | ||
| + | from the subnet host_routes attribute. | ||
| + | type: json | ||
| + | InternalApiIpSubnet: | ||
| + | default: '' | ||
| + | description: | ||
| + | type: string | ||
| + | InternalApiNetworkVlanID: | ||
| + | default: 20 | ||
| + | description: | ||
| + | type: number | ||
| + | InternalApiMtu: | ||
| + | default: 1500 | ||
| + | description: | ||
| + | guaranteed to pass through the data path of the segments in the | ||
| + | InternalApi network. | ||
| + | type: number | ||
| + | InternalApiInterfaceRoutes: | ||
| + | default: [] | ||
| + | description: | ||
| + | Routes for the internal_api network traffic. | ||
| + | JSON route e.g. [{' | ||
| + | Unless the default is changed, the parameter is automatically resolved | ||
| + | from the subnet host_routes attribute. | ||
| + | type: json | ||
| + | TenantIpSubnet: | ||
| + | default: '' | ||
| + | description: | ||
| + | type: string | ||
| + | TenantNetworkVlanID: | ||
| + | default: 50 | ||
| + | description: | ||
| + | type: number | ||
| + | TenantMtu: | ||
| + | default: 1500 | ||
| + | description: | ||
| + | guaranteed to pass through the data path of the segments in the | ||
| + | Tenant network. | ||
| + | type: number | ||
| + | TenantInterfaceRoutes: | ||
| + | default: [] | ||
| + | description: | ||
| + | Routes for the tenant network traffic. | ||
| + | JSON route e.g. [{' | ||
| + | Unless the default is changed, the parameter is automatically resolved | ||
| + | from the subnet host_routes attribute. | ||
| + | type: json | ||
| + | |||
| + | ExternalMtu: | ||
| + | default: 1500 | ||
| + | description: | ||
| + | guaranteed to pass through the data path of the segments in the | ||
| + | External network. | ||
| + | type: number | ||
| + | |||
| + | DnsServers: # Override this via parameter_defaults | ||
| + | default: [] | ||
| + | description: | ||
| + | DNS servers to use for the Overcloud (2 max for some implementations). | ||
| + | If not set the nameservers configured in the ctlplane subnet' | ||
| + | dns_nameservers attribute will be used. | ||
| + | type: comma_delimited_list | ||
| + | DnsSearchDomains: | ||
| + | default: [] | ||
| + | description: | ||
| + | type: comma_delimited_list | ||
| + | |||
| + | ######################################################################### | ||
| + | resources: | ||
| + | |||
| + | MinViableMtu: | ||
| + | # This resource resolves the minimum viable MTU for interfaces, bonds and | ||
| + | # bridges that carry multiple VLANs. Each VLAN may have different MTU. The | ||
| + | # bridge, bond or interface must have an MTU to allow the VLAN with the | ||
| + | # largest MTU. | ||
| + | type: OS:: | ||
| + | properties: | ||
| + | type: number | ||
| + | value: | ||
| + | yaql: | ||
| + | expression: $.data.max() | ||
| + | data: | ||
| + | - {get_param: ControlPlaneMtu} | ||
| + | - {get_param: StorageMtu} | ||
| + | - {get_param: InternalApiMtu} | ||
| + | - {get_param: TenantMtu} | ||
| + | |||
| + | OsNetConfigImpl: | ||
| + | type: OS:: | ||
| + | properties: | ||
| + | group: script | ||
| + | config: | ||
| + | str_replace: | ||
| + | template: | ||
| + | get_file: ../ | ||
| + | params: | ||
| + | $network_config: | ||
| + | network_config: | ||
| + | |||
| + | ############## | ||
| + | - type: interface | ||
| + | name: nic1 | ||
| + | mtu: | ||
| + | get_param: ControlPlaneMtu | ||
| + | use_dhcp: false | ||
| + | dns_servers: | ||
| + | get_param: DnsServers | ||
| + | domain: | ||
| + | get_param: DnsSearchDomains | ||
| + | addresses: | ||
| + | - ip_netmask: | ||
| + | list_join: | ||
| + | - / | ||
| + | - - get_param: ControlPlaneIp | ||
| + | - get_param: ControlPlaneSubnetCidr | ||
| + | routes: | ||
| + | list_concat_unique: | ||
| + | - get_param: ControlPlaneStaticRoutes | ||
| + | - - default: true | ||
| + | next_hop: | ||
| + | get_param: ControlPlaneDefaultRoute | ||
| + | |||
| + | ############## | ||
| + | - type: ovs_bridge | ||
| + | name: br-local | ||
| + | dns_server: | ||
| + | get_param: DnsServers | ||
| + | use_dhcp: false | ||
| + | |||
| + | members: | ||
| + | ################ | ||
| + | - type: interface | ||
| + | name: nic2 | ||
| + | mtu: | ||
| + | get_attr: [MinViableMtu, | ||
| + | # force the MAC address of the bridge to this interface | ||
| + | primary: true | ||
| + | ################ | ||
| + | - type: vlan | ||
| + | mtu: | ||
| + | get_param: StorageMtu | ||
| + | vlan_id: | ||
| + | get_param: StorageNetworkVlanID | ||
| + | addresses: | ||
| + | - ip_netmask: | ||
| + | get_param: StorageIpSubnet | ||
| + | routes: | ||
| + | list_concat_unique: | ||
| + | - get_param: StorageInterfaceRoutes | ||
| + | ################ | ||
| + | - type: vlan | ||
| + | mtu: | ||
| + | get_param: InternalApiMtu | ||
| + | vlan_id: | ||
| + | get_param: InternalApiNetworkVlanID | ||
| + | addresses: | ||
| + | - ip_netmask: | ||
| + | get_param: InternalApiIpSubnet | ||
| + | routes: | ||
| + | list_concat_unique: | ||
| + | - get_param: InternalApiInterfaceRoutes | ||
| + | ################ | ||
| + | - type: vlan | ||
| + | mtu: | ||
| + | get_param: TenantMtu | ||
| + | vlan_id: | ||
| + | get_param: TenantNetworkVlanID | ||
| + | addresses: | ||
| + | - ip_netmask: | ||
| + | get_param: TenantIpSubnet | ||
| + | routes: | ||
| + | list_concat_unique: | ||
| + | - get_param: TenantInterfaceRoutes | ||
| + | |||
| + | ######################################################################### | ||
| + | outputs: | ||
| + | OS:: | ||
| + | description: | ||
| + | value: | ||
| + | get_resource: | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== compute-dvr.yaml ==== | ||
| + | |||
| + | <WRAP prewrap> | ||
| + | <code yaml> | ||
| + | # FIXME: This legacy template should be converted to a composable role | ||
| + | heat_template_version: | ||
| + | description: | ||
| + | Software Config to drive os-net-config to configure multiple interfaces for the | ||
| + | compute role with external bridge for DVR. | ||
| + | parameters: | ||
| + | ControlPlaneIp: | ||
| + | default: '' | ||
| + | description: | ||
| + | type: string | ||
| + | ControlPlaneSubnetCidr: | ||
| + | default: '' | ||
| + | description: | ||
| + | The subnet CIDR of the control plane network. (The parameter is | ||
| + | automatically resolved from the ctlplane subnet' | ||
| + | type: string | ||
| + | ControlPlaneDefaultRoute: | ||
| + | default: '' | ||
| + | description: | ||
| + | is automatically resolved from the ctlplane subnet' | ||
| + | type: string | ||
| + | ControlPlaneStaticRoutes: | ||
| + | default: [] | ||
| + | description: | ||
| + | Routes for the ctlplane network traffic. | ||
| + | JSON route e.g. [{' | ||
| + | Unless the default is changed, the parameter is automatically resolved | ||
| + | from the subnet host_routes attribute. | ||
| + | type: json | ||
| + | ControlPlaneMtu: | ||
| + | default: 1500 | ||
| + | description: | ||
| + | guaranteed to pass through the data path of the segments in the network. | ||
| + | (The parameter is automatically resolved from the ctlplane network' | ||
| + | type: number | ||
| + | |||
| + | StorageIpSubnet: | ||
| + | default: '' | ||
| + | description: | ||
| + | type: string | ||
| + | StorageNetworkVlanID: | ||
| + | default: 30 | ||
| + | description: | ||
| + | type: number | ||
| + | StorageMtu: | ||
| + | default: 1500 | ||
| + | description: | ||
| + | guaranteed to pass through the data path of the segments in the | ||
| + | Storage network. | ||
| + | type: number | ||
| + | StorageInterfaceRoutes: | ||
| + | default: [] | ||
| + | description: | ||
| + | Routes for the storage network traffic. | ||
| + | JSON route e.g. [{' | ||
| + | Unless the default is changed, the parameter is automatically resolved | ||
| + | from the subnet host_routes attribute. | ||
| + | type: json | ||
| + | StorageMgmtIpSubnet: | ||
| + | default: '' | ||
| + | description: | ||
| + | type: string | ||
| + | StorageMgmtNetworkVlanID: | ||
| + | default: 40 | ||
| + | description: | ||
| + | type: number | ||
| + | StorageMgmtMtu: | ||
| + | default: 1500 | ||
| + | description: | ||
| + | guaranteed to pass through the data path of the segments in the | ||
| + | StorageMgmt network. | ||
| + | type: number | ||
| + | StorageMgmtInterfaceRoutes: | ||
| + | default: [] | ||
| + | description: | ||
| + | Routes for the storage_mgmt network traffic. | ||
| + | JSON route e.g. [{' | ||
| + | Unless the default is changed, the parameter is automatically resolved | ||
| + | from the subnet host_routes attribute. | ||
| + | type: json | ||
| + | InternalApiIpSubnet: | ||
| + | default: '' | ||
| + | description: | ||
| + | type: string | ||
| + | InternalApiNetworkVlanID: | ||
| + | default: 20 | ||
| + | description: | ||
| + | type: number | ||
| + | InternalApiMtu: | ||
| + | default: 1500 | ||
| + | description: | ||
| + | guaranteed to pass through the data path of the segments in the | ||
| + | InternalApi network. | ||
| + | type: number | ||
| + | InternalApiInterfaceRoutes: | ||
| + | default: [] | ||
| + | description: | ||
| + | Routes for the internal_api network traffic. | ||
| + | JSON route e.g. [{' | ||
| + | Unless the default is changed, the parameter is automatically resolved | ||
| + | from the subnet host_routes attribute. | ||
| + | type: json | ||
| + | TenantIpSubnet: | ||
| + | default: '' | ||
| + | description: | ||
| + | type: string | ||
| + | TenantNetworkVlanID: | ||
| + | default: 50 | ||
| + | description: | ||
| + | type: number | ||
| + | TenantMtu: | ||
| + | default: 1500 | ||
| + | description: | ||
| + | guaranteed to pass through the data path of the segments in the | ||
| + | Tenant network. | ||
| + | type: number | ||
| + | TenantInterfaceRoutes: | ||
| + | default: [] | ||
| + | description: | ||
| + | Routes for the tenant network traffic. | ||
| + | JSON route e.g. [{' | ||
| + | Unless the default is changed, the parameter is automatically resolved | ||
| + | from the subnet host_routes attribute. | ||
| + | type: json | ||
| + | ExternalIpSubnet: | ||
| + | default: '' | ||
| + | description: | ||
| + | type: string | ||
| + | ExternalNetworkVlanID: | ||
| + | default: 1 | ||
| + | description: | ||
| + | type: number | ||
| + | ExternalMtu: | ||
| + | default: 1500 | ||
| + | description: | ||
| + | guaranteed to pass through the data path of the segments in the | ||
| + | External network. | ||
| + | type: number | ||
| + | ExternalInterfaceRoutes: | ||
| + | default: [] | ||
| + | description: | ||
| + | Routes for the external network traffic. | ||
| + | JSON route e.g. [{' | ||
| + | Unless the default is changed, the parameter is automatically resolved | ||
| + | from the subnet host_routes attribute. | ||
| + | type: json | ||
| + | # Uncomment when including environments/ | ||
| + | # default route on the Management interface. Also comment out the default | ||
| + | # route on the Control Plane and add the Management network to the roles | ||
| + | # default_route_networks in roles data. | ||
| + | # ManagementInterfaceDefaultRoute: | ||
| + | # | ||
| + | # | ||
| + | # type: string | ||
| + | DnsServers: # Override this via parameter_defaults | ||
| + | default: [] | ||
| + | description: | ||
| + | DNS servers to use for the Overcloud (2 max for some implementations). | ||
| + | If not set the nameservers configured in the ctlplane subnet' | ||
| + | dns_nameservers attribute will be used. | ||
| + | type: comma_delimited_list | ||
| + | DnsSearchDomains: | ||
| + | default: [] | ||
| + | description: | ||
| + | type: comma_delimited_list | ||
| + | |||
| + | ######################################################################### | ||
| + | resources: | ||
| + | |||
| + | MinViableMtu: | ||
| + | # This resource resolves the minimum viable MTU for interfaces, bonds and | ||
| + | # bridges that carry multiple VLANs. Each VLAN may have different MTU. The | ||
| + | # bridge, bond or interface must have an MTU to allow the VLAN with the | ||
| + | # largest MTU. | ||
| + | type: OS:: | ||
| + | properties: | ||
| + | type: number | ||
| + | value: | ||
| + | yaql: | ||
| + | expression: $.data.max() | ||
| + | data: | ||
| + | - {get_param: ControlPlaneMtu} | ||
| + | - {get_param: StorageMtu} | ||
| + | - {get_param: InternalApiMtu} | ||
| + | - {get_param: TenantMtu} | ||
| + | |||
| + | OsNetConfigImpl: | ||
| + | type: OS:: | ||
| + | properties: | ||
| + | group: script | ||
| + | config: | ||
| + | str_replace: | ||
| + | template: | ||
| + | get_file: ../ | ||
| + | params: | ||
| + | $network_config: | ||
| + | network_config: | ||
| + | |||
| + | ############## | ||
| + | - type: interface | ||
| + | name: nic1 | ||
| + | mtu: | ||
| + | get_param: ControlPlaneMtu | ||
| + | use_dhcp: false | ||
| + | dns_servers: | ||
| + | get_param: DnsServers | ||
| + | domain: | ||
| + | get_param: DnsSearchDomains | ||
| + | addresses: | ||
| + | - ip_netmask: | ||
| + | list_join: | ||
| + | - / | ||
| + | - - get_param: ControlPlaneIp | ||
| + | - get_param: ControlPlaneSubnetCidr | ||
| + | routes: | ||
| + | list_concat_unique: | ||
| + | - get_param: ControlPlaneStaticRoutes | ||
| + | - - default: true | ||
| + | next_hop: | ||
| + | get_param: ControlPlaneDefaultRoute | ||
| + | |||
| + | ############## | ||
| + | - type: ovs_bridge | ||
| + | name: br-local | ||
| + | dns_server: | ||
| + | get_param: DnsServers | ||
| + | use_dhcp: false | ||
| + | |||
| + | members: | ||
| + | ################ | ||
| + | - type: interface | ||
| + | name: nic2 | ||
| + | mtu: | ||
| + | get_attr: [MinViableMtu, | ||
| + | # force the MAC address of the bridge to this interface | ||
| + | primary: true | ||
| + | ################ | ||
| + | - type: vlan | ||
| + | mtu: | ||
| + | get_param: StorageMtu | ||
| + | vlan_id: | ||
| + | get_param: StorageNetworkVlanID | ||
| + | addresses: | ||
| + | - ip_netmask: | ||
| + | get_param: StorageIpSubnet | ||
| + | routes: | ||
| + | list_concat_unique: | ||
| + | - get_param: StorageInterfaceRoutes | ||
| + | ################ | ||
| + | - type: vlan | ||
| + | mtu: | ||
| + | get_param: InternalApiMtu | ||
| + | vlan_id: | ||
| + | get_param: InternalApiNetworkVlanID | ||
| + | addresses: | ||
| + | - ip_netmask: | ||
| + | get_param: InternalApiIpSubnet | ||
| + | routes: | ||
| + | list_concat_unique: | ||
| + | - get_param: InternalApiInterfaceRoutes | ||
| + | ################ | ||
| + | - type: vlan | ||
| + | mtu: | ||
| + | get_param: TenantMtu | ||
| + | vlan_id: | ||
| + | get_param: TenantNetworkVlanID | ||
| + | addresses: | ||
| + | - ip_netmask: | ||
| + | get_param: TenantIpSubnet | ||
| + | routes: | ||
| + | list_concat_unique: | ||
| + | - get_param: TenantInterfaceRoutes | ||
| + | |||
| + | ######################################################################### | ||
| + | |||
| + | # External bridge for DVR (no IP address required) | ||
| + | - type: ovs_bridge | ||
| + | name: bridge_name | ||
| + | mtu: | ||
| + | get_param: ExternalMtu | ||
| + | dns_servers: | ||
| + | get_param: DnsServers | ||
| + | use_dhcp: false | ||
| + | members: | ||
| + | - type: interface | ||
| + | name: nic3 | ||
| + | mtu: | ||
| + | get_param: ExternalMtu | ||
| + | primary: true | ||
| + | # Uncomment when including environments/ | ||
| + | # If setting default route on the Management interface, comment | ||
| + | # out the default route on the Control Plane. | ||
| + | #- type: interface | ||
| + | # name: nic7 | ||
| + | # mtu: | ||
| + | # get_param: ManagementMtu | ||
| + | # use_dhcp: false | ||
| + | # addresses: | ||
| + | # - ip_netmask: | ||
| + | # get_param: ManagementIpSubnet | ||
| + | # routes: | ||
| + | # list_concat_unique: | ||
| + | # - get_param: ManagementInterfaceRoutes | ||
| + | # - - default: true | ||
| + | # next_hop: | ||
| + | # get_param: ManagementInterfaceDefaultRoute | ||
| + | outputs: | ||
| + | OS:: | ||
| + | description: | ||
| + | value: | ||
| + | get_resource: | ||
| + | </ | ||
| + | </ | ||