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+ 格式。
流程
下载转换工具:
-
/usr/share/openstack-tripleo-heat-templates/tools/convert_v1_net_data.py
-
将 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 模板
- 任何其它自定义网络文件
流程
下载转换工具:
-
/usr/share/openstack-tripleo-heat-templates/tools/convert_heat_nic_config_to_ansible_j2.py
-
将您的 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文件以进行转换。-
检查每个生成的
.j2文件,以确保配置正确并完成您的环境,并手动解决工具生成的任何注释,突出显示无法转换配置的位置。有关手动将 NIC 配置转换为 Jinja2 格式的更多信息,请参阅 Heat 参数到 Ansible 变量映射。 在
network-environment.yaml文件中配置*NetworkConfigTemplate参数以指向生成的.j2文件:parameter_defaults: ControllerNetworkConfigTemplate: '/home/stack/templates/custom-nics/controller.j2' ComputeNetworkConfigTemplate: '/home/stack/templates/custom-nics/compute.j2'为旧网络配置文件从
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 模板
- 任何其它自定义网络文件
流程
-
创建 Jinja2 模板。您可以使用
os-net-config模式创建新模板,或者从 undercloud 节点上的/usr/share/ansible/roles/tripleo_network_config/templates/目录中复制并编辑示例模板。 将 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 %}使用 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 变量映射。在
network-environment.yaml文件中配置*NetworkConfigTemplate参数以指向生成的.j2文件:parameter_defaults: ControllerNetworkConfigTemplate: '/home/stack/templates/custom-nics/controller.j2' ComputeNetworkConfigTemplate: '/home/stack/templates/custom-nics/compute.j2'为旧网络配置文件从
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 变量的可用映射
| Heat 参数 | Ansible 变量 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
注意
此 Ansible 变量填充了在 |
|
|
|
配置表中没有列出的 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> 替换为您要设置的属性,如ip、vlan_id或mtu。
例如,要动态填充每个 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 属性的可用映射。
| Heat 参数 | network_config 属性 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
下表列出了 heat 参数中的可用映射,到网络定义文件 network_data.yaml 中等效的属性。
| Heat 参数 | IPv4 network_data.yaml 属性 | IPv6 network_data.yaml 属性 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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_type和segmentation_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}}
-