Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Initially add an on-premise model (also known as the infra source model) #1

Merged
merged 1 commit into from
Sep 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file added data/.keep
Empty file.
3 changes: 3 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module github.com/cloud-barista/cm-model

go 1.23.0
Empty file added infra/.keep
Empty file.
64 changes: 64 additions & 0 deletions infra/onprem/infra.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package onprem

type OnPremInfra struct {
Network NetworkProperty `json:"network,omitempty"`
Servers []ServerProperty `json:"servers" validate:"required"`
// TODO: Add other fields
}

type ServerProperty struct {
Hostname string `json:"hostname"`
CPU CpuProperty `json:"cpu"`
Memory MemoryProperty `json:"memory"`
RootDisk DiskProperty `json:"rootDisk"`
DataDisks []DiskProperty `json:"dataDisks,omitempty"`
Interfaces []NetworkInterfaceProperty `json:"interfaces"`
OS OsProperty `json:"os"`
}

type CpuProperty struct {
Architecture string `json:"architecture" example:"x86_64"`
Cpus uint32 `json:"cpus" validate:"required" example:"2"` // Number of physical CPUs (sockets)
Cores uint32 `json:"cores" validate:"required" example:"18"` // Number of physical cores per CPU
Threads uint32 `json:"threads" validate:"required" example:"36"` // Number of logical CPUs (threads) per CPU with hyper-threading enabled
MaxSpeed uint32 `json:"maxSpeed,omitempty" example:"3.6"` // Maximum speed in GHz
Vendor string `json:"vendor,omitempty" example:"GenuineIntel"`
Model string `json:"model,omitempty" example:"Intel(R) Xeon(R) Gold 6140 CPU @ 2.30GHz"`
}

type MemoryProperty struct {
Type string `json:"type" validate:"required" example:"DDR4"`
TotalSize uint64 `json:"totalSize" validate:"required" example:"128"` // Unit GiB
Available uint64 `json:"available,omitempty"` // Unit GiB
Used uint64 `json:"used,omitempty"` // Unit GiB
// TODO: Add or update fields
}

type DiskProperty struct { // note: reference command `df -h`
Label string `json:"label" validate:"required"`
Type string `json:"type" validate:"required" example:"SSD"` // SSD, HDD
TotalSize uint64 `json:"totalSize" validate:"required" example:"1024"` // Unit GiB
Available uint64 `json:"available,omitempty"` // Unit GiB
Used uint64 `json:"used,omitempty"` // Unit GiB
}

type NetworkInterfaceProperty struct { // note: reference command `ifconfig`
MacAddress string `json:"macAddress,omitempty"`
IpAddress string `json:"ipAddress" validate:"required"`
Mtu int `json:"mtu,omitempty"` // Maximum Transmission Unit (MTU) in bytes
}

type OsProperty struct { // note: reference command `cat /etc/os-release`
Version string `json:"version" validate:"required" example:"22.04.3 LTS (Jammy Jellyfish)"` // Full version string
PrettyName string `json:"prettyName,omitempty" example:"Ubuntu 22.04.3 LTS"` // Pretty name
Name string `json:"name,omitempty" example:"Ubuntu"`
VersionID string `json:"versionId,omitempty" example:"22.04"`
VersionCodename string `json:"versionCodename,omitempty" example:"jammy"`
ID string `json:"id,omitempty" example:"ubuntu"`
IDLike string `json:"idLike,omitempty" example:"debian"`
}

type NetworkProperty struct { // note: referrence command `ip route`
Gateway string `json:"gateway,omitempty" example:"172.26.240.0/20"` // Gateway IP address
// TODO: Add or update fields
}
Empty file added sw/.keep
Empty file.