Search

Lib.rs

› Email
#email-domain #vps #hosting #domain

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

by Tait Hoyem

  • Install
  • API reference
  • Repository (git.tait.tech)

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

#382 in Email

22 downloads per month

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

  • Support me on librapay.

Dependencies

~9–12MB
~226K SLoC

  • chrono+serde
  • clap+env+derive
  • envy
  • getset
  • hex
  • hmac
  • lunanode_macros
  • parse-display-derive 0.6
  • serde+derive
  • serde_json
  • serde_with 1.0
  • sha2
  • ureq 2.5+json
  • uuid+serde
Related: lunanode_macros
See also: minion-cli, pict-rs, sq, aws-sdk-amplify, kinetics, mail-send, mailjet_api_wrapper, resend-rs, postmark, mailgun-rs, mailchecker

Lib.rs is an unofficial list of Rust/Cargo crates, created by kornelski. It contains data from multiple sources, including heuristics, and manually curated data. Content of this page is not necessarily endorsed by the authors of the crate. This site is not affiliated with nor endorsed by the Rust Project. If something is missing or incorrect, please file a bug.