incubator-cloudstack-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Frank Zhang <Frank.Zh...@citrix.com>
Subject RE: CLI for CloudStack: cloudmonkey
Date Wed, 31 Oct 2012 21:37:07 GMT
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.su@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.yadav@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.su@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.yadav@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
Mime
View raw message