如何使用Ansible来生成/etc/profile或/etc/bash.bashrc文件

如何使用Ansible来生成/etc/profile或/etc/bash.bashrc文件,bash,shell,ansible,Bash,Shell,Ansible,我正在尝试使用Ansible源代码/etc/profile或/etc/bash.bashrc,但不断收到错误消息 TASK [Source Profile] ********************************************************************* fatal: [localhost]: FAILED! => {"changed": false, "cmd": "source /etc/profile", _ "failed":

我正在尝试使用Ansible源代码/etc/profile或/etc/bash.bashrc,但不断收到错误消息

TASK [Source Profile] 
*********************************************************************

fatal: [localhost]: FAILED! => {"changed": false, "cmd": "source /etc/profile", _
    "failed": true, "msg": "[Errno 2] No such file or directory", "rc": 2}
我的代码是

- name: Source Profile
  shell: source /etc/bash.bashrc
  args:
    executable: /bin/bash
我尝试了很多其他的东西

例如
命令:source/etc/bash.bashrc
(也尝试了
/etc/profile
而不是
/etc/bash.bashrc

我如何获取资源或应用此资源的最佳方式是什么


感谢您

再次检查您试图获取的文件是否存在,错误消息“没有这样的文件或目录”告诉您文件不存在,例如,这在本地有效:

# ansible-playbook -i "localhost," -c local test.yml
---
- hosts: localhost
  tasks:
    - name: test source profile
      shell: source /etc/bashrc
      register: output 
      args:
        executable: /bin/bash

    - debug: msg="{{ output }}" 
在本例中,正在尝试源代码
/etc/bashrc

另外,请注意
寄存器:output
和:

- debug: msg="{{ output }}"
这将把命令的输出注册到一个名为
output
的变量中,并打印它的内容,试一试,它可以让您对错误有更多的了解

它将输出如下内容:

$ ansible-playbook -i "localhost," -c local test.yml

PLAY [localhost] ***************************************************************

TASK [setup] *******************************************************************
ok: [localhost]

TASK [test source profile] *****************************************************
changed: [localhost]

TASK [debug] *******************************************************************     
ok: [localhost] => {                      
    "msg": {                              
        "changed": true,                  
        "cmd": "source /etc/bashrc",      
        "delta": "0:00:00.004553",        
        "end": "2017-09-22 21:15:24.654777",                                         
        "rc": 0,                          
        "start": "2017-09-22 21:15:24.650224",                                       
        "stderr": "",                     
        "stdout": "",                     
        "stdout_lines": [],               
        "warnings": []                    
    }                                     
} 

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

文件肯定在那里。所有Ubuntu至少应该有/etc/profile和/或/etc/bash.bashrc。此外,当我在本地运行该命令时,它也可以正常工作。仔细检查,可能您在本地运行该命令,但不在远程系统中,并非毫无原因,您会从我测试过的ansible“No-some file or directory”中得到错误,并且它肯定在@nbari中。我通过尝试编辑文件进行了测试。它能够添加一行。由于某些原因,它只是不可用。@automatable我更新了答案,以便您了解如何调试命令的输出,试一试应该会给您一些提示。我对Ansible不太熟悉,无法提出解决方案,但问题是您正在尝试执行一个名为两个单词的程序“source/etc/profile”。我必须同意[用户:chepner]关于shell命令。通过简单的文档查找,
shell
命令应该是要自己运行的可执行文件,就像“shell:source”一样,然后使用args作为任何空格分隔的参数来传递。快速Google Groups search得出了这样的结论:或者您可以删除
args
可选命令,并放置完整的string在
shell
中。例如
shell:source/etc/bash.bashrc
其他替代方法是将
command:source/home/ubuntu/.bash\u profile executable=/bin/bash
作为一行程序,而不是
shell
,但您知道这项任务基本上没有意义吗?源代码值将在这段时间后立即丢失问结局。