amarao (amarao_san) wrote,
amarao
amarao_san

А ведь как прилично всё начиналось...


  include_role:
   name: shinken_configure
   tasks_from: services.yaml
  vars:
    query: "[?name=='{{router}}'].bgp_push"
    bgp_push: '{{(global_config.routers|json_query(query))[0]|default({})}}'
    neighbor_ip: '{{bgp_push["neighbor_ip"]|default(None)}}'
    services:
     - service_description: 'BGP_PUSH_{{router}}'
       hostgroup_name: 'bgp_push_{{router}}'
       check_command: 'check_api!35!10!$_HOSTBGP_PUSH_API_PORT$!/api/check/{{neighbor_ip}}'
     - router: '{{router}}'
       host: '{{host}}'
  when: neighbor_ip != None
  with_items: '{{assigned_routers}}'
  loop_control:
    loop_var: router
    label: '{{router}}@{{host}}'



Удачи, дорогие потомки. Комба из синтаксического комка трёх разных языков темплетизации/query и двух идиотских соглашений о передаче параметров. Не считая самого ансибла at full scale. Оно вызывается импортируется из другой таски, в цикле:

- name: Configure bgp push checks
  include_tasks: bgp_push_services.yaml
  vars:
    assigned_routers: '{{hostvars[host]["assigned_routers"]}}'
  with_items: '{{groups["bgp_push"]}}'
  loop_control:
    loop_var: host
    label: '{{host}}'
  tags:
    - shinken
    - monitoring
    - services
    - checks


И я даже не издеваюсь, это the best I can do. Альтернативой будет ~50 строк питонового кода в plugins, что может сначала показаться хорошей идеей, но на самом деле, нет, ибо читать её ещё хуже.

Ансибл начинает ломаться ровно в том месте, где нужен error handling для jinja2 и языка фильтров.

UPD: небольшая оптимизация:

query: "[?name=='{{router}}'].bgp_push.neighbor_ip"
neighbor_ip: '{{(global_config.routers|json_query(query))[0]|default(None)}}'

UPD2: Да, тут есть бага. Удачи её найти.
Tags: ansible
Subscribe

  • План действий

    AAA при логине ведёт себя по разному в зависимости от того A это или AAAA.

  • Админский гольф

    Вам выдали шелл на сервер, на котором кто-то удалил все симлинки (т.е. файлы типа "симлинк"). Ваша задача починить сервер. Починенным сервер…

  • продолжая leetcode

    Первый раз я ощутил Силу. Задача - roman numerals, с обещанием, что на входе нет мусора. pub fn roman_to_int(s: String) -> i32 { let mut acc =…

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 4 comments