从Ansible运行sed命令

时间:2018-10-28 17:42:31

标签: shell ansible command line

我正在尝试更新一些.sql文件,并在命令行中使用sed成功,但无法从ansible使其正常工作。

该命令类似于:

  1. cd / tmp / Ratings_DB
  2. 以sudo身份运行命令-sudo sed -i's / TYPE / ENGINE /'* .sql
  3. 文件是从root帐户创建的,因此是sudo。

我的目标是将ENGINE替换为<script type="text/javascript" src="/assest/js/main.js"></script> <link rel="stylesheet" type="text/css" href="/assest/css/styles.css"> ,因为它们是较旧的.sql转储。除非有直接在MySQL中进行处理的方法-我无法导入它们。

  

错误   任务执行期间发生了异常。要查看完整的回溯,请使用-vvv。错误是:OSError:[Errno 2]没有这样的文件或目录:'/ home / jesse / Desktop / playbooks / cd / tmp / Ratings_DB'

似乎我没有以某种方式重定向到正确的目录。

2 个答案:

答案 0 :(得分:0)

您不必制作'cd',您可以直接引用文件名。另外,最好使用'become = true'而不是sudo:

---
- name: pb
  hosts: localhost
  become: true
  tasks:
    - name: replace in sql files
      shell: sed -i 's/TYPE/ENGINE/' /tmp/*.sql

以以下方式运行剧本:

  

$ ansible-playbook pb.yml -e“ ansible_sudo_pass = 1234”

答案 1 :(得分:0)

最好使用 replace 或 lineinfile 模块而不是通用的 sed 。

例如

- replace:
path: /etc/hosts
regexp: '(\s+)old\.host\.name(\s+.*)?$'
replace: '\1new.host.name\2'
backup: yes