From 66a2d454d68bd6528f6c4892da9cb9186084fe09 Mon Sep 17 00:00:00 2001 From: marbeg Date: Mon, 8 Jun 2026 09:20:13 +0200 Subject: [PATCH 1/2] Copy tmos.rb to tmos_aaa.rb --- lib/oxidized/model/tmos_aaa.rb | 59 ++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 lib/oxidized/model/tmos_aaa.rb diff --git a/lib/oxidized/model/tmos_aaa.rb b/lib/oxidized/model/tmos_aaa.rb new file mode 100644 index 000000000..b749c8812 --- /dev/null +++ b/lib/oxidized/model/tmos_aaa.rb @@ -0,0 +1,59 @@ +class TMOS < Oxidized::Model + using Refinements + + comment '# ' + + cmd :secret do |cfg| + cfg.gsub!(/^([\s\t]*)secret \S+/, '\1secret ') + cfg.gsub!(/^([\s\t]*\S*)password \S+/, '\1password ') + cfg.gsub!(/^([\s\t]*\S*)passphrase \S+/, '\1passphrase ') + cfg.gsub!(/community \S+/, 'community ') + cfg.gsub!(/community-name \S+/, 'community-name ') + cfg.gsub!(/^([\s\t]*\S*)encrypted \S+$/, '\1encrypted ') + cfg + end + + cmd('tmsh -q show sys version') { |cfg| comment cfg } + + cmd('tmsh -q show sys software') { |cfg| comment cfg } + + cmd 'tmsh -q show sys hardware field-fmt' do |cfg| + cfg.gsub!(/fan-speed (\S+)/, '') + cfg.gsub!(/temperature (\S+)/, '') + cfg.gsub!(/humidity (\S+)/, '') + comment cfg + end + + cmd('cat /config/bigip.license') { |cfg| comment cfg } + + cmd 'tmsh -q list' do |cfg| + cfg.gsub!(/state (up|down|checking|irule-down)/, '') + cfg.gsub!(/errors (\d+)/, '') + cfg.gsub!(/^\s+bandwidth-bps (\d+)/, '') + cfg.gsub!(/^\s+bandwidth-cps (\d+)/, '') + cfg.gsub!(/^\s+bandwidth-pps (\d+)\n/, '') + cfg.gsub!(/^\s*\S*encrypted \S+\n/, '') + cfg + end + + cmd('tmsh -q list net route all') { |cfg| comment cfg } + + cmd('/bin/ls --full-time --color=never /config/ssl/ssl.crt') { |cfg| comment cfg } + + cmd('/bin/ls --full-time --color=never /config/ssl/ssl.key') { |cfg| comment cfg } + + cmd 'tmsh -q show running-config sys db all-properties' do |cfg| + cfg.gsub!(/sys db configsync.localconfigtime {[^}]+}/m, '') + cfg.gsub!(/sys db gtm.configtime {[^}]+}/m, '') + cfg.gsub!(/sys db ltm.configtime {[^}]+}/m, '') + comment cfg + end + + cmd('[ -d "/config/zebos" ] && cat /config/zebos/*/ZebOS.conf') { |cfg| comment cfg } + + cmd('cat /config/partitions/*/bigip*.conf') { |cfg| comment cfg } + + cfg :ssh do + exec true # don't run shell, run each command in exec channel + end +end From 32e82d69c3e42fd21c85d084fad33b7a6482d01a Mon Sep 17 00:00:00 2001 From: marbeg Date: Mon, 8 Jun 2026 09:23:18 +0200 Subject: [PATCH 2/2] Workaround to use bash shell --- lib/oxidized/model/tmos_aaa.rb | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/lib/oxidized/model/tmos_aaa.rb b/lib/oxidized/model/tmos_aaa.rb index b749c8812..9b812e945 100644 --- a/lib/oxidized/model/tmos_aaa.rb +++ b/lib/oxidized/model/tmos_aaa.rb @@ -1,6 +1,10 @@ class TMOS < Oxidized::Model using Refinements + # Use this model if you have AAA configured in tmos + # See https://github.com/ytti/oxidized/issues/437 + # F5 KB: https://my.f5.com/manage/s/article/K28660000 + comment '# ' cmd :secret do |cfg| @@ -13,20 +17,20 @@ class TMOS < Oxidized::Model cfg end - cmd('tmsh -q show sys version') { |cfg| comment cfg } + cmd('run /util bash -c "tmsh -q show sys version"') { |cfg| comment cfg } - cmd('tmsh -q show sys software') { |cfg| comment cfg } + cmd('run /util bash -c "tmsh -q show sys software"') { |cfg| comment cfg } - cmd 'tmsh -q show sys hardware field-fmt' do |cfg| + cmd 'run /util bash -c "tmsh -q show sys hardware field-fmt"' do |cfg| cfg.gsub!(/fan-speed (\S+)/, '') cfg.gsub!(/temperature (\S+)/, '') cfg.gsub!(/humidity (\S+)/, '') comment cfg end - cmd('cat /config/bigip.license') { |cfg| comment cfg } + cmd('run /util bash -c "cat /config/bigip.license"') { |cfg| comment cfg } - cmd 'tmsh -q list' do |cfg| + cmd 'run /util bash -c "tmsh -q list"' do |cfg| cfg.gsub!(/state (up|down|checking|irule-down)/, '') cfg.gsub!(/errors (\d+)/, '') cfg.gsub!(/^\s+bandwidth-bps (\d+)/, '') @@ -36,22 +40,22 @@ class TMOS < Oxidized::Model cfg end - cmd('tmsh -q list net route all') { |cfg| comment cfg } + cmd('run /util bash -c "tmsh -q list net route all"') { |cfg| comment cfg } - cmd('/bin/ls --full-time --color=never /config/ssl/ssl.crt') { |cfg| comment cfg } + cmd('run /util bash -c "/bin/ls --full-time --color=never /config/ssl/ssl.crt"') { |cfg| comment cfg } - cmd('/bin/ls --full-time --color=never /config/ssl/ssl.key') { |cfg| comment cfg } + cmd('run /util bash -c "/bin/ls --full-time --color=never /config/ssl/ssl.key"') { |cfg| comment cfg } - cmd 'tmsh -q show running-config sys db all-properties' do |cfg| + cmd 'run /util bash -c "tmsh -q show running-config sys db all-properties"' do |cfg| cfg.gsub!(/sys db configsync.localconfigtime {[^}]+}/m, '') cfg.gsub!(/sys db gtm.configtime {[^}]+}/m, '') cfg.gsub!(/sys db ltm.configtime {[^}]+}/m, '') comment cfg end - cmd('[ -d "/config/zebos" ] && cat /config/zebos/*/ZebOS.conf') { |cfg| comment cfg } + cmd('run /util bash -c "[ -d "/config/zebos" ] && cat /config/zebos/*/ZebOS.conf"') { |cfg| comment cfg } - cmd('cat /config/partitions/*/bigip*.conf') { |cfg| comment cfg } + cmd('run /util bash -c "cat /config/partitions/*/bigip*.conf"') { |cfg| comment cfg } cfg :ssh do exec true # don't run shell, run each command in exec channel