2015-09-18 10 views
2

Я пытаюсь использовать Ansible's lineinfile module, чтобы гарантировать, что строка, начинающаяся с *, присутствует в файле. Тем не менее, задача не каждый раз, когда со следующей ошибкойAnsible escape * in regex

TASK: [nginx | Persist soft ulimit] ******************************************* 
failed: [aa.bb.cc.dd] => {"failed": true, "parsed": false} 
BECOME-SUCCESS-xbfifannrufpkcmmfmtdigorggzvhzsx 
Traceback (most recent call last): 
    File "/home/ubuntu/.ansible/tmp/ansible-tmp-1442590356.11-253796220854159/lineinfile", line 2210, in <module> 
    main() 
    File "/home/ubuntu/.ansible/tmp/ansible-tmp-1442590356.11-253796220854159/lineinfile", line 394, in main 
    ins_aft, ins_bef, create, backup, backrefs) 
    File "/home/ubuntu/.ansible/tmp/ansible-tmp-1442590356.11-253796220854159/lineinfile", line 208, in present 
    mre = re.compile(regexp) 
    File "/usr/lib/python2.7/re.py", line 190, in compile 
    return _compile(pattern, flags) 
    File "/usr/lib/python2.7/re.py", line 244, in _compile 
    raise error, v # invalid expression 
sre_constants.error: nothing to repeat 
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011 
debug1: Reading configuration data /Users/xyz/.ssh/config 
debug1: Reading configuration data /etc/ssh_config 
debug1: /etc/ssh_config line 20: Applying options for * 
debug1: auto-mux: Trying existing master 
debug1: mux_client_request_session: master session id: 2 
Shared connection to aa.bb.cc.dd closed. 

Задача заключается в следующем

- name: Persist soft ulimit 
    lineinfile: 
    dest: /etc/security/limits.conf 
    regexp: "^\* soft nofile" 
    line: "* soft nofile 9000" 

Учитывая типичное маскирование из регулярных выражений, я предположил, что это было бы отделался \, но Я просто получаю вышеуказанную ошибку.

анзибль является 1.9.2

$ ansible --version 
$ ansible 1.9.2 
+1

Попробуйте 'регулярное выражение:«^ \\ * soft nofile "'. Если он обрабатывается с помощью Python, вам нужно использовать двойную обратную косую черту. –

+0

Я пробовал это, но не заметил, что он успешно перешел к следующей задаче, в которой было одно имя '' 'и почти идентичное имя задачи! \\\ * действительно работает. –

ответ

5

Один безошибочный способ избежать (большинство) символов, чтобы обернуть его в классе символов:

regexp: "^[*] soft nofile" 
+0

Это действительно работает, как и комментарий к вопросу, \\\ * –