0

У меня проблема с установкой пакетов Chocolatey и Chocolatey с использованием Ansible на Windows Server 2008 R2. Все отлично работало на Windows Server 2012 R2 (у него встроенный PowerShell v3.0).Ошибка при установке Chocolatey через Ansible on Windows

У меня возникла проблема с сценариями PowerShell в Ansible documentation, но я побежал Set-ExecutionPolicy RemoteSigned, что помогло. Я установил Windows PowerShell 3.0, чтобы Ansible мог работать. Теперь, когда я бег пьес, у меня есть эта ошибка:

failed: [192.168.1.1] => {"failed": true, "parsed": false} 

Mode    LastWriteTime  Length Name        
----    -------------  ------ ----        
d----   6/16/2015 6:16 AM   chocInstall      
Downloading https://chocolatey.org/api/v2/package/chocolatey/ to C:\Users\ADMINI~1\AppData\Local\Temp\chocolatey\chocInstall\chocolatey.zip 
Download 7Zip commandline tool 
Downloading https://chocolatey.org/7za.exe to C:\Users\ADMINI~1\AppData\Local\Temp\chocolatey\chocInstall\7za.exe 
Extracting C:\Users\ADMINI~1\AppData\Local\Temp\chocolatey\chocInstall\chocolatey.zip to C:\Users\ADMINI~1\AppData\Local\Temp\chocolatey\chocInstall... 
Installing chocolatey on this machine 
{ 
    "changed": false, 
    "msg": "The term \u0027C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\chocolatey\\chocInstall\\tools\>\chocolateyInstall.ps1\u0027 is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.", 
    "failed": true 
} 

7-Zip (A) 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18 

Processing archive: C:\Users\ADMINI~1\AppData\Local\Temp\chocolatey\chocInstall\chocolatey.zip 

Extracting _rels\.rels 
Extracting chocolatey.nuspec 
Extracting tools\chocolateyInstall.ps1 
Extracting tools\chocolateysetup.psm1 
Extracting tools\init.ps1 
Extracting tools\chocolateyInstall\choco.exe 
Extracting tools\chocolateyInstall\choco.exe.ignore 
Extracting package\services\metadata\core-properties\61804721eec44e8592a61904d0a62022.psmdcp 
Extracting [Content_Types].xml 

Everything is Ok 

Files: 9 
Size:  3738621 
Compressed: 1259522 


FATAL: all hosts have already failed -- aborting 

После второго запуска, у меня есть другая ошибка:

failed: [192.168.1.1] => {"changed": false, "failed": true} 
msg: The specified module 'C:\Users\Administrator\AppData\Local\Temp\chocolatey\chocInstall\tools\chocolateyInstall\helpers\chocolateyInstaller.psm1' was not loaded because no valid module file was found in any module directory. 

FATAL: all hosts have already failed -- aborting 

Я заметил, что анзибль имеет проблему распаковки шоколадных от %TEMP% до %PROGRAMDATA% , Итак, после запуска chocolateyInstall.ps1 из %TEMP%\chocolatey\helpers (я думаю, что это хороший путь) У меня есть эта ошибка:

failed: [192.168.1.1] => {"changed": false, "choco_error_cmd": "choco.exe list --local-only chocolatey", "choco_error_log": "", 
"failed": true} msg: Error checking installation status for chocolatey 

FATAL: all hosts have already failed -- aborting 

Мне нужно автоматизировать установки и настройки инструментов, таких как: JDK, котом, FireFox и т.д. Вот пример из моей пьесы:

--- 
- hosts: windows 
    vars: 
    java: 
     JAVA_HOME: "C:\\Program Files\\Java\\jdk1.7.0_76" 
    tasks: 
# INSTALL FIREFOX 
    - name: install_firefox 
     win_chocolatey: 
     name: firefox -y 
     state: present 
# INSTALL AND SET JAVA_HOME 
    - name: install_and_set_java_home 
     win_chocolatey: 
     name: jdk7 -y 
     version: 7.0.76 
     environment: java 
     state: present 
+0

Это выдающийся первый вопрос! Надеюсь, вы получите немного голосов и найдете ответ! –

+0

Если вы видите это только в 2008 году, у него могут возникнуть проблемы с установкой .net framework 4.0 (как вы упомянули в одном из своих ответов). Установленный PowerShell также является обязательным требованием, который, по моему мнению, не приходит по умолчанию (который вы преодолели с помощью WMF 3.0). – ferventcoder

+0

Кажется, вы столкнулись с этим: https://github.com/chocolatey/chocolatey.org/issues/467, который был исправлен и развернут. – ferventcoder

ответ

0

Я изменил мой сборник пьес, теперь я запускаю его только один раз, но у меня есть ошибки (такой же, как раньше) об установке Чоко. Если это помогает кто-то здесь решение для игнорирования отказа в сборнике пьес:

--- 
- hosts: windows 
    tasks: 
# INSTALL CHOCO 
    - name: install_chocolatey 
     win_chocolatey: 
     name: chocolatey -y 
     state: present 
     ignore_errors: yes 
# INSTALL FIREFOX 
    - name: install_firefox 
     win_chocolatey: 
     name: firefox -y 
     state: present 
. 
. 
. 

Я надеюсь, что это поможет;)

0

Возможно, у вас может быть некорректная кодировка в вашей команде.

Installing chocolatey on this machine 
{ 
    "changed": false, 
    "msg": "The term \u0027C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\chocolatey\\chocInstall\\tools\>\chocolateyInstall.ps1\u0027 is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.", 
    "failed": true 
} 

апострофов печатаются в Unicode literals

"The term \u0027...chocolateyInstall.ps1\u0027 is not recognized..."

Это просто то, что анзибль делает? Можете ли вы показать нам раздел/команду для воспроизведения пьесы Chocolatey?

Как, где вы получите это от

# INSTALL FIREFOX 
    - name: install_firefox 
     win_chocolatey: 
0

Там нет шоколадного установить, что я бег.

Сценарий Powershell win_chocolatey.ps1 должен устанавливать пакеты (менеджер пакетов).

Перед установкой следует искать шоколадную установку на машине для окон. Ниже код из win_chocolatey.ps1 сценария:

#!powershell 
# This file is part of Ansible 
# 
# Copyright 2014, Trond Hindenes <[email protected]> 
# 
# Ansible is free software: you can redistribute it and/or modify 
# it under the terms of the GNU General Public License as published by 
# the Free Software Foundation, either version 3 of the License, or 
# (at your option) any later version. 
# 
# Ansible is distributed in the hope that it will be useful, 
# but WITHOUT ANY WARRANTY; without even the implied warranty of 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
# GNU General Public License for more details. 
# 
# You should have received a copy of the GNU General Public License 
# along with Ansible. If not, see <http://www.gnu.org/licenses/>. 

$ErrorActionPreference = "Stop" 

# WANT_JSON 
# POWERSHELL_COMMON 

$params = Parse-Args $args; 
$result = New-Object PSObject; 
Set-Attr $result "changed" $false; 

If ($params.name) 
{ 
    $package = $params.name 
} 
Else 
{ 
    Fail-Json $result "missing required argument: name" 
} 

If ($params.force) 
{ 
    $force = $params.force | ConvertTo-Bool 
} 
Else 
{ 
    $force = $false 
} 

If ($params.upgrade) 
{ 
    $upgrade = $params.upgrade | ConvertTo-Bool 
} 
Else 
{ 
    $upgrade = $false 
} 

If ($params.version) 
{ 
    $version = $params.version 
} 
Else 
{ 
    $version = $null 
} 

If ($params.source) 
{ 
    $source = $params.source.ToString().ToLower() 
} 
Else 
{ 
    $source = $null 
} 

If ($params.showlog) 
{ 
    $showlog = $params.showlog | ConvertTo-Bool 
} 
Else 
{ 
    $showlog = $null 
} 

If ($params.state) 
{ 
    $state = $params.state.ToString().ToLower() 
    If (($state -ne "present") -and ($state -ne "absent")) 
    { 
     Fail-Json $result "state is $state; must be present or absent" 
    } 
} 
Else 
{ 
    $state = "present" 
} 

Function Chocolatey-Install-Upgrade 
{ 
    [CmdletBinding()] 

    param() 

    $ChocoAlreadyInstalled = get-command choco -ErrorAction 0 
    if ($ChocoAlreadyInstalled -eq $null) 
    { 
     #We need to install chocolatey 
     iex ((new-object net.webclient).DownloadString("https://chocolatey.org/install.ps1")) 
     $result.changed = $true 
     $script:executable = "C:\ProgramData\chocolatey\bin\choco.exe" 
    } 
    else 
    { 
     $script:executable = "choco.exe" 

     if ((choco --version) -lt '0.9.9') 
     { 
      Choco-Upgrade chocolatey 
     } 
    } 
} 


Function Choco-IsInstalled 
{ 
    [CmdletBinding()] 

    param(
     [Parameter(Mandatory=$true, Position=1)] 
     [string]$package 
    ) 

    $cmd = "$executable list --local-only $package" 
    $results = invoke-expression $cmd 

    if ($LastExitCode -ne 0) 
    { 
     Set-Attr $result "choco_error_cmd" $cmd 
     Set-Attr $result "choco_error_log" "$LastExitCode" 

     Throw "Error checking installation status for $package" 
    }  

    If ("$results" -match " $package .* (\d+) packages installed.") 
    { 
     return $matches[1] -gt 0 
    } 

    $false 
} 

Function Choco-Upgrade 
{ 
    [CmdletBinding()] 

    param(
     [Parameter(Mandatory=$true, Position=1)] 
     [string]$package, 
     [Parameter(Mandatory=$false, Position=2)] 
     [string]$version, 
     [Parameter(Mandatory=$false, Position=3)] 
     [string]$source, 
     [Parameter(Mandatory=$false, Position=4)] 
     [bool]$force 
    ) 

    if (-not (Choco-IsInstalled $package)) 
    { 
     throw "$package is not installed, you cannot upgrade" 
    } 

    $cmd = "$executable upgrade -dv -y $package" 

    if ($version) 
    { 
     $cmd += " -version $version" 
    } 

    if ($source) 
    { 
     $cmd += " -source $source" 
    } 

    if ($force) 
    { 
     $cmd += " -force" 
    } 

    $results = invoke-expression $cmd 

    if ($LastExitCode -ne 0) 
    { 
     Set-Attr $result "choco_error_cmd" $cmd 
     Set-Attr $result "choco_error_log" "$results" 
     Throw "Error installing $package" 
    } 

    if ("$results" -match ' upgraded (\d+)/\d+ package\(s\)\. ') 
    { 
     if ($matches[1] -gt 0) 
     { 
      $result.changed = $true 
     } 
    } 
} 

Function Choco-Install 
{ 
    [CmdletBinding()] 

    param(
     [Parameter(Mandatory=$true, Position=1)] 
     [string]$package, 
     [Parameter(Mandatory=$false, Position=2)] 
     [string]$version, 
     [Parameter(Mandatory=$false, Position=3)] 
     [string]$source, 
     [Parameter(Mandatory=$false, Position=4)] 
     [bool]$force, 
     [Parameter(Mandatory=$false, Position=5)] 
     [bool]$upgrade 
    ) 

    if (Choco-IsInstalled $package) 
    { 
     if ($upgrade) 
     { 
      Choco-Upgrade -package $package -version $version -source $source -force $force 
     } 

     return 
    } 

    $cmd = "$executable install -dv -y $package" 

    if ($version) 
    { 
     $cmd += " -version $version" 
    } 

    if ($source) 
    { 
     $cmd += " -source $source" 
    } 

    if ($force) 
    { 
     $cmd += " -force" 
    } 

    $results = invoke-expression $cmd 

    if ($LastExitCode -ne 0) 
    { 
     Set-Attr $result "choco_error_cmd" $cmd 
     Set-Attr $result "choco_error_log" "$results" 
     Throw "Error installing $package" 
    } 

    $result.changed = $true 
} 

Function Choco-Uninstall 
{ 
    [CmdletBinding()] 

    param(
     [Parameter(Mandatory=$true, Position=1)] 
     [string]$package, 
     [Parameter(Mandatory=$false, Position=2)] 
     [string]$version, 
     [Parameter(Mandatory=$false, Position=3)] 
     [bool]$force 
    ) 

    if (-not (Choco-IsInstalled $package)) 
    { 
     return 
    } 

    $cmd = "$executable uninstall -dv -y $package" 

    if ($version) 
    { 
     $cmd += " -version $version" 
    } 

    if ($force) 
    { 
     $cmd += " -force" 
    } 

    $results = invoke-expression $cmd 

    if ($LastExitCode -ne 0) 
    { 
     Set-Attr $result "choco_error_cmd" $cmd 
     Set-Attr $result "choco_error_log" "$results" 
     Throw "Error uninstalling $package" 
    } 

    $result.changed = $true 
} 
Try 
{ 
    Chocolatey-Install-Upgrade 

    if ($state -eq "present") 
    { 
     Choco-Install -package $package -version $version -source $source ` 
      -force $force -upgrade $upgrade 
    } 
    else 
    { 
     Choco-Uninstall -package $package -version $version -force $force 
    } 

    Exit-Json $result; 
} 
Catch 
{ 
    Fail-Json $result $_.Exception.Message 
} 

Как вы видите его установки шоколадного, если он не найден на компьютере.

Powershell скрипт для установки шоколадного загружается из https://chocolatey.org/install.ps1

еще одна вещи ... в шоколадном установить журналы есть исключение

2015-06-17 01:13:40,156 [ERROR] - Error deserializing response of type chocolatey.infrastructure.app.configuration.ConfigFileSettings: Exception of type 'System.OutOfMemoryException' was thrown.

2015-06-17 01:13:40,187 [ERROR] - Exception of type System.OutOfMemoryException' was thrown.

я нашел где-то, что я должен использовать:

winrm set winrm/config/winrs @{MaxMemoryPerShellMB="MemoryInMB"}

, но это не помогает установке

0

Требуется Windows Server 2008 R2 с пакетом обновления 1 (SP1) с установленной системой управления Windows 3.0.

Я сделал несколько шагов, чтобы запустить это.

  1. установлен .NET Framework 4.0 на Windows Server 2008 с сайта Microsoft
  2. Выполненная команда в Powershell окна: Set-ExecutionPolicy RemoteSigned
  3. установлен компонент Windows Management Framework 3.0 с сайта Microsoft
  4. Установленные обновления от анзибль документации : http://support.microsoft.com/kb/2842230
  5. Выполненная сценарий система подготовки из анзибль документации: https://github.com/ansible/ansible/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1

Теперь, после запуска на четкой системы впервые PlayBook у меня есть ошибка (при установке Firefox):

failed: [192.168.1.117] => {"failed": true, "parsed": false} 

Mode    LastWriteTime  Length Name        
----    -------------  ------ ----        
d----  2015-06-17  15:32   chocInstall      
Downloading https://chocolatey.org/api/v2/package/chocolatey/ to C:\Users\ADMINI~1\AppData\Local\Temp\chocolatey\chocInstall\chocolatey.zip 
Download 7Zip commandline tool 
Downloading https://chocolatey.org/7za.exe to C:\Users\ADMINI~1\AppData\Local\Temp\chocolatey\chocInstall\7za.exe 
Extracting C:\Users\ADMINI~1\AppData\Local\Temp\chocolatey\chocInstall\chocolatey.zip to C:\Users\ADMINI~1\AppData\Local\Temp\chocolatey\chocInstall... 
Installing chocolatey on this machine 
{ 
    "changed": false, 
    "msg": "The term \u0027C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\chocolatey\\chocInstall\\tools\\chocolateyInstall.ps1\u0027 is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.", 
    "failed": true 
} 

7-Zip (A) 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18 

Processing archive: C:\Users\ADMINI~1\AppData\Local\Temp\chocolatey\chocInstall\chocolatey.zip 

Extracting _rels\.rels 
Extracting chocolatey.nuspec 
Extracting tools\chocolateyInstall.ps1 
Extracting tools\chocolateysetup.psm1 
Extracting tools\init.ps1 
Extracting tools\chocolateyInstall\choco.exe 
Extracting tools\chocolateyInstall\choco.exe.ignore 
Extracting package\services\metadata\core-properties\61804721eec44e8592a61904d0a62022.psmdcp 
Extracting [Content_Types].xml 

Everything is Ok 

Files: 9 
Size:  3738621 
Compressed: 1259522 


FATAL: all hosts have already failed -- aborting 

После второго запуска все нормально сезам TOMCAT установки. Ошибка:

Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/ansible/runner/connection_plugins/winrm.py", line 161, in exec_command 
    result = self._winrm_exec(cmd_parts[0], cmd_parts[1:], from_exec=True) 
    File "/usr/local/lib/python2.7/dist-packages/ansible/runner/connection_plugins/winrm.py", line 122, in _winrm_exec 
    self.shell_id = self.protocol.open_shell() 
    File "/usr/local/lib/python2.7/dist-packages/winrm/protocol.py", line 118, in open_shell 
    rs = self.send_message(xmltodict.unparse(rq)) 
    File "/usr/local/lib/python2.7/dist-packages/winrm/protocol.py", line 190, in send_message 
    return self.transport.send_message(message) 
    File "/usr/local/lib/python2.7/dist-packages/winrm/transport.py", line 110, in send_message 
    raise WinRMTransportError('http', error_message) 
WinRMTransportError: 500 WinRMTransport. Bad HTTP response returned from server. Code 500 
fatal: [192.168.1.117] => failed to exec cmd PowerShell -NoProfile -NonInteractive -EncodedCommand KABOAGUAdwAtAEkAdABlAG0AIAAtAFQAeQBwAGUAIABEAGkAcgBlAGMAdABvAHIAeQAgAC0AUABhAHQAaAAgACQAZQBuAHYAOgB0AGUAbQBwACAALQBOAGEAbQBlACAAIgBhAG4AcwBpAGIAbABlAC0AdABtAHAALQAxADQAMwA0ADUANAA4ADAAOQAyAC4ANgAtADEANgAzADkANAAwADEAMwA4ADUAMAAwADIAMQAzACIAKQAuAEYAdQBsAGwATgBhAG0AZQAgAHwAIABXAHIAaQB0AGUALQBIAG8AcwB0ACAALQBTAGUAcABhAHIAYQB0AG8AcgAgACcAJwA7AA== 

FATAL: all hosts have already failed -- aborting 

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

Благодарности

+0

Я знаю, что в последнее время в Playbook появились некоторые обновления. – ferventcoder

+0

Вот проблема, и теперь она исправлена ​​- https://github.com/chocolatey/chocolatey.org/issues/467 – ferventcoder

0

Это глупо признать, но так простое решение, как изменение порядка инсталяция помогает вторую ошибке выполнения.

Я думаю, что возникла проблема с системной переменной JAVA_HOME (я установил первый jdk 7 и установил для нее переменную), шоколадная установка tomcat 7 требует установки java 8 (странно) и устанавливает системную переменную в jdk8.

My playbook устанавливает теперь tomcat, jdk7, устанавливает системную переменную в jdk7 (я пытаюсь сделать это с помощью powershell), а затем устанавливает другие вещи. Я до сих пор есть первая ошибка (при установке шоколадным)

--- 
- hosts: windows 
    vars: 
    java: 
     JAVA_HOME: "C:\\Program Files\\Java\\jdk1.7.0_76" 
    tasks: 
# INSTALL FIREFOX 
    - name: install_firefox 
     win_chocolatey: 
     name: firefox -y 
     state: present 
# TOMCAT INSTALL 
    - name: install_tomcat 
     win_chocolatey: 
     name: tomcat -y 
     version: 7.0.59 
     state: present 
# INSTALL AND SET JAVA_HOME 
    - name: install_and_set_java_home 
     win_chocolatey: 
     name: jdk7 -y 
     version: 7.0.76 
     environment: java 
     state: present 
# STOP TOMCAT SERVICE 
    - name: tomcat_service_auto_stop 
     win_service: 
     name: Apache Tomcat 7.0 Tomcat7 
     start_mode: auto 
     state: stopped 
... 
... 
... 
# DOWNLOAD SERVER.XML FOR TOMCAT 
    - name: download_server_xml 
     win_get_url: 
     url: http://192.168.1.107:8000/server.xml 
     dest: C:\Program Files\Apache Software Foundation\tomcat\apache-tomcat-7.0.59\conf\server.xml 
# DOWNLOAD SQL DRIVER 
    - name: download_sql_driver 
     win_get_url: 
     url: http://192.168.1.107:8000/sqljdbc4.jar 
     dest: C:\Program Files\Apache Software Foundation\tomcat\apache-tomcat-7.0.59\lib\sqljdbc4.jar 
# OPEN PORT 80 FOR TOMCAT 
    - name: Open_Port_80_for_Tomcat 
     script: ../scripts/portsWin2008.ps1 
# START TOMCAT SERVICE 
    - name: tomcat_service_start 
     win_service: 
     name: Apache Tomcat 7.0 Tomcat7 
     state: started 
+0

Как вы сказали, это выглядит как «проблема Unicode». У меня такая же проблема, я использую ansible-1.9 .4 и по умолчанию шоколадный, то есть 0.9.9.8, когда возможно использование win_choco модуля. I) Он разговаривает с winrm, где он запускает скрипты powershell .. затем передал controll в шоколадный. Ii) шоколадно выполнил еще несколько скриптов ps для запуска модуля желаний. Хотя я не получал эту проблему «незаметного» или «шоколадного» или любого другого места ... кто-нибудь разрешил эту проблему ??? –

1

Я думаю, я нашел решение .. сообщенный вопрос с кодированием анзиблем использования кодированием по умолчанию и язык как ansible.cfg

... 
module_lang = C 
... 

, но вы можете изменить это, чтобы провести определенную переменную как

ansible_module_lang=cp1252 
ansible_ssh_port=5986 
ansible_connection=winrm 

Это позволит решить вашу проблему

+0

Его все еще не работает для меня. :( – Akie

+0

PowerShell v3 - Start-Process -Wait на самом деле не ждет. Https://github.com/chocolatey/chocolatey.org/issues/467 – ferventcoder

1

Вопрос заключается в том, что целевая машина не позволяет достаточно памяти для каждого процесса PowerShell.

Вы можете проверить текущее выделение команды:

get-item wsman:localhost\Shell\MaxMemoryPerShellMB 

Это 300MB по умолчанию. Обычно я устанавливаю его на 2 ГБ для управляемых машин Ansible, которые исправляют ошибки вокруг System.OutOfMemoryException.

Это может быть сделано на хосте непосредственно, или с анзибль:

- name: set PowerShell memory allowance to 2GB 
    win_shell: set-item wsman:localhost\Shell\MaxMemoryPerShellMB 2048