Skip to content

Commit

Permalink
Merge pull request #1 from yunkon-kim/240909-16
Browse files Browse the repository at this point in the history
Initially add an on-premise model (also known as the infra source model)
  • Loading branch information
yunkon-kim authored Sep 9, 2024
2 parents 4ca4411 + 0c1a093 commit f044c9b
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 0 deletions.
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.

0 comments on commit f044c9b

Please sign in to comment.