2015-01-09 21 views
7

Chúng tôi muốn triển khai một ứng dụng trên Windows Server 2012 với Ansible 1.8.2.Thực hiện .exe trên Windows với Ansible

Tôi đã tìm kiếm và tìm thấy a list mô-đun cho Windows. Có một mô-đun để thực hiện một .exe?

Có ai đó đã khởi chạy tệp .exe trên Windows với Ansible không?

Trả lời

7

Tài liệu nói 'Lưu ý có một vài mô-đun Ansible khác không bắt đầu bằng "giành chiến thắng" cũng có chức năng, bao gồm "slurp", "raw" và "setup" (cách thực tế thu thập tác phẩm) . ' (http://docs.ansible.com/intro_windows.html), vì vậy tôi sẽ giả định rằng các mô-đun 'thô' (http://docs.ansible.com/raw_module.html) nên làm việc (tôi không có máy ảo Windows hiện có sẵn cho chơi xung quanh):

Vì vậy, hãy thử một playbook với:

- raw: <your .exe> 

hoặc một lệnh Adhoc Ansible:

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

Chỉ cần thử tính năng này và "thô" hoạt động tốt để chạy tệp thực thi trên Windows Server 2012 R2. – sfuqua

+0

Nó hoạt động trên Windows 10. Cảm ơn bạn. –

0

tôi đã giải quyết được vấn đề với psexec

Trong Playbook

- name: test raw module 
    hosts: Windows 
    gather_facts: false 
    tasks: 
    - name: Stop process 01 
     script: startProcess.ps1 

Và 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 

Bạn cần phải cài đặt psexec trong PC từ xa. Công tắc cho psexec

5

Mô-đun raw có thể hoạt động, như những người khác đã đề xuất. Một thách thức là nó sẽ không "biết" nếu thực thi đã được chạy trước đó. Kết hợp với mô-đun win_statwhen có điều kiện, bạn có thể tạo tập lệnh phát hiện có điều gì đó đã được cài đặt và chạy không nếu chưa được cài đặt. Ví dụ, tôi muốn cài đặt 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 

Lưu ý rằng tôi đã tìm thấy các đối số dòng lệnh cho BuildTools_Full.exe bằng cách thủ công chạy

.\BuildTools_Full.exe /h 
3

There's cách khác (và các module) là không rõ ràng như vậy ngay từ đầu: win_service module kết hợp với số win_nssm module.

sfuqua đã được đề cập, phần lớn thời gian bạn muốn biết "trạng thái" của ứng dụng - ví dụ: nếu nó đã được cài đặt, hiện đang chạy, dừng lại và như vậy. Do đó, khái niệm về một Windows service là một giải pháp rất tốt. Và rất dễ dàng để có được một dịch vụ như vậy thông qua việc sử dụng Non-Sucking Service Manager (nssm).

Với Ansible win_nssm module that'sa Cakewalk:

- name: Install & start application as Windows service (via nssm) 
    win_nssm: 
     name: "your_app_name" 
     application: "{{path_to_your_apps_exe}}" 
     state: restarted 

Bây giờ chúng ta có một dịch vụ Windows thực sự và có thể thao tác nhà nước với sự giúp đỡ của win_service module, cũng giống như chúng ta đang sử dụng để từ các ứng dụng chạy trên Linux :

- name: Control app Windows service 
    win_service: 
     name: "your_app_name" 
     state: stopped 

cách tiếp cận này giải phóng chúng ta về nhu cầu sử dụng các mô-đun thô (trong đó có một số nhược điểm, như vô hiệu hóa hỗ trợ điều khiển biến đổi) và những rắc rối để viết và duy trì kịch bản cho nhiệm vụ đơn giản này.

2

Như đã đề cập here, bạn có thể sử dụng win_command. Nhưng nếu bạn cần chạy một .exe tương tác, bạn có thể cần chạy nó qua PsExec. Ví dụ: Playbook có thể trông giống như sau:

- 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 
Các vấn đề liên quan