# `lunanode` This is an API to work with the LunaNode's OpenStack-compatible [citation needed] API. This crate currently covers only the most basic functionality from the Lunanode API. Currently 43/98 (44%) API calls. If you'd like to contribute additional functionality, please feel free to make an MR. * VM [8/21] * List [X] * Start [X] * Stop [X] * Reboot [X] * Diskswap [ ] * Rescue [ ] * Shelve [ ] * Unshelve [ ] * Delete [ ] * Info [X] * Reimage [ ] * Resize [ ] * VNC [ ] * IP [1/3] * Floaitng IP Add [ ] * Floating IP Delete [ ] * IP List [X] * IP Add [X] * IP Delete [X] * Security group Add [ ] * Security group Delete [ ] * Image [4/7] * Fetch [ ] * List [X] * Details [X] * Delete [X] * Replicate [X] * Rename [ ] * Retrieve [ ] * Volume [1/12] * Create [ ] * List [X] * Info [ ] * Attach [ ] * Detach [ ] * Extend [ ] * Rename [ ] * Delete [ ] * Snapshot [0/4] * Create [ ] * List [ ] * Replicate [ ] * Delete [ ] * Floating IP [1/3] * List [X] * Add [ ] * Delete [ ] * Network [1/3] * List [X] * Add [ ] * Delete [ ] * Security Group [0/7] * List [ ] * Create [ ] * Delete [ ] * Rename [ ] * Rule List [ ] * Rule Insert [ ] * Rule Delete [ ] * Script [0/5] * List [ ] * Get [ ] * Create [ ] * Update [ ] * Delete [ ] * SSH Key [1/3] * List [X] * Add [ ] * Remove [ ] * Plan [1/1] * List [X] * Region [1/1] * List [X] * Monitor [3/10] * Check [2/4] * List [X] * Types [X] * Add [ ] * Remove [ ] * Contact [1/4] * List [X] * Add [ ] * Remove [ ] * Alert [0/3] * List [ ] * Add [ ] * Remove [ ] * Email [14/14] * Usage [X] * Domain [5/5] * List [X] * Add [X] * Remove [X] * DKIM [2/2] * Set [X] * Unset [X] * User [4/4] * List [X] * Add [X] * Remove [X] * Set Password [X] * Alias [3/3] * List [X] * Add [X] * Remove [X] * DNS [9/10] * Zone [3/3] * List [X] * Add [X] * Remove [X] * Record [3/3] * List [X] * Add [X] * Remove [X] * Dyn [3/4] * List [X] * Add [X] * Update [ ] * Remove [X] * Billing [1/1] * Credit [X] ## Installation `cargo install lunanode` ## API Keys Add the `LUNANODE_API_KEY`, `LUNANODE_KEY_ID` and `LUNANODE_API_PARTIALKEY` (the first 64 chars of `LUNANODE_API_KEY`) to your environment variables. Without these variables set, the tool will not run. You can also specify the keys manually through command-line arguments. ## Usage See `lunanode help` screen. Available subcommands: * `billing` * `dns` * `dyn` * `floating` (for LunaNode's floating IP system) * `image` * `network` * `record` (DNS) * `ssh-key` * `vm` * `volume` * `zone` Note that right now, only getting data through the `list/` endpoints is supported. See section help for more details, i.e.: `lunanode image help` ## TODO (looking for contributors) * [ ] Simplify code so there is less boilerplate. In particular, writing out every enum variant is pretty annoying when I need the same info out of them either way. * [ ] Tests! * [ ] Create more detailed documentation. `#[deny(missing_docs)]` is on, but some of the decisions in the code aren't explained very well. * [ ] Cover EVERY API endpoint. * [ ] Stricter typing. Certain attributes, even though they are recieved as Strings, should really be some kind of `enum`. Make every non-String type some kind of enum. * [ ] UUIDs should be UUID types and not string. The only library I could find to do this, Uuid, seems to serialize them without the dashes, which screws up Lunanode... annoyingly. * [ ] Subnets should be more strictly types. They should always be an IP/subnet combo as two fields (std::net::Ipv4Addr, i32(0..32)). * [ ] Automatically create IDs from names, or other identifiying info instead of using the RESP API's id system. * For example: `email user add tait@tait.tech` should automatically fetch the domain ID required to make this call normally: `email user add DOMAIN_ID tait@tait.tech`. * Another example: `vm shutdown my_webserver` would automatically exapnd to find the VM with the name my_webserver and have it shutdown expanding the name into the UUID: `vm shutdown ffff-ffff-ffff-ffffffffffffffff`. ## Support This Project * [Support me on librapay](https://liberapay.com/tait/).