从 ansible 运行 sed 命令

b0u*_*fr0 2 shell command line ansible

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

该命令类似于:

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

我的目标是,以取代TYPEENGINE他们年纪大了.SQL转储。除非有办法直接在 MySQL 中处理 - 我无法导入它们。

错误“任务执行期间发生异常。要查看完整的回溯,请使用 -vvv。错误是:OSError: [Errno 2] No such file or directory: '/home/jesse/Desktop/playbooks/cd /tmp/Ratings_DB'

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

小智 8

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

例如。

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


che*_*huk 6

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

---
- name: pb
  hosts: localhost
  become: true
  tasks:
    - name: replace in sql files
      shell: sed -i 's/TYPE/ENGINE/' /tmp/*.sql
Run Code Online (Sandbox Code Playgroud)

运行剧本:

$ ansible-playbook pb.yml -e "ansible_sudo_pass=1234"