jclouds_jclouds的命令行界面
jclouds
序幕
我使用和為jclouds貢獻了一年多的時間。 到目前為止,我已經在很多領域廣泛使用了它,尤其是在Fuse生態系統中 。 它的強大之處在于它缺少一件事,該工具可用于管理jclouds也提供訪問權限的任何云提供商。 類似于EC2命令之類的工具,但具有jclouds的涼爽性。 一個通用的工具,通過它您可以管理EC2,Rackspace,Opesntack,CloudStack…為其命名。
我真的很高興,現在有了這樣的工具,并且它的第一個版本即將發布。
因此,這篇文章是對新的jclouds cli的介紹,它有兩種形式:
一點歷史
作為一名Karaf提交者,我圍繞jclouds做的第一件事就是致力于其OSGi支持。 第二件事是為Apache Karaf進行jclouds集成。 因此,我從事了一個項目,該項目使在Karaf上安裝jclouds變得非常容易,并在blob存儲周圍添加了第一個基本命令,并且Jclouds Karaf項目開始形成。 同時,我的朋友和同事Guillaume Nodet也開始了類似的工作,他為Jclouds Karaf做出了貢獻。 該項目現在支持大多數jclouds操作,并提供了豐富的完成支持,這使其真正快速且易于使用。
當然,這個集成項目主要針對的是熟悉OSGi和Apache Karaf的人 ,不能像我在序言中夢到的那樣被視為通用工具。
幾個月前, Andrew Bayer開始考慮構建通用jclouds cli。 然后,這讓我大吃一驚 :“ 我們為什么不重用在Jclouds Karaf上所做的工作來構建通用的cli? ”
關于Apache Karaf的一大優點是,它易于品牌化,并且由于其模塊化的基礎,您可以輕松地添加/刪除位以創建自己的發行版。 最重要的是,它允許您發現和使用OSGi之外的命令。
因此,創建一個量身定制的Karaf發行版(帶有“ 開箱即用 ”的jclouds集成)似乎是一個好主意,任何人都可以使用而無需了解Karaf,無論是作為交互式外殼還是cli。 這里是: Jclouds CLI 。
Jclouds CLI入門
您可以從源代碼構建cli,也可以下載tar球。 提取后,您會發現一個類似以下的結構:
bin文件夾包含兩個腳本:
zip發行版為Windows提供了等效的bat文件。
讓我們從jclouds腳本開始。 該腳本有兩個參數,多個選項和參數。 一般用法是:
./jclouds [類別] [操作] [選項] [參數]
- 類別:要使用的命令類型。 例如節點,組,映像,硬件,映像等。
- 動作:對類別執行的動作。 例如:列出,創建,銷毀,運行腳本,信息等。
無論是計算服務還是blobstore操作,所有操作都將需要提供程序或api以及該提供程序/ api的有效憑據。 所有這些都可以指定為命令的選項。 例如,要列出Amazon EC2上的所有正在運行的節點:
/jclouds node list --provider aws-ec2 --identity [my identity] --credential [my credential] --add-option [some jclouds options]對于api,您還需要指定端點,例如,對Cloudstack的相同操作可以是:
./jclouds node list --api cloudstack --identity [my identity] --credential [my credential] --endpoint http://localhost:8080/client/api當然,您可能不想一次又一次地指定相同的選項。 在這種情況下,您可以僅將它們指定為環境變量。 變量名稱始終使用大寫字母,并分別以JCLOUDS_COMPUTE_或JCLOUDS_BLOBSTORE_開頭 ,分別用于計算服務和blobstore操作。 因此, –provider選項將與JCLOUDS_COMPUTE_PROVIDER用于計算服務,而JCLOUDS_BLOBSTORE_PROVIDER用于blob存儲。
下圖顯示了用于訪問EC2的環境設置中cli的示例用法。 這些命令在EC2上創建3個節點,然后銷毀所有節點。
配置的環境變量是:
- JCLOUDS_COMPUTE_PROVIDER aws-ec2
- JCLOUDS_COMPUTE_IDENITY ????
- JCLOUDS_COMPUTE_CREDENTIAL ???
當使用jclouds腳本時,默認情況下將使用jclouds支持的所有提供程序。 您可以通過將自定義jar放在系統文件夾下(最好使用類似目錄結構的Maven)來添加自定義提供程序和api 。
使用交互式外殼
jclouds cli的第二種形式是交互式shell。 交互式外殼以類似的方式工作,但是它還提供了其他功能:
- 服務可重用性
- 服務創建一次
- 代碼完成
- 完成命令
- 模塊化
- 允許您僅安裝所需的東西。
- 可擴展的
- 您可以添加自己的命令。
在上面的示例中,我們為EC2創建了可重用服務,然后執行了一個節點列表,該列表顯示了我們在上一個示例中創建和銷毀的節點。
將交互式外殼與多個提供程序或API結合使用
交互式外殼將允許您使用不同的配置參數,帳戶等為多個提供程序和api注冊計算服務,甚至為同一提供程序或api注冊多個服務。
上圖顯示了如何使用不同的配置參數為同一提供者創建多個服務。 它還顯示了如何指定每種情況下使用的服務。 再次注意,在此示例中,未傳遞標識和提供者,但是將其作為環境變量提供。
交互模式的模塊化性質
如上所述,交互式外殼也是模塊化的,允許您在運行時添加/刪除模塊。 模塊可以支持提供程序或api,但是可以是您可能需要的任何擴展類型。
要查看可以在交互模式下使用的可用提供程序和api的列表,可以使用features:list和features:install命令。 在下面的示例中,我們列出了“ openstack ”的功能和grep,然后安裝了jclouds openstack-nova api。 然后,我們為其創建服務,并在我們的Openstack中列出節點。
配置命令輸出
最初,命令輸出是根據最常見的云提供程序設計和格式化的。 但是,輸出并非對所有提供者都是最佳的(不同的寬度等)。 此外,不同的用戶需要顯示不同的內容。
為了解決該問題,cli使用類似表的輸出作為命令,并具有可自動調整的列大小,以最適合命令的輸出。 命令的輸出也是完全可配置的。
每個表實例都將顯示數據作為代表表行的集合進行饋送。 列標題是從配置文件中讀取的。 使用JSR-233腳本表達式(默認情況下,它使用groovy)計算每個單元格的實際值,這些表達式適用于每一行和每一列。 最后,該表支持按列排序。
硬件列表命令的示例配置可以如下所示:
#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命令將產生以下輸出:
我們可以修改上面的配置并添加其他列,該列將顯示分配給當前硬件配置文件的卷。 為此,我們需要簡要了解一下jclouds硬件對象的外觀:
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();}因此,為了獲得所有卷的大小和卷的類型,我們可以在硬件對象上使用以下表達式: 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上產生以下輸出:
您可以在github上找到該項目: 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
jclouds
總結
以上是生活随笔為你收集整理的jclouds_jclouds的命令行界面的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (tar.gz linux)
- 下一篇: 用于从文件读取/写入字符串的新JDK 1