On 01-Nov-2012, at 4:40 AM, Edison Su <edison...@citrix.com> wrote: > Never mind, this stuff can be done in python. Seems we just need to override > completedefault in cmd, then get parameters for the API from the python files > generated by marvin.
Yes, we're overriding completedefault on cmd.Cmd. Please let me know if it won't work for you, probably it won't if you've incorrect readline.parse_and_bind for your environment. -- Rohit > >> -----Original Message----- >> From: Frank Zhang [mailto:frank.zh...@citrix.com] >> Sent: Wednesday, October 31, 2012 2:51 PM >> To: cloudstack-dev@incubator.apache.org >> Subject: RE: CLI for CloudStack: cloudmonkey >> >> Then you cite a wrong example in your former mail. You stated: >> >>>>> Seems doesn't support auto-completion for api parameters? >>>>> >>>>> 🙉 cloudmonkey> api listUsers >> >> This is running in cloudmonkey's terminal, what xe does is in native bash >> terminal. >> if you want native command line, bash-auto-completion is your friend. But >> my reply is for your former mail which refers to cloudmonkey's terminal. >> >>> -----Original Message----- >>> From: Edison Su [mailto:edison...@citrix.com] >>> Sent: Wednesday, October 31, 2012 2:46 PM >>> To: cloudstack-dev@incubator.apache.org >>> Subject: RE: CLI for CloudStack: cloudmonkey >>> >>> 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