차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
다음 판 | 이전 판 | ||
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: | ||
+ | </ | ||
+ | </ |