Прежде чем писать задачу Ansible, ответьте на более простой вопрос: что именно считается? Настроенный партнёр, сеанс IKE, ассоциация безопасности IPsec и запись наблюдаемого состояния туннеля — это четыре разные единицы, а перегенерация ключей или несколько защищённых сетей заставляют их суммы расходиться. Если панель и playbook расходятся, обычно они считают разные вещи, а не один из них ошибается.

Четыре вещи, которые люди называют активными

Настроенный партнёр — это объект топологии: он существует потому, что кто-то его определил. Сеанс IKE — это связь плоскости управления, которая может быть поднята, пока трафик не идёт. SA IPsec — это ассоциация плоскости данных для конкретной пары селекторов, и один туннель может нести несколько. Наблюдаемое состояние туннеля — это собственный операционный вердикт платформы, обычно ближайший к тому, что оператор имеет в виду, говоря, что туннель поднят.

Только последнее — разумная основа для операционного подсчёта. Первое — это инвентарь конфигурации, и сообщать его как активное — так панель показывает зелёный для партнёра, который не работает со вторника. Решите, какая единица нужна потребителю числа, затем назовите метрику этой единицей в её собственном имени.

Первое решение: какая плоскость управления?

Если устройством управляет FDM, релевантная поверхность — FTD REST API. Если им управляет FMC, этот API не является взаимозаменяемой заменой, и объекты живут за собственным API FMC. Подтвердите это, прежде чем написать хотя бы один запрос, потому что неверная плоскость возвращает правдоподобную ошибку, которая выглядит как проблема с правами.

Для парка ответ также определяет, где находится подсчёт: на устройство через FDM или на домен через FMC. Это разные области, и они дают разные числа для одного и того же парка.

Второе решение: какой ресурс отвечает?

Для примера, привязанного к версии, справочник объектов FMC 7.3 API документирует ресурсы GET по пути health:

/api/fmc_config/v1/domain/{domainUUID}/health/tunnelstatuses
/api/fmc_config/v1/domain/{domainUUID}/health/tunnelsummaries

Ресурс состояния туннеля поддерживает фильтры устройства и состояния, включая TUNNEL_UP. Это даёт вам реальный операционный ресурс для проверки в этой версии, а не догадку об имени поля.

Подтвердите доступность, права, параметры запроса и схему ответа в API Explorer развёрнутого FMC, прежде чем реализовывать парсер. Документация одной версии — это отправная точка, а не контракт для той, которую вы запускаете.

Напишите контракт подсчёта

Сформулируйте метрику одним предложением: уникальные операционные записи туннелей для одного предполагаемого устройства и домена, чьё заявленное состояние — TUNNEL_UP. Затем опишите, как представлены резервные устройства и несколько записей для одной логической площадки, потому что эти два случая решают, совпадает ли ваше число с числом на совещании.

Не меняйте тихо единицу с записи туннеля на удалённую площадку. Если бизнесу нужны площадки, явно сопоставьте записи с площадками и опубликуйте это сопоставление. Подсчёт, который тихо переопределяет себя, хуже отсутствия подсчёта, потому что никто не может сказать, когда он изменился.

Относитесь к ресурсу сводки как к удобству только после того, как подтвердите, что он суммирует. Он может агрегировать именно то, что вам нужно, или отвечать на тонко иной вопрос. Прочитайте его схему один раз, запишите различие и используйте ресурс состояния, если сводку нельзя объяснить. Сводка, которую вы не понимаете, — это число, которое вы не сможете защитить на разборе.

Пусть рабочий процесс сохраняет неопределённость

Используйте утверждённый HTTPS API, проверяйте сертификат, держите токены вне вывода задачи и получайте область с помощью поддерживаемых версией фильтра и постраничного вывода. Затем проверьте схему, прежде чем что-либо вычислять.

fetch intended domain/device runtime records
validate response, completeness and freshness
deduplicate by the documented tunnel identity
count records matching the approved up-state definition
report count with scope, timestamp and metric unit

Это псевдокод рабочего процесса, а не протестированный playbook. Берите фактические имена полей из установленного API вместо того, чтобы придумывать ключ JSON с именем active.

Главное правило — поведение при сбое: ошибка авторизации, неподдерживаемый ресурс, устаревшая выборка или неполный набор страниц должны давать unknown или error, никогда не успешный ноль. Ноль, который означает «я не смог спросить», — самый дорогой вид ошибки.

Проверьте по собственному представлению платформы

Сравните первый результат с представлением мониторинга VPN этой версии для того же устройства и момента. Когда они различаются, выясните, какую единицу использует каждый, прежде чем менять playbook.

Сохраняйте несекретный контекст для каждого запуска: область, отметку времени, единицу метрики и число записей. справочник объектов FMC 7.3 API — источник путей ресурсов выше, а API Explorer в вашем собственном развёртывании — источник всего остального.

Похожие статьи