Sep 022014
 

说起来比较惭愧,整天吹API的重要性,其实我自己没怎么去调用过API,虽然我是知道web都是通过调用API来实现各种功能的。

测试API或者简单使用一下,可以用curl命令。下面就用这个来学习一下。

主要目的是修改网卡的port的属性,默认只是一个ip和mac地址可以访问,通过curl方法,添加多个IP和mac地址,通过一个port,访问网络。

UOS API手册 https://docs.ustack.com/api_doc/index.html

获取token

想使用API,那么你第一步就是要获得token。

curl -i -X POST https://identity.api.ustack.com/v3/auth/tokens \
     -H "Content-Type: application/json"  \
     -H "Accept: application/json" \
     -d '{"auth": {"scope": {"project": {"id": "4ad2f0575a55403484b71f42f4d8696c"}}, "identity": {"password": {"user":{ "password": "2a20bd66", "id": "d29a6f1b37af49ddbd17e554c9245f30"}}, "methods": ["password"]}}}'

登录UOS的Dashboard,在右上角的个人设置里,你会看到你的project ID和User id

 

Snap3

你需要把user id和project id,你登录控制台的密码,输入就可以。

Snap4

第一个就是project的ID,第二个框就是你登录UOS的密码,第三个就是User ID。

返回 X-Subject-Token: 后面的就是token。

token是有有效期,通常好像是24小时,并且如果你请求新的token,那么旧的token就作废。

查看ports

api的文档 https://docs.ustack.com/api_doc/network_api.html#ports

curl -s -X GET https://bj1.network.api.ustack.com/v2.0/ports \
     -H "X-Auth-Token: ecfb13ef3d804d31b6a7a829b963b22a" \
     -H "Content-Type: application/json" \
     -H "Accept: application/json"

你只需要把token更改就可以。运行完这个命令,会出来一串东西,非常不好阅读。

curl -s -X GET https://bj1.network.api.ustack.com/v2.0/ports \
     -H "X-Auth-Token: ecfb13ef3d804d31b6a7a829b963b22a" \
     -H "Content-Type: application/json" \
     -H "Accept: application/json"  | python -mjson.tool

让输出符合python的格式。

假设我们需要修改某个port的属性,对我的需求来说,就是修改网络节点的eth2,这个port的某个特性

https://docs.ustack.com/api_doc/network_api.html#ports

默认一个port,只会运行固定的mac地址和IP地址访问网络。我们需要添加一个IP和mac地址通过这个port可以访问网络。专业名字是:allowed_address_pairs。

Snap7

注意那个uuid,

curl -i https://bj1.network.api.ustack.com/v2.0/ports/b15602f9-fab7-47f3-a635-eaf2cd6fd233 -X PUT -d '{"port":{"allowed_address_pairs":[{"ip_address": "192.168.100.101","mac_address": "fa:16:3e:9b:c9:eb" },{"ip_address": "192.168.100.102","mac_address": "fa:16:3e:9b:c9:eb" },{"ip_address": "192.168.100.21","mac_address": "c2:32:7d:cf:9d:43" }]}}' -H "X-Auth-Token: 05cfb90df9ef4832b0bf9415298a630d" -H "Accept: application/json" -H "Content-Type: application/json"

大家把这个curl请求修改一下就可以,注意那个链接ports后面的是UUID,和上图是一样的。

这个例子,已经把eth2和br-ex,也进行了修改。br-ex 的mac地址是 c2:32:7d:cf:9d:43,也已经允许。

{
            "admin_state_up": true,
            "allowed_address_pairs": [
                {
                    "ip_address": "192.168.100.21",
                    "mac_address": "c2:32:7d:cf:9d:43"
                },
                {
                    "ip_address": "192.168.100.101",
                    "mac_address": "fa:16:3e:9b:c9:eb"
                },
                {
                    "ip_address": "192.168.100.102",
                    "mac_address": "fa:16:3e:9b:c9:eb"
                }
            ],
            "binding:vnic_type": "normal",
            "created_at": "2014-09-02T13:22:42.000000",
            "device_id": "a61e5cc8-37f4-4518-8efa-508921e6a9b7",
            "device_owner": "compute:None",
            "extra_dhcp_opts": [],
            "fixed_ips": [
                {
                    "ip_address": "192.168.100.21",
                    "subnet_id": "e8352626-1828-493d-928f-3cafe593fa0a"
                }
            ],

 

  2 Responses to “使用UOS API添加allow_address_pairs”

  1. 陈老师问下,公司想用EMC作为cinder的卷存储,不知道您或者您的朋友有没有成功的案例??如果用EMC提供类似nfs的共享方式到/var/lib/nova/instace,这样可不可行???

    • 这个你就直接问emc的厂商,看看你这款存储的驱动是否在cinder里,如果在,肯定是没啥问题的。EMC的存储对cinder支持应该是不错的。

 Leave a Reply

(required)

(required)