@@ -289,3 +289,62 @@ func (ps *ProxmoxSource) syncVMNetworks(nbi *inventory.NetboxInventory, nbVM *ob
289
289
}
290
290
return nil
291
291
}
292
+
293
+ // Function that synces proxmox containers to the netbox inventory.
294
+ func (ps * ProxmoxSource ) syncContainers (nbi * inventory.NetboxInventory ) error {
295
+ if len (ps .Containers ) > 0 {
296
+ // Create container role
297
+ containerRole , err := nbi .AddDeviceRole (ps .Ctx , & objects.DeviceRole {
298
+ Name : constants .DeviceRoleContainer ,
299
+ Slug : utils .Slugify (constants .DeviceRoleContainer ),
300
+ Color : constants .DeviceRoleContainerColor ,
301
+ VMRole : true ,
302
+ })
303
+ if err != nil {
304
+ return fmt .Errorf ("create container role: %s" , err )
305
+ }
306
+ for nodeName , containers := range ps .Containers {
307
+ nbHost := ps .NetboxNodes [nodeName ]
308
+ for _ , container := range containers {
309
+ // Determine Container status
310
+ containerStatus := & objects .VMStatusActive
311
+ if container .Status == "stopped" {
312
+ containerStatus = & objects .VMStatusOffline
313
+ }
314
+ // Determine Container tenant
315
+ vmTenant , err := common .MatchVMToTenant (ps .Ctx , nbi , container .Name , ps .VMTenantRelations )
316
+ if err != nil {
317
+ return fmt .Errorf ("match vm to tenant: %s" , err )
318
+ }
319
+ _ , err = nbi .AddVM (ps .Ctx , & objects.VM {
320
+ NetboxObject : objects.NetboxObject {
321
+ Tags : ps .SourceTags ,
322
+ CustomFields : map [string ]string {
323
+ constants .CustomFieldSourceName : ps .SourceConfig .Name ,
324
+ constants .CustomFieldSourceIDName : fmt .Sprintf ("%d" , container .VMID ),
325
+ },
326
+ },
327
+ Host : nbHost ,
328
+ Role : containerRole ,
329
+ Cluster : ps .NetboxCluster , // Default single proxmox cluster
330
+ Tenant : vmTenant ,
331
+ VCPUs : float32 (container .CPUs ),
332
+ Memory : int (container .MaxMem / constants .MiB ), // Memory is in MB
333
+ Disk : int (container .MaxDisk / constants .GiB ), // Disk is in GB
334
+ Site : nbHost .Site ,
335
+ Name : container .Name ,
336
+ Status : containerStatus ,
337
+ })
338
+ if err != nil {
339
+ return fmt .Errorf ("new vm: %s" , err )
340
+ }
341
+
342
+ // err = ps.syncContainerNetworks(nbi, nbContainer)
343
+ // if err != nil {
344
+ // return fmt.Errorf("sync container networks: %s", err)
345
+ // }
346
+ }
347
+ }
348
+ }
349
+ return nil
350
+ }
0 commit comments