相关疑难解决方法(0)

仅当文件存在时,Ansible包括任务

我正在尝试仅在文件存在时包含文件.如果我的角色的用户需要,这允许现有"任务/角色"之间的自定义"任务/角色".我找到了这个:

- include: ...
  when: condition
Run Code Online (Sandbox Code Playgroud)

但Ansible文档指出:

"评估所有任务,但条件适用于每项任务" - http://docs.ansible.com/playbooks_conditionals.html#applying-when-to-roles-and-includes

所以

- stat: path=/home/user/optional/file.yml
  register: optional_file
- include: /home/user/optional/file.yml
  when: optional_file.stat.exists
Run Code Online (Sandbox Code Playgroud)

如果包含的文件不存在,则会失败.我想可能还有另一种允许用户将任务添加到现有配方的机制.我不能让用户在我之后添加一个角色,因为他们无法控制订单:他们的角色将在我之后执行.

ansible

31
推荐指数
4
解决办法
5万
查看次数

使用ansible复制本地文件(如果存在)

我正在一个项目中工作,我们使用ansible来创建一个服务器集群.我要实现的任务之一是将本地文件复制到远程主机,只有当该文件存在于本地时.现在我正试图用这个来解决这个问题

- hosts: 127.0.0.1 
  connection: local
  tasks:
    - name: copy local filetocopy.zip to remote if exists
    - shell: if [[ -f "../filetocopy.zip" ]]; then /bin/true; else /bin/false; fi;
      register: result    
    - copy: src=../filetocopy.zip dest=/tmp/filetocopy.zip
      when: result|success
Run Code Online (Sandbox Code Playgroud)

如果失败,则显示以下消息:ERROR:任务中缺少"action"或"local_action"属性"将本地filetocopy.zip复制到远程(如果存在)"

我试图用命令任务创建这个.我已经尝试使用local_action创建此任务,但我无法使其工作.我找到的所有样本都没有将shell视为local_action,只有命令样本,并且它们都没有其他任何命令.有没有办法使用ansible来完成这项任务?

infrastructure ansible ansible-playbook

23
推荐指数
3
解决办法
4万
查看次数

Ansible - 检查本地是否存在多个文件并将其复制到远程

我对 Ansible 非常陌生,我正在尝试检查我的 Ansible 控制机中是否存在文件(至少应该有一个),如果存在,请将其复制到远程位置。

我想出了下面的内容,但是 ansible 正在检查远程而不是本地的文件。我也不太确定如何使用“with_items”。

---
- hosts: linux
  gather_facts: no
  vars:
   source_dir: /login/my_home
   server_type: WRITEVIEW
   files:
      - app.xslt
      - Configuration.xml
      - fcCN.xslt

  tasks:
   - name: Validate if file exists
     local_action: file path="{{ source_dir }}/{{ item }}" state=file
     with_items: files
Run Code Online (Sandbox Code Playgroud)

错误信息:

TASK [Validate if file exists] ****************************************************************************************************************************************** failed: [remoteserver_1 -> localhost] (item=files) => {"changed": false, "item": "files", "msg": "file (/login/my_home/files) is absent, cannot continue", "path": "/login/my_home/files", "state": "absent"} failed: [remoteserver_2 -> localhost] (item=files) => {"changed": false, "item": …

ansible ansible-2.x

3
推荐指数
1
解决办法
9233
查看次数