> -----Original Message----- > From: Rohit Yadav [mailto:rohit.ya...@citrix.com] > Sent: Wednesday, October 31, 2012 10:45 PM > To: cloudstack-dev@incubator.apache.org > Subject: Re: CLI for CloudStack: cloudmonkey > > > 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.
It works me, but as I said before, we'd better add auto completion for api parameter. > > -- > 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