|
|
|
@ -133,6 +133,151 @@ tcl::namespace::eval punk::netbox::man { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tcl::namespace::eval punk::netbox::man::dcim { |
|
|
|
|
|
|
|
namespace export {[a-z]*} |
|
|
|
|
|
|
|
namespace ensemble create -parameters {apicontextid} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tcl::namespace::eval devices { |
|
|
|
|
|
|
|
namespace export {[a-z]*} |
|
|
|
|
|
|
|
namespace ensemble create -parameters {apicontextid} |
|
|
|
|
|
|
|
variable PUNKARGS |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace eval argdoc { |
|
|
|
|
|
|
|
variable PUNKARGS |
|
|
|
|
|
|
|
#mark as @dynamic and ensure double-substitution present for dynamic parts |
|
|
|
|
|
|
|
set DYN_CONTEXTNAMES {${[punk::netbox::api_context_names]}} |
|
|
|
|
|
|
|
lappend PUNKARGS [::list\ |
|
|
|
|
|
|
|
{@dynamic}\ |
|
|
|
|
|
|
|
[punk::args::resolved_def\ |
|
|
|
|
|
|
|
-antiglobs {@leaders @values -RETURN}\ |
|
|
|
|
|
|
|
-override { |
|
|
|
|
|
|
|
@id {-id ::punk::netbox::man::dcim::devices::list } |
|
|
|
|
|
|
|
apicontextid {-choices {${$DYN_CONTEXTNAMES}} } |
|
|
|
|
|
|
|
}\ |
|
|
|
|
|
|
|
::punk::netbox::dcim::devices_list\ |
|
|
|
|
|
|
|
]\ |
|
|
|
|
|
|
|
{-RETURN -default table -choices {table tableobject list}}\ |
|
|
|
|
|
|
|
{-MAXRESULTS -type integer -default -1}\ |
|
|
|
|
|
|
|
{@values -min 0 -max 0}\ |
|
|
|
|
|
|
|
] |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
#caution: must use ::list to avoid loop |
|
|
|
|
|
|
|
proc list {args} { |
|
|
|
|
|
|
|
set argd [punk::args::parse $args withid "::punk::netbox::man::dcim::devices::list"] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
set urlnext "" |
|
|
|
|
|
|
|
set requests_allowed 1000 ;#review |
|
|
|
|
|
|
|
set resultlist [::list] |
|
|
|
|
|
|
|
set token [dict get $argd leaders apicontextid] |
|
|
|
|
|
|
|
set opts [dict get $argd opts] |
|
|
|
|
|
|
|
set vals [dict get $argd values] |
|
|
|
|
|
|
|
set multis [dict get $argd multis] |
|
|
|
|
|
|
|
set maxresults [dict get $opts -MAXRESULTS] |
|
|
|
|
|
|
|
set initial_pagelimit [dict get $opts -limit] |
|
|
|
|
|
|
|
set opts [dict remove $opts -MAXRESULTS] |
|
|
|
|
|
|
|
set outer_return [dict get $opts -RETURN] |
|
|
|
|
|
|
|
set opts [dict remove $opts -RETURN] ;#opts from punk::args::parse is a dict (no dup keys) - can use 'dict remove' safely |
|
|
|
|
|
|
|
#we can't just pass through 'multi' opts even if only one was supplied - list level is wrong |
|
|
|
|
|
|
|
set nextopts [::list] |
|
|
|
|
|
|
|
dict for {opt val} $opts { |
|
|
|
|
|
|
|
if {$opt ni $multis} { |
|
|
|
|
|
|
|
lappend nextopts $opt $val |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
foreach v $val { |
|
|
|
|
|
|
|
lappend nextopts $opt $v |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
#Now opts is a list with possible repeated options! (for flags that have -multiple true) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if {$maxresults == -1} { |
|
|
|
|
|
|
|
set maxresults $initial_pagelimit |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if {$maxresults < $initial_pagelimit} { |
|
|
|
|
|
|
|
punk::netbox::man::system::dupkeylist_setfirst nextopts -limit $maxresults |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
set to_go [expr {$maxresults - [llength $resultlist]}] |
|
|
|
|
|
|
|
while {$urlnext ne "null"} { |
|
|
|
|
|
|
|
if {$urlnext ne ""} { |
|
|
|
|
|
|
|
set urlnext_params [punk::netbox::man::system::uri_get_querystring_as_keyval_list $urlnext] |
|
|
|
|
|
|
|
if {[punk::netbox::man::system::dupkeylist_getfirst $nextopts -limit] > $to_go} { |
|
|
|
|
|
|
|
punk::netbox::man::system::dupkeylist_setfirst urlnext_params limit $to_go |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
#sync to -limit,-offset from the url's limit, offset values |
|
|
|
|
|
|
|
punk::netbox::man::system::optionlistvar_sync_from_urlparams nextopts $urlnext_params |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
puts "-->next:$urlnext nextopts:$nextopts vals:$vals" |
|
|
|
|
|
|
|
set resultd [punk::netbox::dcim::devices_list $token {*}$nextopts -RETURN dict {*}$vals] |
|
|
|
|
|
|
|
set urlnext [dict get $resultd next] |
|
|
|
|
|
|
|
set batch [dict get $resultd results] |
|
|
|
|
|
|
|
lappend resultlist {*}$batch |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
set to_go [expr {$maxresults - [llength $resultlist]}] |
|
|
|
|
|
|
|
if {$to_go <= 0} {break} |
|
|
|
|
|
|
|
incr requests_allowed -1 |
|
|
|
|
|
|
|
if {$requests_allowed < 1} {break} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if {$outer_return in {table tableobject}} { |
|
|
|
|
|
|
|
package require textblock |
|
|
|
|
|
|
|
set t [textblock::list_as_table -return tableobject -colheaders {id device cluster primary_ip tenant site platform status comments}] |
|
|
|
|
|
|
|
foreach dev $resultlist { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if {[dict exists $dev cluster id]} { |
|
|
|
|
|
|
|
set cluster "[dict get $dev cluster id]: [dict get $dev cluster name]" |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
set cluster [dict get $dev cluster] |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if {[dict exists $dev primary_ip id]} { |
|
|
|
|
|
|
|
set primary_ip "[dict get $dev primary_ip id]: [dict get $dev primary_ip address]" |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
set primary_ip [dict get $dev primary_ip] |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if {[dict exists $dev tenant id]} { |
|
|
|
|
|
|
|
set tenant "[dict get $dev tenant id]: [dict get $dev tenant slug]" |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
set tenant [dict get $dev tenant] ;#probably null |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if {[dict exists $dev site id]} { |
|
|
|
|
|
|
|
set site "[dict get $dev site id]: [dict get $dev site name]" |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
set site [dict get $dev site] ;#probably null |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if {[dict exists $dev platform id]} { |
|
|
|
|
|
|
|
set platform "[dict get $dev platform id]: [dict get $dev platform name]" |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
set platform [dict get $dev platform] ;#probably null |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
set r [::list\ |
|
|
|
|
|
|
|
[dict get $dev id]\ |
|
|
|
|
|
|
|
[dict get $dev name]\ |
|
|
|
|
|
|
|
$cluster\ |
|
|
|
|
|
|
|
$primary_ip\ |
|
|
|
|
|
|
|
$tenant\ |
|
|
|
|
|
|
|
$site\ |
|
|
|
|
|
|
|
$platform\ |
|
|
|
|
|
|
|
[dict get $dev status value]\ |
|
|
|
|
|
|
|
[dict get $dev comments]\ |
|
|
|
|
|
|
|
] |
|
|
|
|
|
|
|
$t add_row $r |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
switch -- $outer_return { |
|
|
|
|
|
|
|
table { |
|
|
|
|
|
|
|
set result [$t print] |
|
|
|
|
|
|
|
$t destroy |
|
|
|
|
|
|
|
return $result |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
tableobject { |
|
|
|
|
|
|
|
return $t |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return $resultlist |
|
|
|
|
|
|
|
#return [showdict $resultd] |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
tcl::namespace::eval punk::netbox::man::prefixes { |
|
|
|
tcl::namespace::eval punk::netbox::man::prefixes { |
|
|
|
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ |
|
|
|
# ++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ |
|
|
|
@ -1549,6 +1694,8 @@ namespace eval ::punk::args::register { |
|
|
|
::punk::netbox::man::virtualization::virtual-machines\ |
|
|
|
::punk::netbox::man::virtualization::virtual-machines\ |
|
|
|
::punk::netbox::man::extras\ |
|
|
|
::punk::netbox::man::extras\ |
|
|
|
::punk::netbox::man::extras::tags\ |
|
|
|
::punk::netbox::man::extras::tags\ |
|
|
|
|
|
|
|
::punk::netbox::man::dcim\ |
|
|
|
|
|
|
|
::punk::netbox::man::dcim::devices\ |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
# ----------------------------------------------------------------------------- |
|
|
|
# ----------------------------------------------------------------------------- |
|
|
|
|