Packer - не отвечает после перезагрузки виртуальной машины Windows через поставщика сценариев Powershell - PullRequest
0 голосов
/ 08 ноября 2019

Проблема: Я не могу заставить Packer работать при запуске сценария powershell, который завершается перезагрузкой виртуальной машины Windows после установки программного обеспечения.

После завершения сценария (scripts / watchMaker_stigVM.ps1),машина перезагрузится, и упаковщик перейдет к следующему поставщику. Следующий поставщик в этом случае - встроенный поставщик Powershell для sysprep

Зависает упаковщик, затем выдает ошибку и удаляет ресурсы для очистки

То, что я пробовал: "

1) Использование поставщика пакета Windows-Restart после поставщика сценариев Powershell, который приводит к перезагрузке виртуальной машины (scripts / watchMaker_stigVM.ps1).

2) Добавление в "restart_check_command "для проверки раздела реестра« RebootPending »

3) Добавление в« Pause_before » после поставщика сценариев Powershell и до поставщика средств для перезапуска Windows, чтобы дать машине время вернуться в оперативный режим и разрешить повторное подключение WinRM.

Поставщик с указанными выше попытками:

    "provisioners": [
{
  "type": "powershell",
  "scripts": [
  "scripts/watchMaker_stigVM.ps1"
  ]
},
{
  "type": "powershell",
  "pause_before": "240s",
  "inline": ["dir c:\\"]
},
{
  "type": "windows-restart",
  "timeout": "2h",
  "restart_check_command": "HKLM:SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Component Based Servicing\\RebootPending"
},
{
  "type": "powershell",
  "pause_before": "120s",
  "inline": ["dir c:\\"]
},
{
  "type": "powershell",
  "inline": [
    "if( Test-Path $Env:SystemRoot\\windows\\system32\\Sysprep\\unattend.xml ){ rm $Env:SystemRoot\\windows\\system32\\Sysprep\\unattend.xml -Force}",
    "& $env:SystemRoot\\System32\\Sysprep\\Sysprep.exe /oobe /generalize /quiet /quit",
    "while($true) { $imageState = Get-ItemProperty HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Setup\\State | Select ImageState; if($imageState.ImageState -ne 'IMAGE_STATE_GENERALIZE_RESEAL_TO_OOBE') { Write-Output $imageState.ImageState; Start-Sleep -s 10  } else { break } }"
  ]
}

]}

Сценарий сборки, использованный в приведенном выше сценарии, без провайдеров Windows-Restart или Pause:

    {
  "variables": {
    "client_id": "",
    "client_secret": "",
    "object_id": "",
    "tenant_id": "",
    "subscription_id": "",
    "managed_image_name": "",
    "managed_image_resource_group_name": "",
    "location": "",
    "os_type": "",
    "image_publisher": "",
    "image_offer": "",
    "image_sku": "",
    "dept": "",
    "task": ""
  },
  "builders": [
    {
      "type": "azure-arm",
      "client_id": "{{user `client_id`}}",
      "client_secret": "{{user `client_secret`}}",
      "tenant_id": "{{user `tenant_id`}}",
      "subscription_id": "{{user `subscription_id`}}",
      "managed_image_resource_group_name": "{{user `managed_image_resource_group_name`}}",
      "managed_image_name": "{{user `managed_image_name`}}",
      "os_type": "{{user `os_type`}}",
      "image_publisher": "{{user `image_publisher`}}",
      "image_offer": "{{user `image_offer`}}",
      "image_sku": "{{user `image_sku`}}",
      "communicator": "winrm",
      "winrm_use_ssl": true,
      "winrm_insecure": true,
      "winrm_timeout": "2h",
      "winrm_username": "packer",
      "azure_tags": {
        "dept": "{{user `dept`}}",
        "task": "{{user `task`}}"
      },
      "location": "{{user `location`}}",
      "vm_size": "Standard_B4ms"
    }
  ],
  "provisioners": [
    {
      "type": "powershell",
      "timeout": "2h",
      "script":
        "scripts/watchMaker_stigVM.ps1"
    },
    {
      "type": "powershell",
      "inline": [
        "if( Test-Path $Env:SystemRoot\\windows\\system32\\Sysprep\\unattend.xml ){ rm $Env:SystemRoot\\windows\\system32\\Sysprep\\unattend.xml -Force}",
        "& $env:SystemRoot\\System32\\Sysprep\\Sysprep.exe /oobe /generalize /quiet /quit",
        "while($true) { $imageState = Get-ItemProperty HKLM:\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Setup\\State | Select ImageState; if($imageState.ImageState -ne 'IMAGE_STATE_GENERALIZE_RESEAL_TO_OOBE') { Write-Output $imageState.ImageState; Start-Sleep -s 10  } else { break } }"
      ]
    }
  ]
}

Журнал упаковщика, показывающий успешное завершение сценария Powershell "SCRIpts / watchMaker_stigVM.ps1 ", следующий встроенный поставщик Powershell, пытающийся запустить, повесить, завершить работу упаковщика и удалить ресурсы

    ==> azure-arm: 2019-11-08 17:36:51,030 [watchmaker.workers.base.SaltWindows][INFO ][3392]: Applying the salt "highstate", states=highstate
==> azure-arm: 2019-11-08 17:36:51,030 [watchmaker.workers.base.SaltWindows][DEBUG][3392]: Command: C:\Salt\salt-call.bat --local --retcode-passthrough --no-color --config-dir C:\Watchmaker\Salt\conf --log-file C:\Watchmaker\Logs\salt_call.debug.log --log-file-level debug --log-level error --out quiet --return local state.highstate
==> azure-arm: 2019-11-08 17:38:04,492 [watchmaker.workers.base.SaltWindows][DEBUG][3392]: Command retcode: 0
==> azure-arm: 2019-11-08 17:38:04,492 [watchmaker.workers.base.SaltWindows][INFO ][3392]: Salt states all applied successfully!
==> azure-arm: 2019-11-08 17:38:04,492 [watchmaker.workers.base.SaltWindows][INFO ][3392]: Cleanup Time...
==> azure-arm: 2019-11-08 17:38:04,492 [watchmaker.workers.base.SaltWindows][DEBUG][3392]: working_dir=C:\Watchmaker\WorkingFiles\Salt-1_5kqmta
==> azure-arm: 2019-11-08 17:38:04,508 [watchmaker.workers.base.SaltWindows][INFO ][3392]: Deleted working directory...
==> azure-arm: 2019-11-08 17:38:04,508 [watchmaker.workers.base.SaltWindows][INFO ][3392]: Exiting cleanup routine...
==> azure-arm: 2019-11-08 17:38:04,508 [watchmaker.Client][INFO ][3392]: Reboot scheduled. System will reboot after the script exits.
==> azure-arm: 2019-11-08 17:38:04,648 [watchmaker.Client][INFO ][3392]: Stop time: 2019-11-08 17:38:04.648938
==> azure-arm: Provisioning with Powershell...
==> azure-arm: Provisioning with powershell script: C:\Users\Giann\AppData\Local\Temp\powershell-provisioner582533063
==> azure-arm: Provisioning step had errors: Running the cleanup provisioner, if present...
==> azure-arm:
==> azure-arm: Cleanup requested, deleting resource group ...

Как видите, скрипт Powershell завершает создание виртуальной машиныперезагрузка, которая не инициируется самим Пакером.

==> azure-arm: 2019-11-08 17: 38: 04,508 [watchmaker.Client] [INFO] [3392]: перезагрузкапо расписанию. Система будет перезагружена после выхода из сценария.

Предыдущий упаковщик Успешно настроен для контекста:

Я успешно построил виртуальную машину Windows с упаковщиком, устанавливая программное обеспечение с помощью сценария Powershellпоставщика, а затем обратитесь к встроенному поставщику powershell, чтобы подготовить sysprep-изображение.

Спасибо за любую помощь по этому вопросу.

...