如何 运行 在 Ansible 中本地执行一些任务

How to run some tasks locally in Ansible

我有一个剧本,其中 roles/tasks 要在远程主机上执行。有一种情况,我希望某些任务在本地执行,例如将工件从 svn/nexus 下载到本地服务器。

这是我的主要剧本,我从命令行传递 target_env 并使用 group_vars 目录

动态加载变量
---
 - name: Starting Deployment of Application to tomcat nodes
   hosts: '{{ target_env }}'
   become: yes
   become_user: tomcat
   become_method: sudo
   gather_facts: yes
   roles:
     - role: repodownload
       tags:
         - repodownload
     - role: stoptomcat
       tags:
         - stoptomcat

第一个角色repodownload实际上是从svn/nexus下载工件到本地server/controller。这里是这个角色的main.yml-

 - name: Downloading MyVM Artifacts on the local server
   delegate_to: localhost
   get_url: url="http://nexus.com/myrelease.war" dest=/tmp/releasename/

 - name: Checkout latest application configuration templates from SVN repo to local server
   delegate_to: localhost
   subversion:
     repo: svn://12.57.98.90/release-management/config
     dest: ../templates
     in_place: yes

但它不起作用。可能是因为在我的主要 yml 文件中,我正在成为我想要在远程主机上执行命令的用户。

如果有人可以提供帮助,请告诉我。不胜感激。

错误 -

    "changed": false,
    "module_stderr": "sudo: a password is required\n",
    "module_stdout": "",
    "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
    "rc": 1
}

鉴于这种情况,您可以通过多种方式进行。可以向仅在本地主机上运行的主剧本添加 repodownload 角色的另一个剧本。然后从角色任务中删除 delegate_to: localhost 并相应地移动变量。

 ---
 - name: Download repo
   hosts: localhost
   gather_facts: yes
   roles:
     - role: repodownload
       tags:
         - repodownload

 - name: Starting Deployment of Application to tomcat nodes
   hosts: '{{ target_env }}'
   become: yes
   become_user: tomcat
   become_method: sudo
   gather_facts: yes
   roles:
     - role: stoptomcat
       tags:
         - stoptomcat

另一种方法是从游戏关卡中删除 become 并添加到角色 stoptomcat。像下面这样的东西应该可以工作。

 ---
 - name: Starting Deployment of Application to tomcat nodes
   hosts: '{{ target_env }}'
   gather_facts: yes
   roles:
     - role: repodownload
       tags:
         - repodownload
     - role: stoptomcat
       become: yes
       become_user: tomcat
       become_method: sudo
       tags:
         - stoptomcat

还没有测试代码,如果有任何格式问题,我们深表歉意。