Заменить всю строку в Ansible

I am beginning to work with micro controllers and programming them using C language.

На практике это важное соображение. Я предполагаю, что ваш микроконтроллер — это что-то вроде Arduino(или, возможно, Raspberry Pi ).

В общем, нужен какой-нибудь перекрестный -компилятор . Затем вы выполните перекрестную -компиляцию в своей настольной системе (, например. немного Linux, который очень удобен для разработчиков; но вы можете найти перекрестные -компиляторы, размещенные на Windows или MacOSX, для Arduinos ), ваш исходный код в исполняемый файл, предназначенный для вашего микроконтроллера, а затем передать двоичный исполняемый файл на ваш микроконтроллер.

C — сложный язык программирования.

Во многих случаях вы можете скомпилировать свой код прямо на рабочем столе. (Не забудьте включить все предупреждения и отладочную информацию, например. gcc -Wall -Wextra -gс GCC ), протестируйте большую часть его на своем рабочем столе, а затем адаптируйте его и портируйте для своего Arduino. Отладка некоторого кода на ноутбуке или настольном компьютере намного проще, чем отладка на Arduino.

Позже вы перекрестно -скомпилируете тот же исходный код для вашего микроконтроллера.

0
17.09.2020, 00:33
1 ответ

Вариантов больше. Чтобы избежать экранирования сложных выражений, поместите их в файлы. Например, поместите регулярное выражение и строки в набор файлов (r *,l *)

shell> cat files/replace/r1 
^<!-- <param name="core-db-dsn" value="pgsql:(.*)$
shell> cat files/replace/l1 
<param name="core-db-dsn" value="pgsql://hostaddr=127.0.0.1 dbname={{ DB_Info }} user={{ DB_Info }} password='{{ DB_Pass }}' options='-c client_min_messages=NOTICE'" />

Тогда приведенная ниже задача выполняет работу

  - replace:
      path: switch.conf.xml
      regexp: "{{ lookup('file', 'files/replace/r1') }}"
      replace: "{{ lookup('template', 'files/replace/l1') }}"
    vars:
      DB_Info: freeswitch2
      DB_Pass: passwd

Если файлов больше, запустите задачу в цикле. Например

  - replace:
      path: switch.conf.xml
      regexp: "{{ lookup('file', 'files/replace/r' ~ ansible_loop.index ) }}"
      replace: "{{ lookup('template', 'files/replace/l' ~ ansible_loop.index) }}"
    loop: "{{ lookup('fileglob', 'files/replace/r*', wantlist=True) }}"
    loop_control:
      extended: true
    vars:
      DB_Info: freeswitch2
      DB_Pass: passwd

Убедитесь, что 'glob' соответствует только тому, что вам нужно. Удалите все временные или резервные файлы. Цикл ожидает набор из (r *,l *)файлов с непрерывным индексом, начинающимся с 1.


Чтобы избежать обслуживания слишком большого количества (r *,l *)файлов, поместите все регулярные выражения и строки в отдельные файлы и зациклите строки файлов. Например

    - replace:
        path: switch.conf.xml
        regexp: "{{ item.0 }}"
        replace: "{{ item.1 }}"
      with_together:
        - "{{ lookup('file', 'files/replace/r-all').splitlines() }}"
        - "{{ lookup('template', 'files/replace/l-all').splitlines() }}"
      loop_control:
        label: "{{ item.0 }}"
      vars:
        DB_Info: freeswitch2
        DB_Pass: passwd
0
18.03.2021, 23:04

Теги

Похожие вопросы