当 运行 一个 shell 脚本时 Ansible 剧本失败

Ansible playbook failed when running a shell script

所以我创建了这个 Ansible 剧本来:

  1. 复制一个 zip 文件并解压
  2. 复制一个 zip 文件并解压
  3. 使文件内的脚本可执行
  4. 运行 脚本
  5. 启用 2 项服务
- name: fideliplaybook
  hosts: k8scluster
  tasks:

    - name: copying file with playbook
      become: true
      copy:
        src: /home/lc/lc.zip
        dest: /home/lc/
        mode: 755

    - name: Update apt cache and install unzip
      become: true
      command: apt install unzip


    - name: unzip file
      become: true
      unarchive:
        src: /home/lc/lc.zip
        dest: /home/lc/

    - name: make script executable
      become: true
      file: dest=/home/lc/lc/install.sh mode=755

    - name: Execute the script
      become: true
      command: sh /home/lc/lc/install.sh

    - name: Enable service 1
      become: true
      command: systemctl enable service1.service

    - name: Enable service 2
      become: true
      command: systemctl enable service1.service

我在这里面临的问题是当ansible试图执行脚本“install.sh” 它以某种方式失败,因为脚本无法找到其他 2 个脚本,尽管其他脚本在同一个文件中。

所以 3 个脚本在 lc.zip 中,但是当 运行ning install.sh 使用 ansible 时,它​​找不到其他 2 个脚本。 我通过在第一个脚本中输入 2 个脚本的完整路径解决了这个问题。 但是任何人都知道为什么会出现这个问题。

当我使用 ansible 主机文件定义主机和变量时,还有一个问题,它不能像这样与 INI 一起工作:

[webservers]
www[01:50].example.com

它只在 YAML 中有效:

...
  webservers:
    hosts:
      www[01:50].example.com:

有人知道为什么吗?

关于脚本没有找到其他两个脚本,如果路径总是固定的,你应该更新其他两个脚本的完整路径或者如果你想使用相对路径,你可以尝试以下,

   - name: Execute the script
     become: true
     command: sh install.sh
     args:
       chdir: /home/lc/lc/

库存看起来不错。这里有一个测试来确认。

# cat test.ini
[webservers]
tstsrv[7:8]


# ansible-playbook -i test.ini test.yaml -u admin -k
SSH password:

PLAY [webservers] ***********************************************************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************************************
ok: [tstsrv8]
ok: [tstsrv7]

TASK [print hostname] ***********************************************************************************************************************************************
changed: [tstsrv8]
changed: [tstsrv7]

PLAY RECAP **********************************************************************************************************************************************************
tstsrv7                 : ok=2    changed=1    unreachable=0    failed=0
tstsrv8                 : ok=2    changed=1    unreachable=0    failed=0

#

如果可能,考虑 script 模块专用于目标上的 运行 脚本。