On Wed, Oct 31, 2012 at 2:10 PM, Rohit Yadav <rohit.ya...@citrix.com> wrote: > 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
Rohit, This is really really cool. It puts the "fun" in managing instances from a command line. I've been testing it against a production CloudStack environment, and it's working pretty well. If you don't mind, I might hack at the code a bit to fill in some gaps that I'm seeing. First example is that it assumes http, which doesn't work in a public deployment where the endpoint is over https. -chip