Ошибки копирования / шаблона модулей Ansible для хостов Linux 5 с использованием python26, привязка python требуется libselinux-python

Вы можете выполнить всю работу в awk:

#!/bin/sh
file=$2

awk -v theta="$1" -F '[= ]+' '
        $0 ~ theta { print $12; found++ }
        END        { if (!found) { print "Not available"; exit 1 } }' "$file"

Возможно, вы захотите добавить обработку ошибок для проверки того. что есть два аргумента командной строки, и $2 является именем читаемого файла, потому что

  • если $2 является чем-то другим, а не читаемым файлом, вы получите сообщение об ошибке от awk
  • если $2 пустой или отсутствует, awk будет молча читать из стандартного ввода.

(Конечно, любое или оба этих поведения могут вас устроить)

Примечания:

  • Вы можете получить более точные результаты, изменив $0 ~ theta на $8 == theta.
  • Переменные в awk инициализируются значением blank.  В математических контекстах это рассматривается как 0, поэтому found++ устанавливает found в 1 при первом выполнении.  Я намеренно сказал found++ вместо found = 1, если несколько строк соответствуют значению тэта, found будет установлено количество таких строк.  Кажется, что это должно быть условием ошибки; если вас это беспокоит, вы можете модифицировать блок END. для сообщения об ошибке, если found не равно 1.
  • Конечно, если вам нужно, чтобы ваш скрипт выполнял одно действие, если значение найдено и что-то другое, если оно не найдено, вы можете удалить оператор print из блока END и пусть скрипт просто проверяет статус завершения awk и выдать собственное сообщение об ошибке.  Вам также следует поступить следующим образом если вы хотите получить вывод от awk (т.е. значение θ2).  И наоборот, если вам нужно только человекочитаемое сообщение об ошибке, и вам не нужно иметь возможность проверить статус выхода, вы можете удалить оператор exit из блока END.
0
22.03.2019, 05:50
3 ответа

Сегодня я буквально столкнулся с этой проблемой на нескольких хостах в своей инфраструктуре.

Решение состоит в том, чтобы сделать то, что говорит ошибка. Установите пакет libselinux-python. Или вы можете отключить selinux на целевом хосте (s ).

С сайта Ansible:

If you have SELinux enabled on remote nodes, you will also want to install libselinux-python on them before using any copy/file/template related functions in Ansible. You can of course still use the yum module in Ansible to install this package on remote systems that do not have it.

2
28.01.2020, 03:53

Я просто запустил это, и моя проблема была решена

yum install libselinux-python3
1
04.05.2020, 11:57

Как уже было сказано, решение заключается в установке libselinux -python3. Точнее, libselinux -python3 необходимо установить на каждую хост-машину, а не на доступный сервер.

Чтобы убедиться, что библиотека установлена ​​на каждом хосте, я добавил дополнительную строку для установки libselinux -python3 перед запуском любого из зависимых от нее модулей.

- name: install python selinux library required by future ansible modules
  become: true
  yum:
    name: libselinux-python3
    state: present
    update_cache: true

это исправило мои более поздние команды, которые ранее не работали.

1
27.05.2021, 18:30

Теги

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