我们希望在带有Ansible 1.8.2的Windows Server 2012上部署应用程序。
我搜索并找到了适用于Windows的a list模块。是否有一个模块来执行.exe?
有人已经在Windows上使用Ansible启动了.exe吗?
答案 0 :(得分:7)
文档说'注意还有一些其他Ansible模块不以“win”开头也有功能,包括“slurp”,“raw”和“setup”(这是事实收集的方式)作品)' (http://docs.ansible.com/intro_windows.html),所以我会认为原始的'模块(http://docs.ansible.com/raw_module.html)应该工作(我目前没有可用的Windows VM):
所以请尝试使用以下剧本:
- raw: <your .exe>
或Ansible adhoc命令:
ansible <your server> -m raw -a '<your .exe>'
答案 1 :(得分:5)
<bean id="annotationResolver" class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
<context:component-scan base-package="com.nexis.cardholder" />
<mvc:annotation-driven >
</mvc:annotation-driven>
<mvc:default-servlet-handler />
<mvc:interceptors>
<bean class="com.nexis.cardholder.session.interceptors.URLInterceptor" />
</mvc:interceptors>
<mvc:resources mapping="/resources/**" location="/resources/" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/Pages/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
<property name="order" value="1" />
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.tiles3.TilesViewResolver" >
<property name="order" value="2" />
</bean>
<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" id="tilesViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView" />
<property name="order" value="0" />
</bean>
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/views.xml</value>
</list>
</property>
</bean>
模块可以正常工作,正如其他人所建议的那样。一个挑战是它不会知道&#34;如果可执行文件之前已经运行过。结合raw
模块和win_stat
条件,您可以构建一个脚本来检测是否已安装某些内容并在未安装时运行。例如,我想安装MSBuild development tools:
when
请注意,我通过手动运行
找到了BuildTools_Full.exe的命令行参数- name: Check to see if MSBuild is installed
win_stat: path='C:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe'
register: msbuild_installed
- name: Download MS Build Tools 2013
win_get_url:
url: 'http://download.microsoft.com/download/9/B/B/9BB1309E-1A8F-4A47-72A3B3/BuildTools_Full.exe'
dest: 'c:\temp\BuildTools_Full.exe'
when: not msbuild_installed.stat.exists
- name: Install MS Build Tools 2013
raw: 'c:\temp\BuildTools_Full.exe /Quiet /NoRestart /Full'
when: not msbuild_installed.stat.exists
答案 2 :(得分:3)
另一种方式(和模块)首先不那么明显:win_service module与win_nssm module结合。
正如sfuqua已经提到的那样,大部分时间你都想知道应用程序的“状态” - 例如如果它已经安装,正在运行,停止等等。因此Windows service的概念是一个非常好的解决方案。通过Non-Sucking Service Manager (nssm)。
的使用,很容易获得这样的服务使用Ansible win_nssm module这是一个很小的步骤:
- name: Install & start application as Windows service (via nssm)
win_nssm:
name: "your_app_name"
application: "{{path_to_your_apps_exe}}"
state: restarted
现在我们有一个真正的Windows服务,可以在win_service module的帮助下操纵状态,就像我们习惯于在Linux上运行的应用程序一样:
- name: Control app Windows service
win_service:
name: "your_app_name"
state: stopped
这种方法使我们无需使用原始模块(它具有一些缺点,例如禁用变更处理程序支持)以及为这个简单任务编写和维护脚本的麻烦。
答案 3 :(得分:2)
如上所述[{3}},您可以使用here。但是,如果您需要运行交互式.exe,则可能需要通过win_command
运行它。一个示例Playbook可以如下所示:
Protocol
答案 4 :(得分:0)
我已用psexec解决了这个问题
在剧本中
- name: test raw module
hosts: Windows
gather_facts: false
tasks:
- name: Stop process 01
script: startProcess.ps1
和startProcess.ps1
#Creating the credential for the invoke-command.
$strScriptUser = "COMPUTERNAME\USer"
$strPass = "PASSWORD"
$PSS = ConvertTo-SecureString $strPass -AsPlainText -Force
$cred = new-object system.management.automation.PSCredential $strScriptUser,$PSS
#Invoke-Command to call the psexec to start the application.
invoke-command -Computer "." -Scriptblock {
c:\AnsibleTest\ps\psexec.exe -accepteula -d -h -i 1 -u COMPUTERNAME\USER -p PASSWORD PATH_TO_THE_EXE\PROGRAM.EXE
} -Credential $cred
您需要在远程PC中安装psexec。切换psexec