2015-01-09 3 views
7

Мы хотим развернуть приложение на Windows Server 2012 с помощью Ansible 1.8.2.Execute .exe на Windows с Ansible

Я искал и нашел a list модулей для Windows. Есть ли модуль для выполнения .exe?

Кто-нибудь уже запускает .exe на Windows с Ansible?

ответ

7

В документации говорится: «Обратите внимание, что есть еще несколько модулей Ansible, которые не начинаются с« выигрыша », которые также функционируют, включая« slurp »,« raw »и« setup »(как это работает сбор фактов) «. (http://docs.ansible.com/intro_windows.html), так что я бы предположить, что 'сырой' модуль (http://docs.ansible.com/raw_module.html) должен работать (я не имею для Windows VM в настоящее время доступна для игры вокруг):

Поэтому, пожалуйста, попробуйте Playbook с:

- raw: <your .exe> 

или анзибль команда АПЧРК:

ansible <your server> -m raw -a '<your .exe>' 
+1

Только что попробовал это, и «сырые» прекрасно работали для запуска исполняемого файла на Windows Server 2012 R2. – sfuqua

+0

Работает над Windows 10. Спасибо. –

0

я решил проблему с PsExec

В Playbook

- 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 

Вам необходимо установить PsExec на удаленном компьютере. Выключатели для psexec

5

Модуль raw может работать, как и другие. Одна из проблем заключается в том, что он не будет «знать», если исполняемый файл уже был запущен раньше. В сочетании с модулем win_stat и when условным вы можете создать скрипт, который обнаруживает, что что-то было установлено и запущено, если оно не установлено. Например, я хотел установить MSBuild development tools:

- 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 

Обратите внимание, что я нашел аргументы командной строки для BuildTools_Full.exe вручную, запустив

.\BuildTools_Full.exe /h 
3

There's другим способом (и модули), которая не столь очевидным в первую очередь: win_service module в сочетании с win_nssm module.

Как уже упоминалось, sfuqua, в большинстве случаев вы хотите знать «состояние» вашего приложения - например, если он уже был установлен, в настоящее время запущен, остановлен и так далее. Поэтому концепция Windows service является очень хорошим решением. И получить такую ​​услугу очень легко, используя Non-Sucking Service Manager (nssm).

С анзиблем win_nssm module считает, что это Cakewalk:

- 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 

Такой подход освобождает нас от необходимости использовать необработанный модуль (который имеет некоторые недостатки, как отключить поддержку обработчика изменения) и проблемы писать и поддерживать сценарии для этой простой задачи.

2

Как указано here, вы можете использовать win_command. Но если вам нужно запустить интерактивный .exe, вам может понадобиться запустить его через PsExec. Пример Playbook может выглядеть следующим образом:

- name: Test PsExec 
    hosts: windows 
    tasks: 
    - name: Copy PsExec 
    win_copy: 
     src: <WORKING_FOLDER>/PsExec.exe 
     dest: "{{ ansible_user_dir }}/Desktop/PsExec.exe" 
     force: no 

    - name: Run Windows Calculator 
    win_command: "{{ ansible_user_dir }}/Desktop/psexec.exe -accepteula -nobanner -i 1 -s calc.exe" 
    register: output 
    - debug: var=output 
Смежные вопросы