BatmanAMA / powerbox

Netbox powershell module
MIT License
48 stars 18 forks source link

Classes and data types #38

Open agowa opened 4 years ago

agowa commented 4 years ago

Please add data types for simpler handling and error checking. Having types like below will allow:

<#
class NetboxVirtualMachineCustomFields {
    [ValidateNotNull()][String]$customField000 = ''
    [ValidateNotNull()][String]$customField001 = ''
}
class NetboxTenantCustomFields {
    [ValidateNotNull()][String]$tenant_customField000
}
class NetboxVirtualMachineObject {
    [ValidateNotNullOrEmpty()][String]$name
    [ValidateNotNull()][Int64]$device_role = $nbDeviceRole.Id
    [ValidateNotNullOrEmpty()][Int64]$cluster
    [ValidateNotNull()][ValidateSet('active')][String]$status = 'active'
    [ValidateNotNull()][Int64]$tenant
    [ValidateNotNull()][Int64]$platform = $nbPlatform.Id
    [ValidateNotNull()][Int64]$vcpus = 0
    [ValidateNotNull()][Int64]$memory = 0
    [ValidateNotNull()][Int64]$disk = 0
    [ValidateNotNull()][String]$comment = ''
    [ValidateNotNull()][String[]]$tags = [String[]]@('')
    [ValidateNotNullOrEmpty()][NetboxVirtualMachineCustomFields]$custom_fields
}
class NetboxClusterObject {
    [ValidateNotNull()][String]$name
    [ValidateNotNull()][Int64]$type = $nbClusterType.id
}
class NetboxTenantObject {
    [ValidateNotNull()][String]$name
    [ValidateNotNull()][String]$slug
    [ValidateNotNull()][Int64]$group
    [ValidateNotNull()][NetboxTenantCustomFields]$custom_fields
}
#>

My example is currently static, but it could be generated dynamically too. Just overwriting the new method and calling Add-Member before returning the instantiated object.

BatmanAMA commented 4 years ago

Hello. I am currently working on this for basically the reasons you mentioned, plus type backing would help bring the objects into compliance with the backend API while also making them more human readable. Hoping to have this in the next release.

evilensky commented 4 years ago

Is it possible to follow the progress? I am new to .net and Powershell classes.

agowa commented 4 years ago

https://github.com/BatmanAMA/powerbox/tree/update-2.4.x

BatmanAMA commented 4 years ago

Sorry - I have something I'm cooking up on my local computer. Trying a few different existant modules that will generate stuff from the API spec to see if any of them are reasonable. I have been keeping that in a private repo because anything that touches this repo triggers a beta release and a lot of this literally doesn't run.

evilensky commented 4 years ago

@BatmanAMA Google sent me down to AutoRest Is that something you are currently using? After typing out a few classes by hand using @agowa338 's example and About_Classes, it makes sense that there has to be "a better way."

BatmanAMA commented 4 years ago

I have played with it, and it may be how I generate classes but I don't care for the module part of what it generates.