Xenserver xe cli works great, and it uses bash auto completion. I don't see any difference between xe cli and cloudstack cli from the auto completion point view. If it can work for ocaml, it should work for python. If there are python library can get it done, that's fine.
> -----Original Message----- > From: Frank Zhang [mailto:frank.zh...@citrix.com] > Sent: Wednesday, October 31, 2012 2:37 PM > To: cloudstack-dev@incubator.apache.org > Subject: RE: CLI for CloudStack: cloudmonkey > > No. I don't think so > bash auto completion is not for this purpose. You cannot run it in your > terminal as you grab the stdin by readline. > Bash-auto-completion essentially using compgen and several built-in array > must run in native bash terminal, otherwise you have to complexly redirect > user input from your terminal to a fake terminal and parse the output. > I am sure there must be some python library supporting auto-completion in > own terminal, no needs to make your hands dirty with the obscured bash- > auto-completion > > > -----Original Message----- > > From: Edison Su [mailto:edison...@citrix.com] > > Sent: Wednesday, October 31, 2012 2:25 PM > > To: cloudstack-dev@incubator.apache.org > > Subject: RE: CLI for CloudStack: cloudmonkey > > > > For a better auto completion support, you may take a look at bash auto > > completion(http://info2html.sourceforge.net/cgi-bin/info2html- > > demo/info2html?%28bash.info.gz%29Programmable%2520Completion), > and > > there is a great example written by xenserver guys: > > https://github.com/xen-org/xen-api/tree/master/ocaml/xe-cli > > > > > -----Original Message----- > > > From: Rohit Yadav [mailto:rohit.ya...@citrix.com] > > > Sent: Wednesday, October 31, 2012 12:27 PM > > > To: cloudstack-dev@incubator.apache.org > > > Subject: RE: CLI for CloudStack: cloudmonkey > > > > > > I did an autocompletion fix for Mac OSX (10.8 in my case, you have > > > to have > > > readline) and it works for me. > > > > > > Are you using Windows or Linux, I have n't tested on Linux/Windows? > > > > > > Check following code for your os? > > > # Fix autocompletion issue > > > if sys.platform == "darwin": > > > readline.parse_and_bind("bind ^I rl_complete") > > > else: > > > readline.parse_and_bind("tab: complete") > > > > > > Yes, help/doc and completion for parameters and parsing input is > > > tricky but I'm working on it, any help welcome! > > > > > > ________________________________________ > > > From: Edison Su [edison...@citrix.com] > > > Sent: Thursday, November 01, 2012 12:25 AM > > > To: cloudstack-dev@incubator.apache.org > > > Subject: RE: CLI for CloudStack: cloudmonkey > > > > > > Seems doesn't support auto-completion for api parameters? > > > > > > 🙉 cloudmonkey> api listUsers > > > > > > The ideal cli should list all the parameter names for listUsers api, > > > if I type "tab" at the end of listUsers. > > > > -----Original Message----- > > > > From: Rohit Yadav [mailto:rohit.ya...@citrix.com] > > > > Sent: Wednesday, October 31, 2012 11:10 AM > > > > 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