Project Description
The goal of this project is to create a lightweight multi-cloud metadata CLI for Public Cloud environments. There are cloud specific packages that exist but they all have different API and many are developed in Python which is quite heavy for cloud images, especially containers. Leveraging a compiled language will help with keeping the CLI lightweight.
Goal for this Hackweek
- A multi-cloud metadata package that works in all cloud frameworks (as support is added)
- Developed in Go to keep the package and dependencies lightweight
- Developed using Plugin Oriented Programming style to allow for easy inclusion of new Cloud Frameworks. Ideally with a simple config file (no new code).
Resources
- Go (https://go.dev/)
- jmespath (https://jmespath.org/)
- POP (https://pop-book.readthedocs.io/en/latest/)
- TBD
Looking for hackers with the skills:
This project is part of:
Hack Week 21
Activity
Comments
-
almost 2 years ago by seanmarlow | Reply
Unfortunately I will only have a couple days to work on this for Hackweek. Otherwise it would be nice to coordinate the project with anyone interested in joining. What I plan to get to is:
- Getting started with Golang
- "Psuedo" programming the basic concept in Python
- Put together yaml config files for the 3 major CSPs (Azure, AWS, GCP)
The idea is that there's hopefully no new code to add a csp. The config files would map attr names to a jmespath query such as:
metadata-url: http://169.254.169.254/metadata/instance?api-version=2021-02-01 private-ipv4-addrs: network.interface[].ipv4.ipAddress[].privateIpAddress private-ipv6-addrs: network.interface[].ipv6.ipAddress[].privateIpAddress private-ip-addrs: network.interface[].*.ipAddress[][].privateIpAddress region: compute.location
-
almost 2 years ago by seanmarlow | Reply
I think the challenge will be AWS as Azure and GCE both have ways to get the entire metadata dictionary with a single get request. Afaik AWS doesn't provide this functionality.
-
almost 2 years ago by seanmarlow | Reply
It gets a bit complex to query certain items such as the Azure image URN:
compute.storageProfile.imageReference.[publisher,offer,sku,version] | join(':', @)
And as above (after ipAddress) when you do a wildcard for some reason it adds an extra nested list to the next object:
network.interface[].*.ipAddress[][].privateIpAddress
Similar Projects
Rancher Upgrader - Upgrades your rancher install via helm, and communicates critical changes from release A to B. by rweir
[comment]: # (Please use the project descriptio...
A CLI for Harvester by mohamed.belgaied
[comment]: # Harvester does not officially come...
Gameboy emulator written in Go by mikeletux
[comment]: # (Please use the project descriptio...
terraform-provider-feilong by e_bischoff
Project Description
People need to test o...
Go zip updater: Appending new files to zip archive without decompressing the whole file by StarryWang
Project Description
Currently, Golang's `...
Mortgage Plan Analyzer by RMestre
Project Description
Many people face chal...
Package MONAI Machine Learning Models for Medical Applications by jordimassaguerpla
Project Description
MONAI Deploy aims to ...
A CLI for Harvester by mohamed.belgaied
[comment]: # Harvester does not officially come...
(Rust) Manage systems in NetBox using NetBox-Sync by chock
[comment]: # (Please use the project descriptio...
Rancher Upgrader - Upgrades your rancher install via helm, and communicates critical changes from release A to B. by rweir
[comment]: # (Please use the project descriptio...