2016-12-27 2 views
0

анзибль версия/анзибль-PlayBook: 2.1.2.0анзибль модуль пип: имя пакета и Umask 0022 Фатальная ошибка: недопустимый буквальным для Int() с основанием 8: «18» Umask должен быть восьмеричное целое число

У меня есть следующие действия в моей PlayBook:

- name: Install cli (as well) 
    pip: 
    name: "{{ mycompany_pip_pkg }}" 
    umask: 0022 

Почему я получаю следующее сообщение об ошибке фатальной, даже если я следовал документы для анзибль pip модуля: http://docs.ansible.com/ansible/pip_module.html

Ошибка:

TASK [company.company-ansible : Install cli (as well)] **************** 
fatal: [localhost]: FAILED! => {"changed": false, "details": "invalid literal for int() with base 8: '18'", "failed": true, "msg": "umask must be an octal integer"} 

анзибль pip Docs говорит:

The system umask to apply before installing the pip package. This is useful, for example, when installing on systems that have a very restrictive umask by default (e.g., 0077) and you want to pip install packages which are to be used by all users. Note that this requires you to specify desired umask mode in octal, with a leading 0 (e.g., 0077).

http://programtalk.com/vs2/python/749/ansible-modules-core/packaging/language/pip.py/ показывает следующий код:

if umask and not isinstance(umask, int): 
    try: 
     umask = int(umask, 8) 
    except Exception: 
     module.fail_json(msg="umask must be an octal integer", 
         details=to_native(sys.exc_info()[1])) 

PS: следующий синтаксис работает! но почему вышеупомянутый не работает?

- name: Install cli (as well) 
    pip: name="{{ mycompany_pip_pkg }}" umask=0022 

UPDATE:
Вопрос:
1) Почему в анзибль pip модуле, когда значение name В отеле содержит недопустимое имя пакета, то этот модуль стенает стоимости umask имущества (что является правильным в моем дело)?

+0

ОК, я нашел решение, но все же, почему синтаксис первого раздела не работает! –

ответ

1

Ansible ожидает аргументы для модулей в формате key=value, хотя аргументы свободной формы (YAML) все еще принимаются, но не рекомендуются.

От Conventions/Recommendations

Modules can also take free-form arguments instead of key-value or json but this is not recommended.

+0

Согласен. Удивляясь, почему они упоминают об этом в своей документации, см. Их последний пример. Если я использую синтаксис YAML свободной формы без использования 'umask: 0022 или umask: ... property', он работает.Я использовал синтаксис YAML свободной формы в других книгах для других модулей, и все они работают. Я думаю, что 'pip.py' нужно исправить для свойства' umask'. Преимущество, которое я вижу в использовании свободной формы YAML, - это лучший отступы/пользовательский дружественный синтаксис -vs- помещение всех свойств/переменных в одну строку. –

+0

Я представил обновление для своего сообщения, и теперь мой пост задает правильный вопрос :) (который я нашел после некоторого расследования), надеюсь, что вы можете обеспечить некоторый свет. –

+0

Я не думаю, что слова «свободная форма» применимы к стилю YAML. У вас есть какие-то ссылки на это? Включая четкое заявление о том, что стиль YAML не рекомендуется? Я считаю, что стиль free-style относится, например, к модулю 'local_action', в котором вы можете указать модуль либо как значение ключа, либо непосредственно в значении' local_action'. – techraf

0

Обертывание в кавычках биты полномочий работал для меня. пип: Имя: uwsgi состояние: присутствует Umask: '0022'

# ls -lah /bin/uwsgi -rwxr-xr-x. 1 root root 1.3M Jan 21 12:12 /bin/uwsgi 
+0

Да, я сделал то же самое: 'pip: name =" {{pip_pkg}} "umask =" 0022 "', но в той же строке, а не в свободной форме yaml form way –

1

Просто заключите значение UMASK в кавычки.

Не работает:

pip: 
    name: 
     - pika 
     - argparse 
    umask: 0022 

ли работа:

pip: 
    name: 
     - pika 
     - argparse 
    umask: "0022" 

Та же проблема, возникавшие с модулем "файл", пока она не была исправлена ​​с https://github.com/ansible/ansible/issues/9196. Как указывали другие, используется синтаксис key = value.