Thanks Rohit, I will give it a try shortly.
-----Original Message----- From: Rohit Yadav [mailto:rohit.ya...@citrix.com] Sent: Wednesday, October 31, 2012 2:10 PM To: cloudstack-dev@incubator.apache.org Subject: CLI for CloudStack: cloudmonkey Hi, I was working on a CLI for cloudstack, it's based on Marvin (the neglected robot) and called cloudmonkey after our beloved mascot :D I've committed that on master, please review: https://git-wip-us.apache.org/repos/asf?p=incubator-cloudstack.git;a=commit;h=2ceaa3911e792dbeb6c40dfb70961008a01f7e3c Features: - it's a shell and also a terminal tool, accepts file redirection and pipes - scalable to find and run old and new APIs - intuitive grammar and verbs - autocompletion (functional hack) - shell execution using ! or shell - cfg support: user defined variables, like prompt, ruler, host, port etc. - history - colors (disable using set color false) - dynamic API loading and rule generation - leverages Marvin to get latest autogenerated APIs - emacs like shortcuts on prompt - uses apiKey and secretKey to interact with mgmt server - logs all client commands - PEP-8 compliant code FIXMEs: - Reverse search over history - Fix input and output processing It requires python and clint; pip install clint (or if you have to easy_install clint) mvn clean install -P developer cd tools/cli/cloudmonkey python cloudmonkey.py If you want to have the terminal tool installed; cd tools/cli python setup.py sdist cd dist pip install cloudmonkey-0.0.4.tar.gz (or easy_install etc.) You can do stuff like; cloudmonkey < file-with-commands, or cloudmonkey list Users, or as shell; (If you see unicode chars cloud and monkey below, yes they were put intentionally :) $ cloudmonkey ☁ Apache CloudStack CLI. Type help or ? to list commands. 🙉 cloudmonkey> set apiKey <your key here> 🙉 cloudmonkey> set secretKey <your key here> 🙉 cloudmonkey> <tab><tab> add api create delete disable enable help list quit remove set shell update 🙉 cloudmonkey> list <tab><tab> Accounts Alerts AsyncJobs Capabilities Capacity Clusters Configurations DiskOfferings DomainChildren Domains Events EventTypes FirewallRules Hosts HypervisorCapabilities Hypervisors InstanceGroups IpForwardingRules IsoPermissions Isos LBStickinessPolicies LoadBalancerRuleInstances LoadBalancerRules NetworkACLs NetworkDevice NetworkOfferings Networks NetworkServiceProviders OsCategories OsTypes PhysicalNetworks Pods PortForwardingRules PrivateGateways ProjectAccounts ProjectInvitations Projects PublicIpAddresses RemoteAccessVpns ResourceLimits Routers SecurityGroups ServiceOfferings SnapshotPolicies Snapshots SSHKeyPairs StaticRoutes StorageNetworkIpRange StoragePools SupportedNetworkServices Swifts SystemVms Tags TemplatePermissions Templates TrafficTypeImplementors TrafficTypes Users VirtualMachines VirtualRouterElements VlanIpRanges Volumes VPCOfferings VPCs VpnConnections VpnCustomerGateways VpnGateways VpnUsers Zones 🙉 cloudmonkey> list Users … 🙉 cloudmonkey> !ls # this give you a shell too and one can do things like 🙉 cloudmonkey> !for i in Users Account; do echo `cloudmonkey list $i | grep id`; done; Example commands to deploy a datacenter; (fill in dynamic ids etc.) create Zone dns1=8.8.8.8 internaldns1=10.147.28.6 name=Zone1 networktype=Basic create PhysicalNetwork name=test-network zoneid= add TrafficType traffictype=Guest physicalnetworkid= add TrafficType traffictype=Management physicalnetworkid= update PhysicalNetwork state=Enabled id= list NetworkServiceProviders name=VirtualRouter physicalNetworkId= list VirtualRouterElements nspid= api configureVirtualRouterElement enabled=true id= update NetworkServiceProvider state=Enabled id= list NetworkServiceProviders name=SecurityGroupProvider physicalNetworkId= update NetworkServiceProvider state=Enabled id= create Network zoneid= name=guestNetworkForBasicZone displaytext=guestNetworkForBasicZone networkofferingid= create Pod zoneid= name=Pod1 gateway=10.147.28.1 netmask=255.255.255.0 startip=10.147.28.220 endip=10.147.28.235 create VlanIpRange podid= networkid= gateway=10.147.28.1 netmask=255.255.255.0 startip=10.147.28.236 endip=10.147.28.250 forVirtualNetwork=false add Cluster zoneid= hypervisor=XenServer clustertype=CloudManaged podid= clustername=Cluster1 add Host zoneid= podid= clusterid= hypervisor=XenServer clustertype=CloudManaged username=root password=password url=http://10.147.28.60 create StoragePool zoneid= clusterid= name=NFS1 url=nfs://10.147.28.7/export/home/rohit/primary add SecondaryStorage zoneId= url=nfs://10.147.28.7/export/home/rohit/secondary update Zone allocationstate=Enabled id= After some stabilisation, I can put it on pypi so any user can just do pip install cloudmonkey to get the CLI. Regards. PS. Marvin the neglected robot and hipster cloudmonkey should rule the world :D