如何 运行 在 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
还没有测试代码,如果有任何格式问题,我们深表歉意。
我有一个剧本,其中 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
还没有测试代码,如果有任何格式问题,我们深表歉意。