opentack neutron学习 -- create_network实现

声明:

本博客欢迎转发,但请保留原作者信息!

博客地址:http://blog.csdn.net/llg8212

内容系本人学习、研究和总结,如有雷同,不胜荣幸!

该接口的代码流程以openvswitch的实现为例。

1.请求响应消息

1.1创建nativenetwork

请求:

{

"network":

{

"name":"sample_network",

"admin_state_up":false

}

}

应答:

{

"network":{

"admin_state_up":true,

"id":"850d3f2c-f0a5-4f8b-b1cf-5836fc0be940",

"name":"sample_network",

"shared":false,#是否可以在多个tenant共享

"status":"ACTIVE",

"subnets":[],

"tenant_id":"f667b69e4d6749749ef3bcba7251d9ce"

}

}

1.2使用provider

请求:

{

"network":

{

"name":"net-name",

"admin_state_up":true,

"provider:network_type":"vlan",

"provider:physical_network":"physnet_1",

"provider:segmentation_id":201

}

}

应答:

{

"network":

{

"status":"ACTIVE",

"subnets":[],

"name":"network-1",

"admin_state_up":true,

"tenant_id":"c1210485b2424d48804aad5d39c61b8f",

"id":"3a06dfc7-d239-4aad-9a57-21cd171c72e5",

"shared":false,

"provider:network_type":"vlan",

"provider:physical_network":"physnet_1",

"provider:segmentation_id":101

}

}

1.3 Bulk create networks

请求:

{

"networks":[

{

"name":"sample_network_1",

"admin_state_up":false

},

{

"name":"sample_network_2",

"admin_state_up":false

}

]

}

注:批量创建网络的处理和创建单个的处理流程是完全一样的,仅在neutron-server中将多个网络信息解析并放到一个list中,然后通过循环去创建。最后返回的消息也是批量的消息。

2.代码流程

create_network的过程就是neutron-server接收到restapi请求后,调用plugincreate_network方法,根据请求的参数将相应信息写入数据库并返回创建的记录的过程。其时序图如下:


疑问:发出网络创建开始和结束以及dhcp的消息有什么作用?

如果创建网络时指定了provider,在plugin创建网络的过程中会先处理provider,其处理流程如下图所示:


从以上的流程处理获得如下一张provider中网络模式和physical_networksegmentation_id的取值对应关系表这也就是传入provider需要遵守的约束):

provider:

network_type

provider:physical_network

provider:

segmentation_id

备注

local


flat

如果设置,需跟plugin配置中network_vlan_ranges= XXX[:start:end]中的XXX

如果没设置并且XXX'default'physical_network设置为'default'

代码中设置为-1


vlan

1~4094之间

已有

bpprovider_network_partial_specs,允许不指定segmentation_id

grevxlan

代码中设置为None

tunneling需为true



### 删除 Neutron LBaaS 资源的 Bash 和 Python 实现 以下是两种方法来实现批量删除 Neutron LBaaS 资源的操作,分别基于 Bash 和 Python 编程语言。 #### 方法一:Bash 脚本实现 可以利用 `for` 循环遍历资源 ID 列表并逐一执行删除命令。以下是一个完整的 Bash 脚本示例: ```bash #!/bin/bash # 定义要删除的资源ID列表 LOADBALANCERS=("3f677aa4-e0d7-4a2f-8804-1fb284aa8b5c" "aff173a9-4f52-48be-8295-2fc904ba4d6a") LISTENERS=("849ed4f2-3075-4b7e-bf4e-1a23c84f9445" "a785ff36-dfcf-45b3-a3db-bfe0e5c12f45") POOLS=("example-pool-id-1" "example-pool-id-2") # 替换为实际池ID MEMBERS=("example-member-id-1" "example-member-id-2") # 替换为实际成员ID HEALTHMONITORS=("example-healthmonitor-id-1" "example-healthmonitor-id-2") # 替换为实际健康检查ID L7POLICIES=("example-l7policy-id-1" "example-l7policy-id-2") # 替换为实际L7策略ID # 批量删除 L7 策略 for l7policy_id in "${L7POLICIES[@]}"; do neutron lbaas-l7policy-delete $l7policy_id || echo "Failed to delete L7 policy: $l7policy_id" done # 批量删除健康检查 for healthmonitor_id in "${HEALTHMONITORS[@]}"; do neutron lbaas-healthmonitor-delete $healthmonitor_id || echo "Failed to delete health monitor: $healthmonitor_id" done # 批量删除成员 for member_id in "${MEMBERS[@]}"; do neutron lbaas-member-delete --pool $member_id || echo "Failed to delete member: $member_id" done # 批量删除池 for pool_id in "${POOLS[@]}"; do neutron lbaas-pool-delete $pool_id || echo "Failed to delete pool: $pool_id" done # 批量删除监听器 for listener_id in "${LISTENERS[@]}"; do neutron lbaas-listener-delete $listener_id || echo "Failed to delete listener: $listener_id" done # 批量删除负载均衡器 for loadbalancer_id in "${LOADBALANCERS[@]}"; do neutron lbaas-loadbalancer-delete $loadbalancer_id || echo "Failed to delete load balancer: $loadbalancer_id" done ``` 上述脚本会按照依赖关系依次删除 L7 策略、健康检查、成员、池、监听器以及最终的负载均衡器[^1]。 --- #### 方法二:Python 脚本实现 如果更倾向于使用编程语言处理复杂的逻辑,可以选择 Python 并结合 OpenStack SDK 或者直接调用 CLI 命令的方式完成任务。下面提供了一个简单的 Python 示例: ```python import subprocess def execute_command(command): try: result = subprocess.run(command, shell=True, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) return result.stdout.decode('utf-8') except subprocess.CalledProcessError as e: return f"Command failed with error: {e.stderr.decode('utf-8')}" # 定义资源ID列表 loadbalancers = ["3f677aa4-e0d7-4a2f-8804-1fb284aa8b5c", "aff173a9-4f52-48be-8295-2fc904ba4d6a"] listeners = ["849ed4f2-3075-4b7e-bf4e-1a23c84f9445", "a785ff36-dfcf-45b3-a3db-bfe0e5c12f45"] pools = ["example-pool-id-1", "example-pool-id-2"] # 替换为实际池ID members = ["example-member-id-1", "example-member-id-2"] # 替换为实际成员ID healthmonitors = ["example-healthmonitor-id-1", "example-healthmonitor-id-2"] # 替换为实际健康检查ID l7policies = ["example-l7policy-id-1", "example-l7policy-id-2"] # 替换为实际L7策略ID # 批量删除 L7 策略 for l7policy_id in l7policies: output = execute_command(f"neutron lbaas-l7policy-delete {l7policy_id}") print(output) # 批量删除健康检查 for healthmonitor_id in healthmonitors: output = execute_command(f"neutron lbaas-healthmonitor-delete {healthmonitor_id}") print(output) # 批量删除成员 for member_id in members: output = execute_command(f"neutron lbaas-member-delete --pool {member_id}") print(output) # 批量删除池 for pool_id in pools: output = execute_command(f"neutron lbaas-pool-delete {pool_id}") print(output) # 批量删除监听器 for listener_id in listeners: output = execute_command(f"neutron lbaas-listener-delete {listener_id}") print(output) # 批量删除负载均衡器 for loadbalancer_id in loadbalancers: output = execute_command(f"neutron lbaas-loadbalancer-delete {loadbalancer_id}") print(output) ``` 此代码片段同样遵循了先删除子资源再删除父级资源的原则,并通过捕获错误消息提供了更好的调试支持[^2]。 --- #### 注意事项 在运行以上任何一种方式之前,请务必确认: 1. 已经安装并配置好 OpenStack 的客户端工具(如 `neutron`),并且具备足够的权限。 2. 需要替换模板中的占位符(如 `"example-resource-id"`)为真实的资源 ID。 3. 如果存在其他关联资源未被清理,则可能导致部分删除失败的情况发生。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值