> -----Original Message----- > From: Rohit Yadav [mailto:rohit.ya...@citrix.com] > Sent: Thursday, November 01, 2012 11:45 AM > To: cloudstack-dev@incubator.apache.org > Subject: RE: CLI for CloudStack: cloudmonkey > > Hi Chip, please go ahead if we can fix the http/s issue. The connection is > based on marvin, I'm sure using CLI we'll find out more bugs and fix anything > in marvin thereby help maintain marvin->tests and CLI. > Please hack that up on tools/marvin/marvin/cloudstackConnection.py > > Edison, yes I'm working on the completedefault, I've figured a solution to the > parsing and tabbing issue to show params for any api and added more verbs > to the grammar like deploy, start etc. > In the new approach doc strings and params needed for an api are fetched > and cached in the class locally to speed up the loading process. > Till it gets committed, cloudmonkey (now) will keep telling the user what > params they are missing until it gets all the required ones.
Great! Thanks for your awesome CLI, people will like it. > > One more thing, for people who may not have unicode support the prompt > may appear weird and history search (up, down ) can mess up the visuals. For > example on Mac it appears as a colorful emoji, but I found that it looks weird > on other platforms. Will probably remove it, or the user can custom set their > prompt, using: set prompt myprompt> > > Regards. > PS. the set command is full of (fun :) hacks because of funtional/generic > programming, it basically can set any attribute on the class, so one can do > something like creating something (var, func). For example set ruler # (so > instead of - you will have a # separator) > > ________________________________________ > From: Chip Childers [chip.child...@sungard.com] > Sent: Thursday, November 01, 2012 11:15 PM > To: cloudstack-dev@incubator.apache.org > Subject: Re: CLI for CloudStack: cloudmonkey > > 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=c > > ommit;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