Rohit, Can I get the CLI only without going through the whole source code maven install? Is it part of any RPM?
Thanks ilya -----Original Message----- From: Rohit Yadav [mailto:rohit.ya...@citrix.com] Sent: Monday, November 05, 2012 11:35 AM To: cloudstack-dev@incubator.apache.org Subject: Re: CLI for CloudStack: cloudmonkey Checkout latest code. Few changes to share: - All lowercase now - Tab tab over verbs to see list of params for that api, example list users <tab><tab> - This needs improvement but help string, using --help: list user --help - Caching to speedup runtime - Color and Parsing fixes Last, I'm now able to get the doc strings for each attribute/param, will see this tomorrow. Need your help, just incase you want to contribute, these are the TODOs: - search over history - fix parsing - doc strings for parameters - testing for various kinds of apis (I'm able to deploy a zone with this, but needs testing) - unicode char monkey, used in prompt may mess up history searching and text display Regards. On 02-Nov-2012, at 4:58 AM, Edison Su <edison...@citrix.com> wrote: > > >> -----Original Message----- >> From: Rohit Yadav [mailto:rohit.ya...@citrix.com] >> Sent: Thursday, November 01, 2012 2:23 PM >> To: cloudstack-dev@incubator.apache.org >> Subject: RE: CLI for CloudStack: cloudmonkey >> >> After you install the tool, so that cloudmonkey is in your >> /usr/local/bin or in $PATH... >> >> Two ways; >> 1. As command line tool, on bash/zsh, use the BNF grammar; <command >> line tool >> name>:<separator>:<verb>:<separator>:<action>:<separator>:<params> >> <command line tool name>={'cloudmonkey'} <separator>={' '} >> <verb>={'list', 'create', 'delete', 'update'.... etc.} >> <action>={'Users'... etc.} <params>={'listall=#'... etc.} So; $ >> cloudmonkey list Users > > > Got it, thanks! > >> >> 2. file redirector: >> >> $ cat test-file: >> list Users >> list <some other action> >> <some verb> <some action> >> >> $ cloudmonkey < test-file >> >> Note, I'll change the actions (Users, VirtualMachine etc.) to >> lowercase (users, virtualmachine etc.) if that's okay? > > Please do, nobody wants to type extra keystroke, if it's not necessary. >> >> Regards. >> >> ________________________________________ >> From: Edison Su [edison...@citrix.com] >> Sent: Friday, November 02, 2012 1:55 AM >> To: cloudstack-dev@incubator.apache.org >> Subject: RE: CLI for CloudStack: cloudmonkey >> >> Oh, it reminds me that how to use the CLI on the bash command line? >> I think admin may want to call cloudstack API in a bash script, how >> can I do that? >> >>> -----Original Message----- >>> From: Marcus Sorensen [mailto:shadow...@gmail.com] >>> Sent: Thursday, November 01, 2012 1:11 PM >>> To: cloudstack-dev@incubator.apache.org >>> Subject: Re: CLI for CloudStack: cloudmonkey >>> >>> Yes, I look forward to using it instead of local curl calls on the >>> command line :-) >>> >>> On Thu, Nov 1, 2012 at 2:02 PM, Edison Su <edison...@citrix.com> wrote: >>>> >>>> >>>>> -----Original Message----- >>>>> From: Rohit Yadav [mailto:rohit.ya...@citrix.com] >>>>> Sent: Thursday, November 01, 2012 11:45 AM >>>>> To: cloudstack-dev@incubator.apache.org >>>>> Subject: RE: CLI for CloudStack: cloudmonkey >>>>> >>>>> Hi Chip, please go ahead if we can fix the http/s issue. The >>>>> connection is based on marvin, I'm sure using CLI we'll find out >>>>> more bugs and fix anything in marvin thereby help maintain >>>>> marvin->tests and >>> CLI. >>>>> Please hack that up on tools/marvin/marvin/cloudstackConnection.py >>>>> >>>>> Edison, yes I'm working on the completedefault, I've figured a >>>>> solution to the parsing and tabbing issue to show params for any >>>>> api and added more verbs to the grammar like deploy, start etc. >>>>> In the new approach doc strings and params needed for an api are >>>>> fetched and cached in the class locally to speed up the loading process. >>>>> Till it gets committed, cloudmonkey (now) will keep telling the >>>>> user what params they are missing until it gets all the required ones. >>>> >>>> Great! Thanks for your awesome CLI, people will like it. >>>> >>>>> >>>>> One more thing, for people who may not have unicode support the >>>>> prompt may appear weird and history search (up, down ) can mess up >>>>> the visuals. For example on Mac it appears as a colorful emoji, >>>>> but I found that it looks weird on other platforms. Will probably >>>>> remove it, or the user can custom set their prompt, using: set >>>>> prompt >>>>> myprompt> >>>>> >>>>> Regards. >>>>> PS. the set command is full of (fun :) hacks because of >>>>> funtional/generic programming, it basically can set any attribute >>>>> on the class, so one can do something like creating something >>>>> (var, func). For example set ruler # (so instead of - you will >>>>> have a # >>>>> separator) >>>>> >>>>> ________________________________________ >>>>> From: Chip Childers [chip.child...@sungard.com] >>>>> Sent: Thursday, November 01, 2012 11:15 PM >>>>> To: cloudstack-dev@incubator.apache.org >>>>> Subject: Re: CLI for CloudStack: cloudmonkey >>>>> >>>>> On Wed, Oct 31, 2012 at 2:10 PM, Rohit Yadav >>>>> <rohit.ya...@citrix.com> >>>>> wrote: >>>>>> 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.gi >>>>>> t; a=c ommit;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 >>>>> >>>>> Rohit, >>>>> >>>>> This is really really cool. It puts the "fun" in managing >>>>> instances from a command line. I've been testing it against a >>>>> production CloudStack environment, and it's working pretty well. >>>>> >>>>> If you don't mind, I might hack at the code a bit to fill in some >>>>> gaps that I'm seeing. First example is that it assumes http, >>>>> which doesn't work in a public deployment where the endpoint is over >>>>> https. >>>>> >>>>> -chip