Tạo network port
/v2.0/portsTạo network port trên một mạng được chỉ định.
Theo policy mặc định, bạn chỉ có thể tạo port trên các mạng thuộc project của mình (trừ khi bạn có quyền admin).
Request
Cấu trúc body
Object JSON cấp cao nhất phải chứa một object port duy nhất với các thuộc tính bên dưới.
Tham số
portobjectbắt buộcObject port (container cho tất cả thuộc tính bên dưới).
admin_state_upbooleanTrạng thái quản trị của port: up (true) hoặc down (false). Mặc định: true.
allowed_address_pairsarrayKhông hoặc nhiều object, mỗi object có ip_address (bắt buộc) và mac_address tuỳ chọn. ip_address có thể là một IP hoặc CIDR. Nếu bỏ qua mac_address, mặc định dùng MAC của port. Cho phép server gửi packet với các địa chỉ nguồn đó.
binding:host_idstringID của host nơi port nên nằm.
binding:profileobjectDict không định dạng cho thông tin VIF đặc thù backend. Dùng device_mac_address khi bind port direct-physical để ghi đè MAC. Mặc định là object rỗng {}.
binding:vnic_typestringLoại vNIC mong muốn. Một trong: normal, macvtap, direct, baremetal, direct-physical, virtio-forwarder, smart-nic, remote-managed. Mặc định: normal.
device_idstringID của thiết bị (ví dụ server instance hoặc router) sẽ dùng port này.
device_ownerstringLoại entity sử dụng port (ví dụ compute:nova, network:dhcp, network:router_interface).
dns_domainstringDNS domain hợp lệ cần liên kết.
dns_namestringDNS name (hostname) hợp lệ cần liên kết.
extra_dhcp_optsarrayKhông hoặc nhiều object DHCP option (opt_name, opt_value).
fixed_ipsarrayGán IP cụ thể. Mỗi phần tử có thể gồm subnet_id và/hoặc ip_address. Cách hoạt động: cung cấp cả hai để yêu cầu một địa chỉ chính xác; chỉ subnet_id để tự động cấp từ subnet đó; chỉ ip_address để cấp nếu hợp lệ trên bất kỳ subnet nào của mạng.
hintsobjectChỉ admin. Dict theo mechanism driver (ví dụ {"openvswitch": {"other_config": {"tx-steering": "hash"}}}). Độ dài tối đa 4095 ký tự sau khi serialize.
mac_addressstringĐịa chỉ MAC của port. Tự động sinh nếu bỏ qua.
namestringTên dễ đọc của port.
network_idstringbắt buộcID của mạng cần gắn port. (Bắt buộc)
numa_affinity_policystringPolicy NUMA affinity: none, required, preferred hoặc legacy.
port_security_enabledbooleanBật (true) hoặc tắt (false) việc áp dụng security group và anti-spoofing. Mặc định theo cấu hình của mạng.
project_idstringID project sẽ sở hữu port (chỉ admin / advsvc nếu khác project hiện tại).
qos_policy_idstringID QoS policy cần áp dụng.
security_groupsarrayDanh sách ID security group. Nếu bỏ qua, mặc định dùng security group mặc định đã cấu hình của mạng (hoặc không có).
tenant_idstringAlias deprecated của project_id.
propagate_uplink_statusbooleanCó lan truyền trạng thái uplink hay không (true/false).
descriptionstringMô tả dễ đọc. Mặc định: chuỗi rỗng.
mac_learning_enabledbooleanBật MAC learning trên port.
port_trusted_vifbooleanTrạng thái trusted VIF (true/false). Được phản ánh trong binding:profile.
Request mẫu
curl -ks -H 'Content-Type: application/json' \
-H 'X-Auth-Token: gAAAAA<...>' \
-d '{
"port": {
"name": "private-port",
"network_id": "f858b8d1-e66b-4a48-bc2e-3f16483b1b58",
"fixed_ips": [
{
"subnet_id": "adffaac8-2261-43f7-9e4f-6044230f65f1",
"ip_address": "192.168.1.12"
}
]
}
}' \
https://<node_IP_addr>:9696/v2.0/ports
Response
Tham số response
Nếu thành công, API trả về một object port duy nhất chứa tài nguyên vừa tạo.
portobjectbắt buộcObject port.
admin_state_upbooleanbắt buộcTrạng thái quản trị (true hoặc false).
allowed_address_pairsarraybắt buộcAllowed address pair (xem phần request).
binding:host_idstringbắt buộcID của host nơi port nằm.
binding:profileobjectbắt buộcThông tin VIF đặc thù backend (rỗng {} nếu không có).
binding:vif_detailsobjectbắt buộcThông tin bổ sung (ví dụ port_filter, ovs_hybrid_plug).
binding:vif_typestringbắt buộcLoại mechanism driver (ovs, bridge, macvtap, v.v.) hoặc unbound / binding_failed.
binding:vnic_typestringbắt buộcLoại vNIC được yêu cầu / đang áp dụng.
created_atstringbắt buộcThời điểm tạo (ISO 8601).
data_plane_statusstringbắt buộcTrạng thái data plane bên dưới (tuỳ deployment).
device_idstringbắt buộcID của thiết bị được gắn (rỗng nếu chưa có).
device_ownerstringbắt buộcLoại entity sở hữu.
dns_assignmentobjectbắt buộcGán DNS nội bộ (hostname, ip_address, fqdn).
dns_domainstringbắt buộcDNS domain.
dns_namestringbắt buộcDNS name.
extra_dhcp_optsarraybắt buộcCác DHCP option bổ sung được áp dụng.
fixed_ipsarraybắt buộcCác địa chỉ IP được gán (danh sách {subnet_id, ip_address}).
hintsobjectbắt buộcHint điều khiển OVS Userspace Tx packet steering nếu có.
idstringbắt buộcID của port.
ip_allocationstringbắt buộcChế độ cấp phát (immediate, deferred hoặc none).
mac_addressstringbắt buộcĐịa chỉ MAC (có thể bị binding ghi đè với direct-physical).
namestringbắt buộcTên port.
network_idstringbắt buộcID mạng.
numa_affinity_policystringPolicy NUMA affinity.
port_security_enabledbooleanbắt buộcPort security có được bật hay không.
project_idstringbắt buộcID project sở hữu.
qos_network_policy_idstringbắt buộcQoS policy của mạng (nếu có).
qos_policy_idstringbắt buộcQoS policy áp dụng trực tiếp lên port (nếu có).
revision_numberintegerbắt buộcRevision number.
resource_requestobjectCác nhóm tài nguyên / trait Placement được yêu cầu.
security_groupsarraybắt buộcID security group trên port.
statusstringbắt buộcTrạng thái port: ACTIVE, DOWN, BUILD hoặc ERROR.
tenant_idstringbắt buộcID project (trường legacy).
updated_atstringbắt buộcThời điểm cập nhật gần nhất (ISO 8601) hoặc null.
propagate_uplink_statusbooleanbắt buộcCờ lan truyền trạng thái uplink.
descriptionstringbắt buộcMô tả.
mac_learning_enabledbooleanMAC learning có được bật hay không.
port_trusted_vifbooleanbắt buộcTrạng thái trusted VIF.
tagsarraybắt buộcDanh sách tag.
Mã trạng thái
Thành công
| Mã | Mô tả |
|---|---|
| 201 - Created | Tài nguyên đã được tạo và sẵn sàng sử dụng. |
Lỗi
| Mã | Mô tả |
|---|---|
| 400 - Bad Request | Nội dung request không hợp lệ. |
| 401 - Unauthorized | Cần xác thực trước khi gửi request. |
| 403 - Forbidden | Policy không cho phép user hiện tại thực hiện thao tác này. |
| 404 - Not Found | Không tìm thấy tài nguyên được yêu cầu (ví dụ mạng). |
Response mẫu
Response body
{
"port": {
"id": "2d74fa0c-3e43-4fd9-a234-cbb4996cc684",
"name": "private-port",
"network_id": "f858b8d1-e66b-4a48-bc2e-3f16483b1b58",
"tenant_id": "f33507157a634f1cac71e06a70fb558e",
"mac_address": "fa:16:3e:7f:ae:b2",
"admin_state_up": true,
"status": "DOWN",
"device_id": "",
"device_owner": "",
"fixed_ips": [
{
"subnet_id": "adffaac8-2261-43f7-9e4f-6044230f65f1",
"ip_address": "192.168.1.12"
}
],
"project_id": "f33507157a634f1cac71e06a70fb558e",
"port_security_enabled": true,
"qos_policy_id": null,
"security_groups": [
"e1c1aa83-7302-4493-9cf4-43c2407e8074"
],
"binding:vnic_type": "normal",
"allowed_address_pairs": [],
"extra_dhcp_opts": [],
"description": "",
"qos_network_policy_id": "dfc42ced-02c8-4b1f-bbe6-14cc014f259d",
"tags": [],
"created_at": "2025-10-08T08:05:12Z",
"updated_at": "2025-10-08T08:05:12Z",
"revision_number": 1
}
}