Мы хотим развернуть приложение на Windows Server 2012 с помощью Ansible 1.8.2.Execute .exe на Windows с Ansible
Я искал и нашел a list модулей для Windows. Есть ли модуль для выполнения .exe?
Кто-нибудь уже запускает .exe на Windows с Ansible?
Мы хотим развернуть приложение на Windows Server 2012 с помощью Ansible 1.8.2.Execute .exe на Windows с Ansible
Я искал и нашел a list модулей для Windows. Есть ли модуль для выполнения .exe?
Кто-нибудь уже запускает .exe на Windows с Ansible?
В документации говорится: «Обратите внимание, что есть еще несколько модулей 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>'
я решил проблему с 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
Модуль 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
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
Такой подход освобождает нас от необходимости использовать необработанный модуль (который имеет некоторые недостатки, как отключить поддержку обработчика изменения) и проблемы писать и поддерживать сценарии для этой простой задачи.
Как указано 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
Только что попробовал это, и «сырые» прекрасно работали для запуска исполняемого файла на Windows Server 2012 R2. – sfuqua
Работает над Windows 10. Спасибо. –