Welcome to the new^wold world.
Set your PATH to include the bin
directory of this repo as the first
instance.
brother ~$ grep brother.*PATH .bashrc
export PATH="/home/brother/git/other/gleshys/bin:$PATH"
And then execute gleshys start
to login. If you do not provide any
flags the login will prompt you to pick an organization and project.
You can logout by executing gleshys session-destroy
, this will also
wipe on disk information about username, api access key, active
organization and active project. If you do not worry about logging out
the GleSYS API still has a timeout that will invalidate your access
key.
The GleShYS settings file is found by validating in this particular order.
- A file provided on the command line
- environment variable GLESHYSSETTINGS
- ~/.config/gleshys.cfg
- A temporary file created at login time in TMPDIR (eg. /tmp). A
successful login will keep the apikey stored in this file. Use
gleshys-session-destroy
to invalidate the key and remove the settings file.
TODO / NOTE: Number 4 was working at some point but doesn't currently. Use one of the others.
To avoid having to login, an API key can be obtained via the web
interface at https://cloud.glesys.com. This key has no timeout and as
long as the config file is provided (or you use the standard file) the
commands will just continue to work. Uee with care. gleshys session-destroy
will wipe all these settings regardless of what login
mechanism was used.
As a first bare minimum goal I want to have a bunch of binaries that can be installed in your PATH and give you easy access to command line tools for interacting with the API and the services behind it.
For this to work there are a couple of important must haves with login, configuration persistence and the likes.
As a related challenge I want the dependency list to be small.
-
bash It uses bash specifics and will not be portable to other shell types. I will use shellcheck and honour readability before cool shell syntax.
-
curl The GleSYS API is accessible via HTTPs. Curl is a widely used application to interact with such services.
-
jq The GleSYS API can be accessed from your application in numerous ways. I've opted for json and will use jq extensivly. Parsing XML would have meant something like XML Starlet. Choose your poison.
-
coreutils Some commands provided by coreutils are in use. Should pretty much never pose a problem on a system having bash already.
See also the TODO section below and the script
bin/gleshys-project-status
.
-
api
- maintenance
- serviceinfo
- listfunctions
-
archive
- covered by
bin/gleshys-archive
- cloak passwords, they are managed via -p command line flag and thus public for the machine.
- covered by
-
customer
- [!] customer/listprojects
-
domain
-
email
-
filestorage
- covered by
bin/gleshys-file-storage
- Need to settle the output. Possibly add an interactive mode.
- covered by
-
invoice
- list
-
ip
- covered by
bin/gleshys-ip
- covered by
-
loadbalancer
-
network
- covered by
bin/gleshys-network
- covered by
-
networkadapter
-
objectstorage
- covered by
bin/gleshys-object-storage
[ ] initial bucket need to be addressed, it's not returned as response to creteinstance statement.
- covered by
-
project
- delete
- rename
-
server
- server/list
- server/templates
- server/create
- TODO. -u for kvm is not implemented, provide a correctly formatted JSON string - or use the interactive mode by not using the -u switch at all.
- server/destroy
- [!] server/allowedarguments
- server/backup
- Revisit this when server/edit is done/can handle backups for KVM.
- server/console
- Support exposing local VNC details?
- server/details
- server/reboot
- Not applicable, covered by server/stop with type reboot.
- server/start
- server/status
- TODO need formatting and input handling. Just dumps the json for now.
- server/stop
- server/clone
- server/edit
- server/costs
- server/estimatedcost
- server/createfrombackup
- server/listbackups
- server/addiso
- server/listiso
- server/mountiso
- server/networkadapters
- server/previewcloudconfig
- server/resetpassword
- Only for OpenVZ.
- server/resourceusage
- Add helper
gleshys server has key
to check if server exists in project. - server/limits
- Only for OpenVZ.
- server/resetlimit
- Only for OpenVZ.
-
sshkey
- This feature is obsolete.
-
transaction
-
user
- [!] user/login
- [!] user/logout
- [!] user/listorganizations
-
vpn
-
covered by
bin/gleshys-vpn
-
! Are touched in some way during the process.
-
x These are considered 'done' by some definition. See further notes.
This is stuff that has popped up during development. There are also
som TODO comments sprinkled in the code files, use git grep '# TODO'
to find these. Some of them overlap this list.
The script bin/gleshys-project-status
will list all public endpoints
that remain to implement in some capacity. Do however note that the
list will not guarantee that omitted endpoints are fully implemented -
it just tells you that they are in use in some capacity.
- check depedencies
- login
- a
session-restart
to check if the apikey provided is a permanent or not...or if the session is still valid. - add a common way to find settingsfile if no one was provided, will show as a login prompt and be seemless for the user. if no GLESHYSSETTINGS and no ~/.config... create a disposable settingsfile and be vocal about it. If the tool created the file it can also remove it. Probably a good idea to check if executed as interactive or not....
- a
- bash completion support
- do we need a INPUTRC for readline?
- add fault tolerance and internals for curl-json as a start it would be nice if it piped a !200 to jq and then exited with error code from curl. current process pretty much forces the user to never ever fail in the input. or forces the script to do input validation (and that require knowledge about acceptable inputs....which is hard)
- Impove information extraction for object storage.
- Does object storage call the identifier "key" or "id". Minor clean up.
- Use shellspec?
- Propose to expose the session timeout timestamp in user/details
- Rewrite
bin/gleshys-project-status
to useapi/listfunctions
? -
gleshys ip info 1.1.1.1
will return jq error if IP is not owned by project. - The usage of
server/allowedarguments
is spread all over the server script. Need an overhaul. - man pages for all commands.
- Add
--max-time
tocurl-json
? - At login store a cache about all available organizations to speed up project selection. If pick-project is requested without organization maybe it should act nicer by showing all projects to choose from. Or use the pick-organization internal just as login does.
This project is distributed free using the MIT license as approved by the OSI. This information is also stated in all applicable files in the project.
The license text can be found in the file LICENSE or at the OSI web pages.
There will be some project page somewhere some day.
If some dependency is not aligned the version check can be
bypassed... when that feature is built.
See gleshys-dep-check
for notes.