pkgcloud和curl創(chuàng)建openstack實(shí)例.

在通過(guò)了keyStone驗(yàn)證通過(guò)后墩虹,openstack響應(yīng)endpoints數(shù)組反惕,這些數(shù)組對(duì)應(yīng)的是openstack的主要模塊訪問(wèn)地址齐邦,例如nova,neutron等憔四。
neutron:

       {

     "endpoints": [{

         "region_id": "RegionOne",

         "url": "http://xxx:9696",

         "region": "RegionOne",

         "interface": "internal",

         "id": "1b6abf4194024a5a88ad536836918d34"

     }, {

         "region_id": "RegionOne",

         "url": "http://xxx:9696",

         "region": "RegionOne",

         "interface": "admin",

         "id": "8b7315fa74654cb8b86641bd44351da4"

     }, {

         "region_id": "RegionOne",

         "url": "http://xxx:9696", // 這個(gè)就是可以通過(guò)外部訪問(wèn)的api更卒,http schema

         "region": "RegionOne",

         "interface": "public",

         "id": "f895dc01a3424c1e955da86b7bdc63f2"

     }],

     "type": "network",

     "id": "27c04c9ee6be457fa73671cf967aae19",

     "name": "neutron"

 }

在需要獲取network相關(guān)的api時(shí),就可以通過(guò)這個(gè)public的url進(jìn)行訪問(wèn)悬赏。

用戶就可以與openstack進(jìn)行交互查詢(xún)image丐吓,flavor,networks等數(shù)據(jù)柿汛,作為創(chuàng)建虛擬機(jī)的參數(shù)冗酿。

curl方式

在驗(yàn)證keystone的請(qǐng)求中埠对,需要加上參數(shù) -i ,這樣才能獲取返回的header(token在header中存放)裁替,x-Subject-Token

HTTP/1.1 201 Created
Date: Fri, 28 Oct 2016 09:22:22 GMT
Server: Apache
X-Subject-Token: gAAAAABYExjOa0G6p-5HkVwVxwFDJ7Dc_eXrkfGxQYUVF8sgD8WfQICNuQi76FAcQCvsayDPwiYGLOUQKjdmA2jA9FpGrmWWacBhn_fMbggN0gHAwkeWUrXg01JySJh7szvjHi0LqGo_OOY7NuJ34xpSPIp1A1sC__ETXvwpqMli9Va6JqqG8do
Vary: X-Auth-Token
x-openstack-request-id: req-4fbf6557-066b-4135-818e-cc935e45e313
Content-Length: 5407
Content-Type: application/json

為了方便測(cè)試项玛,可以將keystone驗(yàn)證返回的token和對(duì)應(yīng)的url存放在變量中,

export OS_TOKEN=gAAAAABYExjOa0G6p-5HkVwVxwFDJ7Dc_eXrkfGxQYUVF8sgD8WfQICNuQi76FAcQCvsayDPwiYGLOUQKjdmA2jA9FpGrmWWacBhn_fMbggN0gHAwkeWUrXg01JySJh7szvjHi0LqGo_OOY7NuJ34xpSPIp1A1sC__ETXvwpqMli9Va6JqqG8do

獲取flavors

curl -s -H "X-Auth-Token: $OS_TOKEN" \
    $OS_COMPUTE_API/flavors \
    | python -m json.tool

可以根據(jù)自己的需要從返回的配置中獲取flavor

{
    "flavors": [
        {
            "id": "1",
            "links": [
                {
                    "href": "http://223.202.32.35:8774/v2.1/fc6ac8c46d8147fd9ffa7a32e373ff9a/flavors/1",
                    "rel": "self"
                },
                {
                    "href": "http://223.202.32.35:8774/fc6ac8c46d8147fd9ffa7a32e373ff9a/flavors/1",
                    "rel": "bookmark"
                }
            ],
            "name": "m1.tiny"
        },
        {
            "id": "2",
            "links": [
                {
                    "href": "http://223.202.32.35:8774/v2.1/fc6ac8c46d8147fd9ffa7a32e373ff9a/flavors/2",
                    "rel": "self"
                },
                {
                    "href": "http://223.202.32.35:8774/fc6ac8c46d8147fd9ffa7a32e373ff9a/flavors/2",
                    "rel": "bookmark"
                }
            ],
            "name": "m1.small"
        }

}

獲取image

curl -s -H "X-Auth-Token: $OS_TOKEN" \
    $OS_IMAGE_API/v2/images \
    | python -m json.tool

返回的json數(shù)據(jù)

{
    "first": "/v2/images",
    "images": [
        {
            "checksum": "0d7ba90f5923297ee53351ce7e72ab76",
            "container_format": "bare",
            "created_at": "2016-10-19T09:19:36Z",
            "description": "",
            "disk_format": "qcow2",
            "file": "/v2/images/ea99659a-5109-49e3-9b0f-bf5345eb7d97/file",
            "id": "ea99659a-5109-49e3-9b0f-bf5345eb7d97",
            "min_disk": 10,
            "min_ram": 512,
            "name": "Centos 7",
            "owner": "4f9cfde31f7d42f096b766e4b95855e8",
            "protected": false,
            "schema": "/v2/schemas/image",
            "self": "/v2/images/ea99659a-5109-49e3-9b0f-bf5345eb7d97",
            "size": 377880576,
            "status": "active",
            "tags": [],
            "updated_at": "2016-10-26T08:56:33Z",
            "virtual_size": null,
            "visibility": "public"
        }]

}

獲取networks信息

curl -s -H "X-Auth-Token: $OS_TOKEN" \
   $OS_NETWORKS_API/v2.0/networks \
    | python -m json.tool

返回的json弱判,其中在后面需要使用的一個(gè)是service襟沮,主要負(fù)責(zé)內(nèi)網(wǎng)ip的分配,另一個(gè)是public昌腰,進(jìn)行公網(wǎng)IP的分配

{
    "networks": [
        {
            "admin_state_up": true,
            "availability_zone_hints": [],
            "availability_zones": [
                "nova"
            ],
            "created_at": "2016-10-08T07:09:20",
            "description": "",
            "id": "38d9d825-256b-4477-939b-42714a28776d",
            "ipv4_address_scope": null,
            "ipv6_address_scope": null,
            "mtu": 1450,
            "name": "HA network tenant 4f9cfde31f7d42f096b766e4b95855e8",
            "port_security_enabled": true,
            "provider:network_type": "vxlan",
            "provider:physical_network": null,
            "provider:segmentation_id": 9,
            "router:external": false,
            "shared": false,
            "status": "ACTIVE",
            "subnets": [
                "2aea08cf-4027-4569-86b4-63646f6dd2b2"
            ],
            "tags": [],
            "tenant_id": "",
            "updated_at": "2016-10-08T07:09:20"
        },
        {
            "admin_state_up": true,
            "availability_zone_hints": [],
            "availability_zones": [
                "nova"
            ],
            "created_at": "2016-10-08T09:11:03",
            "description": "",
            "id": "baa3dbad-5994-4837-9263-32304ee7d035",
            "ipv4_address_scope": null,
            "ipv6_address_scope": null,
            "is_default": false,
            "mtu": 1500,
            "name": "public",
            "port_security_enabled": true,
            "provider:network_type": "vlan",
            "provider:physical_network": "vlan",
            "provider:segmentation_id": 40,
            "router:external": true,
            "shared": true,
            "status": "ACTIVE",
            "subnets": [
                "a2c44a10-6f23-42dd-b7d8-c3319d542628"
            ],
            "tags": [],
            "tenant_id": "4f9cfde31f7d42f096b766e4b95855e8",
            "updated_at": "2016-10-08T09:19:18"
        },
        {
            "admin_state_up": true,
            "availability_zone_hints": [],
            "availability_zones": [
                "nova"
            ],
            "created_at": "2016-10-09T04:04:29",
            "description": "",
            "id": "f3411c78-f02a-4556-9171-4e9e5b102b20",
            "ipv4_address_scope": null,
            "ipv6_address_scope": null,
            "mtu": 1450,
            "name": "service",
            "port_security_enabled": true,
            "provider:network_type": "vxlan",
            "provider:physical_network": null,
            "provider:segmentation_id": 71,
            "router:external": false,
            "shared": true,
            "status": "ACTIVE",
            "subnets": [
                "a76d00f6-752a-40af-bbcd-fefb6a33fef0"
            ],
            "tags": [],
            "tenant_id": "4f9cfde31f7d42f096b766e4b95855e8",
            "updated_at": "2016-10-10T05:43:49"
        }
    ]
}

有了這些參數(shù)基本上就可以創(chuàng)建一個(gè)虛擬機(jī)實(shí)例了开伏。

  curl -is -H "X-Auth-Token: $OS_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
    "server": {
        "name": "patrick-vm",
        "imageRef": "fff2aa1b-dd06-4dbf-b259-652057615f4b",
        "flavorRef": "2",
        "networks": [{"uuid": "f3411c78-f02a-4556-9171-4e9e5b102b20"}]
        }}' \
  $OS_COMPUTE_API/servers 

如果需要采用keyPairs的方式登錄創(chuàng)建的虛擬機(jī)。添加參數(shù)key_name即可遭商,對(duì)應(yīng)的value就是秘鑰對(duì)的名字

如果需要在虛擬機(jī)創(chuàng)建后固灵,執(zhí)行相應(yīng)的腳本。則需要添加user_data這個(gè)參數(shù)劫流,腳本的編寫(xiě)方式需要滿足cloud-init要求巫玻,該參數(shù)填寫(xiě)前,需要將腳本編碼為base64格式困介。

添加參數(shù)后的請(qǐng)求如下:

 curl -is -H "X-Auth-Token: $OS_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{
    "server": {
        "name": "patrick-vm",
        "imageRef": "fff2aa1b-dd06-4dbf-b259-652057615f4b",
        "flavorRef": "2",
        "networks": [{"uuid": "f3411c78-f02a-4556-9171-4e9e5b102b20"}],
        "user_data": "IyEvYmluL3NoIAplY2hvICJIZWxsbyBXb3JsZC4gIFRoZSB0aW1lIGlzIG5vdyAkKGRhdGUgLVIpISIgfCB0ZWUgL3Jvb3Qvb3V0cHV0LnR4dCAK",
        "key_name": "op-key"
        }}' \
  $OS_COMPUTE_API/servers

其中user_data對(duì)應(yīng)的原文為

#!/bin/sh

echo "Hello World.  The time is now $(date -R)!" | tee /root/output.txt

pkgcloud

由于pkgcloud在createClient后將對(duì)應(yīng)的url和token都存放在client對(duì)象中大审,所以過(guò)程相對(duì)簡(jiǎn)單很多

var pkgcloud = require('pkgcloud'),
    _ = require('lodash');

var cc = pkgcloud.compute.createClient({
    provider: 'openstack', // required
    username: '$user_name', // required
    password: '$user_pass', // required
    region: 'RegionOne',
    keystoneAuthVersion: 'v3',
    domainId: 'Default',
    tenantId: 'fc6ac8c46d8147fd9ffa7a32e373ff9a',
    domainName: 'Default',
    authUrl: 'http://xxxx:5000' // required
});

var nc = pkgcloud.network.createClient({
    provider: 'openstack', // required
    username: '$user_name', // required
    password: '$user_pass', // required
    region: 'RegionOne',
    keystoneAuthVersion: 'v3',
    domainId: 'Default',
    tenantId: 'fc6ac8c46d8147fd9ffa7a32e373ff9a',
    domainName: 'Default',
    authUrl: 'http://xxxx:5000' // required
});

cc.getFlavors(function(err, flavors) {
    if (err) {
        console.error(err);
        return;
    }

    cc.getImages(function(err, images) {
        if (err) {
            console.log(err);
            return;
        }

        var flavor = _.findWhere(flavors, { name: 'm1.small' });

        var image = _.findWhere(images, { name: 'ubuntu14.04' });

        var userData = '#!/bin/sh \n';
        userData += 'echo "Hello World.  The time is now $(date -R)!" | tee /root/output.txt \n';

        var userData64 = new Buffer(userData).toString("base64");

        cc.createServer({
            name: 'patrick_client',
            image: image,
            flavor: flavor,
            networks: [{ uuid: 'f3411c78-f02a-4556-9171-4e9e5b102b20' }],
            cloudConfig: userData64,
            securityGroups: [{ name: 'default' }],
            keyname: 'op-key'
        }, handleServerResponse);

    });

});

過(guò)程雖然比較簡(jiǎn)單,但是參數(shù)比較坑座哩,比如user_data的參數(shù)映射為了cloudConfig

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末徒扶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子根穷,更是在濱河造成了極大的恐慌姜骡,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屿良,死亡現(xiàn)場(chǎng)離奇詭異圈澈,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)尘惧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)康栈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人喷橙,你說(shuō)我怎么就攤上這事啥么。” “怎么了贰逾?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵悬荣,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我疙剑,道長(zhǎng)氯迂,這世上最難降的妖魔是什么践叠? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮嚼蚀,結(jié)果婚禮上禁灼,老公的妹妹穿的比我還像新娘。我一直安慰自己轿曙,他們只是感情好匾二,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著拳芙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪皮璧。 梳的紋絲不亂的頭發(fā)上舟扎,一...
    開(kāi)封第一講書(shū)人閱讀 49,816評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音悴务,去河邊找鬼睹限。 笑死,一個(gè)胖子當(dāng)著我的面吹牛讯檐,可吹牛的內(nèi)容都是我干的羡疗。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼别洪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼叨恨!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起挖垛,我...
    開(kāi)封第一講書(shū)人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤痒钝,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后痢毒,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體送矩,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年哪替,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了栋荸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凭舶,死狀恐怖晌块,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情库快,我是刑警寧澤摸袁,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站义屏,受9級(jí)特大地震影響靠汁,放射性物質(zhì)發(fā)生泄漏蜂大。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一蝶怔、第九天 我趴在偏房一處隱蔽的房頂上張望奶浦。 院中可真熱鬧,春花似錦踢星、人聲如沸澳叉。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)成洗。三九已至,卻和暖如春藏否,著一層夾襖步出監(jiān)牢的瞬間瓶殃,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工副签, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留遥椿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓淆储,卻偏偏與公主長(zhǎng)得像冠场,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子本砰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Openstack Mitaka安裝部署教程 一碴裙、實(shí)驗(yàn)環(huán)境: 系統(tǒng):centos7.2-minimal 網(wǎng)絡(luò):管理...
    指間_流年閱讀 2,187評(píng)論 0 0
  • Nova Nova,即計(jì)算服務(wù)灌具,是OpenStack計(jì)算的彈性控制器青团。Nova可以說(shuō)是整個(gè)云平臺(tái)最重要的組件,Op...
    邵勝奧閱讀 4,142評(píng)論 0 8
  • 第一章 OpenStack基礎(chǔ) OpenStack管理的資源及提供的服務(wù)OpenStack做為一個(gè)操作系統(tǒng)咖楣,...
    sgt_tiger閱讀 12,894評(píng)論 4 72
  • OpenStack簡(jiǎn)介 OpenStack既是一個(gè)社區(qū)督笆,也是一個(gè)項(xiàng)目和一個(gè)開(kāi)源軟件,它提供了一個(gè)部署云的操作平臺(tái)或...
    邵勝奧閱讀 17,574評(píng)論 0 3
  • 施定柔的《瀝川往事》诱贿,讓我回想起很多人和事娃肿,它們卻有本質(zhì)的區(qū)別。現(xiàn)實(shí)生活中珠十,縱使我翻山越嶺料扰,也不能覓得王瀝川那樣的...
    魚(yú)之白閱讀 617評(píng)論 3 13