#domain #hosting #open-stack #cli-tool #networking #vps

app lunanode

Tired of using a web interface for your VPS, Email, and domain provider? Check out this tool! It's a CLI tool for Lunanode: A Canadian VPS hosting company

5 releases

0.1.4 Dec 4, 2022
0.1.3 Dec 4, 2022
0.1.2 Dec 4, 2022
0.1.1 Dec 4, 2022
0.1.0 Oct 9, 2022

#114 in Email

AGPL-3.0-only

84KB
1K SLoC

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

Dependencies

~11MB
~237K SLoC