jclouds的命令行界面
序幕
我使用和為jclouds貢獻(xiàn)了一年多的時(shí)間。 到目前為止,我已經(jīng)在很多領(lǐng)域廣泛使用了它,尤其是在Fuse生態(tài)系統(tǒng)中 。 它的強(qiáng)大之處在于它缺少一件事,該工具可用于管理jclouds也提供訪問(wèn)權(quán)限的任何云提供商。 類似于EC2命令之類的工具,但具有jclouds的涼爽性。 一個(gè)通用的工具,通過(guò)它您可以管理EC2,Rackspace,Opesntack,CloudStack…為其命名。
我真的很高興,現(xiàn)在有了這樣的工具,并且它的第一個(gè)版本即將發(fā)布。
因此,這篇文章是對(duì)新的jclouds cli的介紹,它有兩種形式:
一點(diǎn)歷史
作為一名Karaf提交者,我圍繞jclouds做的第一件事就是致力于其OSGi支持。 第二件事是為Apache Karaf進(jìn)行jclouds集成。 因此,我從事了一個(gè)項(xiàng)目,該項(xiàng)目使在Karaf上安裝jclouds變得非常容易,并在blob存儲(chǔ)周圍添加了第一個(gè)基本命令,并且Jclouds Karaf項(xiàng)目開始形成。 同時(shí),我的朋友和同事Guillaume Nodet也開始了類似的工作,他為Jclouds Karaf做出了貢獻(xiàn)。 該項(xiàng)目現(xiàn)在支持大多數(shù)jclouds操作,并提供了豐富的完成支持,這使其真正快速且易于使用。
當(dāng)然,這個(gè)集成項(xiàng)目主要針對(duì)的是熟悉OSGi和Apache Karaf并且不能被視為通用工具的人員,就像我在序言中夢(mèng)想的那樣。
幾個(gè)月前, Andrew Bayer開始考慮構(gòu)建通用jclouds cli。 然后,這讓我大吃一驚 :“ 我們?yōu)槭裁床恢赜迷贘clouds Karaf上所做的工作來(lái)構(gòu)建通用的cli? ”
Apache Karaf的一大優(yōu)點(diǎn)是它易于品牌化,并且由于其模塊化的基礎(chǔ),您可以輕松地添加/刪除位以創(chuàng)建自己的發(fā)行版。 最重要的是,它允許您發(fā)現(xiàn)和使用OSGi之外的命令。
因此,創(chuàng)建一個(gè)量身定制的Karaf發(fā)行版是一個(gè)好主意,它具有“ 開箱即用 ”的jclouds集成,任何人都可以使用而無(wú)需了解Karaf,無(wú)論是作為交互式shell還是CLI。 這里是: Jclouds CLI 。
Jclouds CLI入門
您可以從源代碼構(gòu)建cli,也可以下載tar球。 提取后,您會(huì)發(fā)現(xiàn)一個(gè)類似以下的結(jié)構(gòu):
bin文件夾包含兩個(gè)腳本:
zip發(fā)行版為Windows提供了等效的bat文件。
讓我們從jclouds腳本開始。 該腳本有兩個(gè)參數(shù),多個(gè)選項(xiàng)和參數(shù)。 一般用法是:
./jclouds [類別] [操作] [選項(xiàng)] [參數(shù)]
- 類別:要使用的命令類型。 例如節(jié)點(diǎn),組,映像,硬件,映像等。
- 動(dòng)作:對(duì)類別執(zhí)行的動(dòng)作。 例如:列出,創(chuàng)建,銷毀,運(yùn)行腳本,信息等。
無(wú)論是計(jì)算服務(wù)還是Blobstore操作,所有操作都將需要提供程序或api以及該提供程序/ api的有效憑據(jù)。 所有這些都可以指定為命令的選項(xiàng)。 例如,要列出Amazon EC2上的所有正在運(yùn)行的節(jié)點(diǎn):
/jclouds node list --provider aws-ec2 --identity [my identity] --credential [my credential] --add-option [some jclouds options]對(duì)于api,您還需要指定端點(diǎn),例如,對(duì)Cloudstack的相同操作可以是:
./jclouds node list --api cloudstack --identity [my identity] --credential [my credential] --endpoint http://localhost:8080/client/api當(dāng)然,您可能不想一次又一次地指定相同的選項(xiàng)。 在這種情況下,您可以僅將它們指定為環(huán)境變量。 變量名稱始終使用大寫字母,并分別以JCLOUDS_COMPUTE_或JCLOUDS_BLOBSTORE_開頭 ,分別用于計(jì)算服務(wù)和blobstore操作。 因此–provider選項(xiàng)將與JCLOUDS_COMPUTE_PROVIDER用于計(jì)算服務(wù),而JCLOUDS_BLOBSTORE_PROVIDER用于blob存儲(chǔ)。
下圖顯示了用于訪問(wèn)EC2的環(huán)境設(shè)置中cli的示例用法。 這些命令在EC2上創(chuàng)建3個(gè)節(jié)點(diǎn),然后銷毀所有節(jié)點(diǎn)。
配置的環(huán)境變量是:
- JCLOUDS_COMPUTE_PROVIDER aws-ec2
- JCLOUDS_COMPUTE_IDENITY ????
- JCLOUDS_COMPUTE_CREDENTIAL ???
當(dāng)使用jclouds腳本時(shí),默認(rèn)情況下將使用jclouds支持的所有提供程序。 您可以通過(guò)將自定義jar放在系統(tǒng)文件夾下(最好使用類似目錄結(jié)構(gòu)的Maven)來(lái)添加自定義提供程序和api 。
使用交互式外殼
jclouds cli的第二種形式是交互式shell。 交互式外殼以類似的方式工作,但是它還提供了其他功能:
- 服務(wù)可重用性
- 服務(wù)創(chuàng)建一次
- 代碼完成
- 完成命令
- 模塊化
- 允許您僅安裝所需的東西。
- 可擴(kuò)展的
- 您可以添加自己的命令。
在上面的示例中,我們?yōu)镋C2創(chuàng)建了可重用的服務(wù),然后執(zhí)行了一個(gè)節(jié)點(diǎn)列表,該列表顯示了在上一個(gè)示例中創(chuàng)建并銷毀的節(jié)點(diǎn)。
將交互式外殼與多個(gè)提供程序或API結(jié)合使用
交互式外殼將允許您使用不同的配置參數(shù),帳戶等為多個(gè)提供程序和api注冊(cè)計(jì)算服務(wù),甚至為同一提供程序或api注冊(cè)多個(gè)服務(wù)。
上圖顯示了如何使用不同的配置參數(shù)為同一提供者創(chuàng)建多個(gè)服務(wù)。 它還顯示了如何指定每種情況下使用的服務(wù)。 再次注意,在此示例中,未傳遞標(biāo)識(shí)和提供者,但是將其作為環(huán)境變量提供。
交互模式的模塊化性質(zhì)
如上所述,交互式外殼也是模塊化的,允許您在運(yùn)行時(shí)添加/刪除模塊。 模塊可以支持提供程序或api,但是可以是您可能需要的任何擴(kuò)展類型。
要查看可以在交互模式下使用的可用提供程序和api的列表,可以使用features:list和features:install命令。 在下面的示例中,我們列出了“ openstack ”的功能和grep,然后安裝了jclouds openstack-nova api。 然后,我們?yōu)槠鋭?chuàng)建服務(wù)并列出我們的Openstack中的節(jié)點(diǎn)。
配置命令輸出
最初,命令輸出是根據(jù)最常見的云提供程序設(shè)計(jì)和格式化的。 但是,輸出并非對(duì)所有提供者都是最佳的(不同的寬度等)。 此外,不同的用戶需要顯示不同的內(nèi)容。
為了解決該問(wèn)題,cli使用了類似表的輸出作為命令,并具有可自動(dòng)調(diào)整的列大小,以最適合命令的輸出。 此外,命令的輸出是完全可配置的。
每個(gè)表實(shí)例均作為表示表行的集合提供顯示數(shù)據(jù)。 列標(biāo)題是從配置文件中讀取的。 使用JSR-233腳本表達(dá)式(默認(rèn)情況下,它使用groovy)計(jì)算每個(gè)單元格的實(shí)際值,這些表達(dá)式適用于每一行和每一列。 最后,該表支持按列排序。
硬件列表命令的示例配置可以如下所示:
#The column headers hardware.headers=[id];[ram];[cpu];[cores]#Groovy expressions for displaying id, ram, sum of (cores X speed) for each proceessor, sum of cores. hardware.expressions=hardware.id;hardware.ram;hardware.processors.sum{it.cores*it.speed};hardware.processors.sum{it.cores}#Cell alignments. We prefer numbers to be right aligned. hardware.alignments=left;right;right;right#Sort by the [cpu] column in descending order hardware.shortby=[cpu] hardware.ascending=true使用此配置,image list命令將產(chǎn)生以下輸出:
我們可以修改上面的配置并添加其他列,該列將顯示分配給當(dāng)前硬件配置文件的卷。 為此,我們需要簡(jiǎn)要了解一下jclouds硬件對(duì)象的外觀:
public interface Hardware extends ComputeMetadata { List<? extends Processor> getProcessors();int getRam();List<? extends Volume> getVolumes();Predicate<Image> supportsImage(); }public interface Volume {String getId();Type getType();Float getSize();String getDevice();boolean isDurable();boolean isBootDevice();}因此,為了獲取所有卷的大小和卷的類型,我們可以在硬件對(duì)象上使用以下表達(dá)式: hardware.volumes.collect {it.size +“ GB” + it.type} 。
更新后的配置如下所示:
#The column headers hardware.headers=[id];[ram];[cpu];[cores];[volumes]#Groovy expressions for displaying id, ram, sum of (cores X speed) for each proceessor, sum of cores. hardware.expressions=hardware.id;hardware.ram;hardware.processors.sum{it.cores*it.speed};hardware.processors.sum{it.cores};hardware.volumes.collect{it.size + "GB " + it.type}#Cell alignments. We prefer numbers to be right aligned. hardware.alignments=left;right;right;right;left#Sort by the [cpu] column in descending order hardware.shortby=[cpu] hardware.ascending=true新配置將在EC2上產(chǎn)生以下輸出:
您可以在github上找到該項(xiàng)目: https : //github.com/jclouds/jclouds-cli 。 或者,您可以直接在以下位置下載壓縮包: http : //repo1.maven.org/maven2/org/jclouds/cli/jclouds-cli/1.5.0/
翻譯自: https://www.javacodegeeks.com/2013/10/a-command-line-interface-for-jclouds.html
總結(jié)
以上是生活随笔為你收集整理的jclouds的命令行界面的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 初始化电脑请稍后(初始化电脑时)
- 下一篇: 流畅和稳定的API的Lambda