2016-02-02 2 views
2

У меня есть следующая роль:СЭД не найти файл при использовании шаблона через анзибль

--- 
- name: Replaces a string in a file 
    command: sed 's/'"{{ target_string }}"'/'"{{ new_string }}"'/g' -i {{ target_file_name }} 
      chdir="{{ target_file_location }}" 

который называется следующим образом:

- { role: string_replace_in_file, target_string: "localhost", new_string: "{{ myValue }}", target_file_name: "*.scripts.js", target_file_location: "/path/to/folder" } 

файл я хочу изменить это aea342.scripts. JS

Я получаю следующий вывод:

failed: [myMachine] => {"changed": true, "cmd": ["sed", "s/localhost/myValue/g", "-i", ".*.scripts.js"], "delta": "0:00:00.031107", "end": "2016-02-02 14:26:21.715652", "rc": 2, "start": "2016-02-02 14:26:21.684545", "warnings": ["Consider using template or lineinfile module rather than running sed"]} 
stderr: sed: can't read .*.scripts.js: No such file or directory 

Когда я запускаю sed 's/localhost/myValue/g' -i *.scripts.js вручную на моей машине, однако он работает.

ответ

1

Брюс верен. Используйте shell, чтобы развернуть шары. Я не проверял это. Вы можете попробовать:

- name: Replaces a string in a file 
    shell: sed -i "s/<search>/<replace>/g" target_file_location/target_file_name(s) 
+0

Когда-нибудь у меня будут какие-то другие вещи :) Будет обновлено соответственно – mangusbrother

+0

заменено оболочкой: sed "s/{{target_string}}/{{new_string}}/g" -i {{target_file_name}} chdir = "{{target_file_location}}", но получение stderr: sed: невозможно прочитать. *. scripts.js: Нет такого файла или каталога в любом случае – mangusbrother

+0

nv mind. это может быть причиной. перед *. подтверждающий – mangusbrother

1

Из документации анзибля на command module:

Он не будет обработан через оболочку, поэтому переменные, такие как $ HOME и операции, такие как "<", ">", "|", и "& "не будет работать

Это также означает, что globs, как« * .scripts.js », не будет расширяться при использовании командного модуля. Если вам нужно использовать «*», вам следует переключиться на использование shell module. Как следует из его названия, он запускается через командную оболочку, поэтому такие вещи, как «*», будут правильно расширены.

+0

Shell будет запускать сценарий оболочки, хотя нет? Должен ли я заключить его в сценарий оболочки? – mangusbrother

+0

Нет, вам не нужно обертывать его в сценарий оболочки. Он будет в основном выполнять команду sed так же, как если бы вы ввели ее вручную в оболочке входа. –

+0

заменен оболочкой: sed «s/{{target_string}}/{{new_string}}/g" -i {{target_file_name}} chdir = "{{target_file_location}}", но получение stderr: sed: не может читать. * .scripts.js: Нет такого файла или каталога в любом случае – mangusbrother

Смежные вопросы