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

Reply via email to