Skip to content

Commit b88d39e

Browse files
authored
Pass device metadate as values instead of reading current config (#22)
1 parent 7403b8b commit b88d39e

File tree

13 files changed

+72
-69
lines changed

13 files changed

+72
-69
lines changed

README.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,31 @@ Result:
6565

6666
For each breakout also the correspondig ports entries are added.
6767

68+
### device_metadata
69+
70+
Example:
71+
72+
```yaml
73+
device_metadata:
74+
hwsku: Accton-AS7726-32X
75+
mac: aa:aa:aa:aa:aa:aa
76+
platform: x86_64-accton_as7726_32x-r0
77+
```
78+
79+
Result:
80+
81+
```json
82+
{
83+
"DEVICE_METADATA": {
84+
"localhost": {
85+
"hwsku": "Accton-AS7726-32X",
86+
"mac": "aa:aa:aa:aa:aa:aa",
87+
"platform": "x86_64-accton_as7726_32x-r0"
88+
}
89+
}
90+
}
91+
```
92+
6893
### docker_routing_config_mode
6994

7095
Can be one of `separated`, `split`, `split-unified`, `unified`.

cmd/generate.go

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,23 @@ var generateCmd = &cobra.Command{
1515
Use: "generate",
1616
Short: "Generate a config_db.json",
1717
Run: func(cmd *cobra.Command, args []string) {
18-
configDBFile, _ := cmd.Flags().GetString("config-db")
19-
configDBBytes, err := os.ReadFile(configDBFile)
18+
inputFile, _ := cmd.Flags().GetString("input-file")
19+
outputFile, _ := cmd.Flags().GetString("output-file")
20+
deviceDir, _ := cmd.Flags().GetString("device-dir")
21+
22+
inputBytes, err := os.ReadFile(inputFile)
2023
if err != nil {
21-
fmt.Printf("failed to read current config file, %v\n", err)
24+
fmt.Printf("failed to read input file, %v\n", err)
2225
os.Exit(1)
2326
}
2427

25-
currentConfig, err := configdb.UnmarshalConfigDB(configDBBytes)
28+
values, err := values.UnmarshalValues(inputBytes)
2629
if err != nil {
27-
fmt.Printf("failed to parse current config file, %v\n", err)
30+
fmt.Printf("failed to parse input file, %v\n", err)
2831
os.Exit(1)
2932
}
3033

31-
platformIdentifier := currentConfig.DeviceMetadata.Localhost.Platform
32-
deviceDir, _ := cmd.Flags().GetString("device-dir")
34+
platformIdentifier := values.DeviceMetadata.Platform
3335
platformFile := fmt.Sprintf("%s/%s/platform.json", deviceDir, platformIdentifier)
3436

3537
platformBytes, err := os.ReadFile(platformFile)
@@ -44,32 +46,18 @@ var generateCmd = &cobra.Command{
4446
os.Exit(1)
4547
}
4648

47-
inputFile, _ := cmd.Flags().GetString("input-file")
48-
inputBytes, err := os.ReadFile(inputFile)
49-
if err != nil {
50-
fmt.Printf("failed to read input file, %v\n", err)
51-
os.Exit(1)
52-
}
53-
54-
values, err := values.UnmarshalValues(inputBytes)
55-
if err != nil {
56-
fmt.Printf("failed to parse input file, %v\n", err)
57-
os.Exit(1)
58-
}
59-
60-
configDB, err := configdb.GenerateConfigDB(values, platform, currentConfig.DeviceMetadata)
49+
configDB, err := configdb.GenerateConfigDB(values, platform, values.DeviceMetadata)
6150
if err != nil {
6251
fmt.Printf("failed to generate config, %v\n", err)
6352
os.Exit(1)
6453
}
6554

66-
configDBBytes, err = json.MarshalIndent(configDB, "", " ")
55+
configDBBytes, err := json.MarshalIndent(configDB, "", " ")
6756
if err != nil {
6857
fmt.Printf("failed to serialize json, %v\n", err)
6958
os.Exit(1)
7059
}
7160

72-
outputFile, _ := cmd.Flags().GetString("output-file")
7361
err = os.WriteFile(outputFile, configDBBytes, 0644) //nolint:gosec
7462
if err != nil {
7563
fmt.Printf("failed to write file, %v", err)
@@ -84,5 +72,4 @@ func init() {
8472
generateCmd.Flags().StringP("input-file", "i", "sonic-config.yaml", "path to input file to generate the config_db.json from")
8573
generateCmd.Flags().StringP("output-file", "o", "config_db.json", "path to output file")
8674
generateCmd.Flags().String("device-dir", "/usr/share/sonic/device", "directory which holds all device-specific files")
87-
generateCmd.Flags().StringP("config-db", "c", "/etc/sonic/config_db.json", "path to current config_db.json")
8875
}

configdb/configdb.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ type ConfigDB struct {
4343
VXLANTunnelMap VXLANTunnelMap `json:"VXLAN_TUNNEL_MAP,omitempty"`
4444
}
4545

46-
func GenerateConfigDB(input *values.Values, platform *p.Platform, currentDeviceMetadata DeviceMetadata) (*ConfigDB, error) {
46+
func GenerateConfigDB(input *values.Values, platform *p.Platform, currentDeviceMetadata values.DeviceMetadata) (*ConfigDB, error) {
4747
if input == nil {
4848
return nil, fmt.Errorf("no input values provided")
4949
}
@@ -168,16 +168,16 @@ func getACLRulesAndTables(sourceRanges []string) (map[string]ACLRule, map[string
168168
return rules, tables
169169
}
170170

171-
func getDeviceMetadata(input *values.Values, currentMetadata DeviceMetadata) (*DeviceMetadata, error) {
172-
if currentMetadata.Localhost.Platform == "" {
171+
func getDeviceMetadata(input *values.Values, currentMetadata values.DeviceMetadata) (*DeviceMetadata, error) {
172+
if currentMetadata.Platform == "" {
173173
return nil, fmt.Errorf("missing platform from current device metadata")
174174
}
175175

176-
if currentMetadata.Localhost.HWSKU == "" {
176+
if currentMetadata.HWSKU == "" {
177177
return nil, fmt.Errorf("missing hwsku from current device metadata")
178178
}
179179

180-
if currentMetadata.Localhost.MAC == "" {
180+
if currentMetadata.MAC == "" {
181181
return nil, fmt.Errorf("missing mac from current device metadata")
182182
}
183183

@@ -186,9 +186,9 @@ func getDeviceMetadata(input *values.Values, currentMetadata DeviceMetadata) (*D
186186
DockerRoutingConfigMode: DockerRoutingConfigMode(input.DockerRoutingConfigMode),
187187
FRRMgmtFrameworkConfig: strconv.FormatBool(input.FRRMgmtFrameworkConfig),
188188
Hostname: input.Hostname,
189-
HWSKU: currentMetadata.Localhost.HWSKU,
190-
MAC: currentMetadata.Localhost.MAC,
191-
Platform: currentMetadata.Localhost.Platform,
189+
HWSKU: currentMetadata.HWSKU,
190+
MAC: currentMetadata.MAC,
191+
Platform: currentMetadata.Platform,
192192
RouterType: "LeafRouter",
193193
},
194194
}, nil

tests/1/current-config_db.json

Lines changed: 0 additions & 9 deletions
This file was deleted.

tests/1/sonic-config.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ bgp_ports:
55
breakouts:
66
Ethernet0: 4x25G
77

8+
device_metadata:
9+
hwsku: Accton-AS7726-32X
10+
mac: aa:aa:aa:aa:aa:aa
11+
platform: x86_64-accton_as7726_32x-r0
12+
813
docker_routing_config_mode: split
914

1015
features:

tests/2/current-config_db.json

Lines changed: 0 additions & 9 deletions
This file was deleted.

tests/2/sonic-config.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ bgp_ports:
55
breakouts:
66
Ethernet0: 4x25G
77

8+
device_metadata:
9+
hwsku: Accton-AS7726-32X
10+
mac: aa:aa:aa:aa:aa:aa
11+
platform: x86_64-accton_as7726_32x-r0
12+
813
docker_routing_config_mode: split
914
features: {}
1015
frr_mgmt_framework_config: false

tests/3/current-config_db.json

Lines changed: 0 additions & 9 deletions
This file was deleted.

tests/3/sonic-config.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@ bgp_ports:
22
- Ethernet0
33
- Ethernet1
44

5+
device_metadata:
6+
hwsku: Accton-AS4630-54TE
7+
mac: aa:aa:aa:aa:aa:aa
8+
platform: x86_64-accton_as4630_54te-r0
9+
510
docker_routing_config_mode: split
611
frr_mgmt_framework_config: true
712
hostname: mgmtspine

tests/4/current-config_db.json

Lines changed: 0 additions & 9 deletions
This file was deleted.

0 commit comments

Comments
 (0)