10.7. 更新网络配置文件的格式


Red Hat OpenStack Platform (RHOSP) 17.0 中更改了网络配置 yaml 文件格式。网络配置文件 network_data.yaml 的结构已更改,NIC 模板文件格式已从 yaml 文件格式改为 Jinja2 ansible 格式 j2

您可以使用以下转换工具将当前部署中的现有网络配置文件转换为 RHOSP 17+ 格式:

  • convert_v1_net_data.py
  • convert_heat_nic_config_to_ansible_j2.py

您还可以手动转换现有的 NIC 模板文件。

您需要转换的文件包括:

  • network_data.yaml
  • 控制器 NIC 模板
  • 计算 NIC 模板
  • 任何其它自定义网络文件

10.7.1. 更新网络配置文件的格式

Red Hat OpenStack Platform (RHOSP) 17.0 中更改了网络配置 yaml 文件格式。您可以使用 convert_v1_net_data.py 转换工具,将现有网络配置文件转换为 RHOSP 17+ 格式。

流程

  1. 下载转换工具:

    • /usr/share/openstack-tripleo-heat-templates/tools/convert_v1_net_data.py
  2. 将 RHOSP 16+ 网络配置文件转换为 RHOSP 17+ 格式:

    $ python3 convert_v1_net_data.py <network_config>.yaml
    • 将 < network_config > 替换为您要转换的现有配置文件的名称,如 network_data.yaml

10.7.2. 自动将 NIC 模板转换为 Jinja2 Ansible 格式

在 Red Hat OpenStack Platform (RHOSP) 17.0 中,NIC 模板文件格式已从 yaml 文件格式改为 Jinja 2 Ansible 格式。

您可以使用 convert_heat_nic_config_to_ansible_j2.py 转换工具将当前部署中现有的 NIC 模板文件转换为 Jinja2 格式。

您还可以手动转换现有的 NIC 模板文件。如需更多信息,请参阅 手动将 NIC 模板转换为 Jinja2 Ansible 格式

您需要转换的文件包括:

  • 控制器 NIC 模板
  • 计算 NIC 模板
  • 任何其它自定义网络文件

流程

  1. 下载转换工具:

    • /usr/share/openstack-tripleo-heat-templates/tools/convert_heat_nic_config_to_ansible_j2.py
  2. 将您的 Compute 和 Controller NIC 临时文件以及任何其他自定义网络文件转换为 Jinja2 Ansible 格式:

    $ python3 convert_heat_nic_config_to_ansible_j2.py \
     [--stack <overcloud> | --standalone] --networks_file <network_config.yaml> \
     <network_template>.yaml
    • <overcloud> 替换为 overcloud 堆栈的名称或 UUID。如果未指定-- stack,堆栈默认为 overcloud

      注意

      您只能在 RHOSP 16 部署中使用-- stack 选项,因为它需要在 undercloud 节点上运行编排服务(heat)。从 RHOSP 17 开始,RHOSP 部署使用临时 heat,它在容器中运行编排服务。如果编排服务不可用,或者您没有堆栈,则使用- standalone 选项,而不是- stack

    • <network_config.yaml > 替换为描述网络部署的配置文件的名称,如 network_data.yaml
    • 将 < network_template > 替换为您要转换的网络配置文件的名称。

    重复此命令,直到您转换了所有自定义网络配置文件。convert_heat_nic_config_to_ansible_j2.py 脚本为您传递给它的每个 yaml 文件生成一个 .j2 文件以进行转换。

  3. 检查每个生成的 .j2 文件,以确保配置正确并完成您的环境,并手动解决工具生成的任何注释,突出显示无法转换配置的位置。有关手动将 NIC 配置转换为 Jinja2 格式的更多信息,请参阅 Heat 参数到 Ansible 变量映射
  4. network-environment.yaml 文件中配置 *NetworkConfigTemplate 参数以指向生成的 .j2 文件:

    parameter_defaults:
      ControllerNetworkConfigTemplate: '/home/stack/templates/custom-nics/controller.j2'
      ComputeNetworkConfigTemplate: '/home/stack/templates/custom-nics/compute.j2'
  5. 为旧网络配置文件从 network-environment.yaml 文件中删除 resource_registry 映射:

    resource_registry:
      OS::TripleO::Compute::Net::SoftwareConfig: /home/stack/templates/nic-configs/compute.yaml
      OS::TripleO::Controller::Net::SoftwareConfig: /home/stack/templates/nic-configs/controller.yaml

10.7.3. 手动将 NIC 模板转换为 Jinja2 Ansible 格式

在 Red Hat OpenStack Platform (RHOSP) 17.0 中,NIC 模板文件格式已从 yaml 文件格式改为 Jinja 2 Ansible 格式。

您可以手动转换现有的 NIC 模板文件。

您还可以使用 convert_heat_nic_config_to_ansible_j2.py 转换工具将当前部署中现有的 NIC 模板文件转换为 Jinja2 格式。如需更多信息,请参阅 自动将 NIC 模板转换为 Jinja2 ansible 格式

您需要转换的文件包括:

  • 控制器 NIC 模板
  • 计算 NIC 模板
  • 任何其它自定义网络文件

流程

  1. 创建 Jinja2 模板。您可以使用 os-net-config 模式创建新模板,或者从 undercloud 节点上的 /usr/share/ansible/roles/tripleo_network_config/templates/ 目录中复制并编辑示例模板。
  2. 将 heat 内部函数替换为 Jinja2 过滤器。例如,使用以下过滤器来计算 min_viable_mtu

    {% set mtu_list = [ctlplane_mtu] %}
    {% for network in role_networks %}
    {{ mtu_list.append(lookup('vars', networks_lower[network] ~ '_mtu')) }}
    {%- endfor %}
    {% set min_viable_mtu = mtu_list | max %}
  3. 使用 Ansible 变量为您的部署配置网络属性。您可以手动配置每个单独的网络,或者通过迭代 role_networks 来编程地配置每个网络:

    • 要手动配置每个网络,请将每个 get_param 函数替换为对应的 Ansible 变量。例如,如果您的当前部署使用 get_param: InternalApiNetworkVlanID 配置 vlan_id,那么请在模板中添加以下配置:

      vlan_id: {{ internal_api_vlan_id }}
      Expand
      表 10.12. 从 heat 参数映射到 Ansible vars的示例网络属性
      yaml 文件格式Jinja2 ansible 格式, j2
      - type: vlan
        device: nic2
        vlan_id:
          get_param: InternalApiNetworkVlanID
        addresses:
        - ip_netmask:
            get_param: InternalApiIpSubnet
      - type: vlan
        device: nic2
        vlan_id: {{ internal_api_vlan_id }}
        addresses:
        - ip_netmask: {{ internal_api_ip }}/{{ internal_api_cidr }}
    • 为了通过编程方式配置每个网络,请将 Jinja2 for-loop 结构添加到您的模板中,通过使用 role_networks 检索可用网络。

      示例

      {% for network in role_networks %}
        - type: vlan
          mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }}
          vlan_id: {{ lookup('vars', networks_lower[network] ~ '_vlan_id') }}
          addresses:
          - ip_netmask: {{ lookup('vars', networks_lower[network] ~ '_ip') }}/{{ lookup('vars', networks_lower[network] ~ '_cidr') }}
          routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }}
      {%- endfor %}

    有关 heat 参数与 Ansible vars 等效的映射的完整列表,请参阅 Heat 参数到 Ansible 变量映射

  4. network-environment.yaml 文件中配置 *NetworkConfigTemplate 参数以指向生成的 .j2 文件:

    parameter_defaults:
      ControllerNetworkConfigTemplate: '/home/stack/templates/custom-nics/controller.j2'
      ComputeNetworkConfigTemplate: '/home/stack/templates/custom-nics/compute.j2'
  5. 为旧网络配置文件从 network-environment.yaml 文件中删除 resource_registry 映射:

    resource_registry:
      OS::TripleO::Compute::Net::SoftwareConfig: /home/stack/templates/nic-configs/compute.yaml
      OS::TripleO::Controller::Net::SoftwareConfig: /home/stack/templates/nic-configs/controller.yaml

10.7.4. Heat 参数到 Ansible 变量映射

在 Red Hat OpenStack Platform (RHOSP) 17.x 中,NIC 模板文件格式已从 yaml 文件格式更改为 Jinja2 ansible 格式 j2

要手动将现有 NIC 模板文件转换为 Jinja2 ansible 格式,您可以将 heat 参数映射到 Ansible 变量,以配置部署中预置备节点的网络属性。如果运行 openstack overcloud node provision 而不指定-- network-config 可选参数,您还可以将 heat 参数映射到 Ansible 变量。

例如,如果您的当前部署使用 get_param: InternalApiNetworkVlanID 配置了 vlan_id,则将其替换为您的新 Jinja2 模板中的以下配置:

vlan_id: {{ internal_api_vlan_id }}
注意

如果使用 --network-config 可选参数运行 openstack overcloud 节点置备节点,则必须使用 overcloud-baremetal-deploy.yaml 中的参数来配置部署的网络属性。如需更多信息,请参阅置备 定义文件映射的 Heat 参数

下表列出从 heat vars 到等效的 Ansible 变量的可用映射

Expand
表 10.13. 从 heat 参数映射到 Ansible 变量
Heat 参数Ansible 变量

BondInterfaceOvsOptions

{{ bond_interface_ovs_options }}

ControlPlaneIp

{{ ctlplane_ip }}

ControlPlaneDefaultRoute

{{ ctlplane_gateway_ip }}

ControlPlaneMtu

{{ ctlplane_mtu }}

ControlPlaneStaticRoutes

{{ ctlplane_host_routes }}

ControlPlaneSubnetCidr

{{ ctlplane_subnet_cidr }}

DnsSearchDomains

{{ dns_search_domains }}

DnsServers

{{ ctlplane_dns_nameservers }}

注意

此 Ansible 变量填充了在 undercloud.conf 中配置用于 DEFAULT/undercloud_nameservers%SUBNET_SECTION%/dns_nameservers 的 IP 地址。%SUBNET_SECTION%/dns_nameservers 的配置会覆盖 DEFAULT/undercloud_nameservers 的配置,以便您可以将不同的 DNS 服务器用于 undercloud 和 overcloud,以及不同置备子网上的节点的不同 DNS 服务器。

NumDpdkInterfaceRxQueues

{{ num_dpdk_interface_rx_queues }}

配置表中没有列出的 heat 参数

要配置不在表中列出的 heat 参数,您必须将参数配置为 {{role.name}}ExtraGroupVars。在将参数配置为 {{role.name}}ExtraGroupVars 参数后,您可以在新模板中使用它。例如,要配置 StorageSupernet 参数,请在网络配置文件中添加以下配置:

parameter_defaults:
  ControllerExtraGroupVars:
    storage_supernet: 172.16.0.0/16

然后,您可以将 {{ storage_supernet }} 添加到 Jinja2 模板。

警告

如果将 --network-config 选项用于节点置备,则此过程将无法正常工作。需要自定义 vars 的用户不应使用 --network-config 选项。相反,在创建 Heat 堆栈后,将节点网络配置应用到 config-download ansible 运行。

将 Ansible 变量语法转换为以编程方式配置每个网络

当您使用 Jinja2 for-loop 结构通过迭代 role_networks 来检索可用网络时,您需要检索每个网络角色的小写名称以添加到每个属性。使用以下结构将以上表中的 Ansible 变量转换为所需的语法:

{{ lookup(‘vars’, networks_lower[network] ~ ‘_<property>’) }}

  • < property> 替换为您要设置的属性,如 ipvlan_idmtu

例如,要动态填充每个 NetworkVlanID 的值,请将 {{ <network_name>_vlan_id }} 替换为以下配置:

{{ lookup(‘vars’, networks_lower[network] ~ ‘_vlan_id’) }}`

10.7.5. 用于置备定义文件映射的 heat 参数

如果使用 --network-config 可选参数运行 openstack overcloud node provision 命令置备节点,则必须使用节点定义文件 overcloud-baremetal-deploy.yaml 中的参数来配置部署的网络属性。

如果您的部署使用预置备节点,您可以将 heat 参数映射到 Ansible 变量,以配置网络属性。如果运行 openstack overcloud node provision 而不指定-- network-config 可选参数,您还可以将 heat 参数映射到 Ansible 变量。有关使用 Ansible 变量配置网络属性的更多信息,请参阅 Heat 参数到 Ansible 变量映射

下表列出了 heat 参数到节点定义文件 overcloud-baremetal-deploy.yaml 中等效的 network_config 属性的可用映射。

Expand
表 10.14. 从 heat 参数映射到节点定义文件 overcloud-baremetal-deploy.yaml
Heat 参数network_config 属性

BondInterfaceOvsOptions

bond_interface_ovs_options

DnsSearchDomains

dns_search_domains

NetConfigDataLookup

net_config_data_lookup

NeutronPhysicalBridge

physical_bridge_name

NeutronPublicInterface

public_interface_name

NumDpdkInterfaceRxQueues

num_dpdk_interface_rx_queues

{{role.name}}NetworkConfigUpdate

network_config_update

下表列出了 heat 参数中的可用映射,到网络定义文件 network_data.yaml 中等效的属性。

Expand
表 10.15. 从 heat 参数映射到网络定义文件 network_data.yaml
Heat 参数IPv4 network_data.yaml 属性IPv6 network_data.yaml 属性

<network_name>IpSubnet

- name: <network_name>
  subnets:
    subnet01:
      ip_subnet: 172.16.1.0/24
- name: <network_name>
  subnets:
    subnet01:
      ipv6_subnet: 2001:db8:a::/64

<network_name>NetworkVlanID

- name: <network_name>
  subnets:
    subnet01:
      ...
      vlan: <vlan_id>
- name: <network_name>
  subnets:
    subnet01:
      ...
      vlan: <vlan_id>

<network_name>Mtu

- name: <network_name>
  mtu:
- name: <network_name>
  mtu:

<network_name>InterfaceDefaultRoute

- name: <network_name>
  subnets:
    subnet01:
      ip_subnet: 172.16.16.0/24
      gateway_ip: 172.16.16.1
- name: <network_name>
  subnets:
    subnet01:
      ipv6_subnet: 2001:db8:a::/64
      gateway_ipv6: 2001:db8:a::1

<network_name>InterfaceRoutes

- name: <network_name>
  subnets:
    subnet01:
      ...
      routes:
        - destination: 172.18.0.0/24
          nexthop: 172.18.1.254
- name: <network_name>
  subnets:
    subnet01:
      ...
      routes_ipv6:
        - destination: 2001:db8:b::/64
          nexthop: 2001:db8:a::1

10.7.6. 对网络数据模式的更改

在 Red Hat OpenStack Platform (RHOSP) 17 中更新了网络数据模式。RHOSP 16 及更早版本中使用的网络数据模式的主要区别,以及 RHOSP 17 及更高版本中使用的网络数据模式,如下所示:

  • 基本子网已移至 子网 映射。这会协调非路由和路由部署的配置,如 spine-leaf networking。
  • enabled 选项不再使用 来忽略禁用的网络。相反,您必须从配置文件中删除禁用的网络。
  • 因为使用的 heat 资源已被删除,所以不再需要 compat_name 选项。
  • 以下参数在网络级别上不再有效: ip_subnet,gateway_ip,allocation_pools,routes,ipv6_subnet,gateway_ipv6,ipv6_allocation_pools, 和 routes_ipv6。这些参数仍在子网级别上使用。
  • 引入了一个新的参数 physical_network,用于在 metalsmith 中创建 ironic 端口。
  • 新的参数 network_typesegmentation_id 替换 {{network.name}}NetValueSpecs,用于将网络类型设置为 vlan
  • RHOSP 17 中弃用了以下参数:

    • {{network.name}}NetCidr
    • {{network.name}}SubnetName
    • {{network.name}}Network
    • {{network.name}}AllocationPools
    • {{network.name}}Routes
    • {{network.name}}SubnetCidr_{{subnet}}
    • {{network.name}}AllocationPools_{{subnet}}
    • {{network.name}}Routes_{{subnet}}
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部