Скрипты для «экспорта» данных конфигурации Junos-like (tree) в CSV-like (table) данные и обратно - PullRequest
1 голос
/ 25 марта 2011

Я хотел бы иметь несколько сценариев для экспорта данных конфигурации, похожих на Junos, для сортировки данных типа CSV (разделенных вкладками) и обратно. Пример (и AFAIK достаточный) ввод может быть следующим:

firewall {
    filter protect {
        term "protocol bgp" {
            from {
                prefix-list {
                    bgp-peers;
                }
                protocol tcp; ## Any ideas how to preserve comments in output?
                port bgp;
            }
            then accept;
        }
        term protocol_ntp {
            from {
                prefix-list {
                    "protocol ntp";
                }
                protocol udp;
                port ntp;
            }
            then accept;
        }
    }
}

Ожидаемый результат будет следующим (столбцы «|» обозначают места, где ожидаются вкладки):

firewall|filter protect|term "protocol bgp"|from|prefix-list|bgp-peers;
firewall|filter protect|term "protocol bgp"|from|protocol tcp;
firewall|filter protect|term "protocol bgp"|from|port bgp;
firewall|filter protect|term "protocol bgp"|then accept;
firewall|filter protect|term protocol_ntp|from|prefix-list|"protocol ntp";
firewall|filter protect|term protocol_ntp|from|protocol udp;
firewall|filter protect|term protocol_ntp|from|port ntp;
firewall|filter protect|term protocol_ntp|then accept;

На первый взгляд, проблема кажется довольно простой, но во-вторых, это не из-за двойных кавычек. Проблема IMHO сводится к проблеме "дерево-таблица" и "таблица-дерево" с некоторой дополнительной обработкой двойных кавычек. Я, честно говоря, не знаю, чтобы сделать это правильно ...

Я бы предпочел решения в следующем порядке по популярности (для меня): в sed(1) (может быть очень быстрым), в awk(1) (не так приятно, как предыдущий для меня), в perl(1) (почему нет, если используется только простой Perl с только strict и warnings модулями) или в ANSI C без дополнительных библиотек, просто база (я не думаю, что кто-то хотел бы написать парсеры для меня здесь на всех, но никто не знает).

1 Ответ

0 голосов
/ 25 мая 2011

Это гораздо проще конвертировать из XML, для которого в JunOS имеется встроенная поддержка:

show configuration | display xml

Или еще лучше, попробуйте

show configuration | display set
...