9 Windows 관리를 위한 Ansible Playbooks 예

관리자가 가능한 플레이북을 사용하여 원격 Windows 시스템에서 수행할 수 있는 몇 가지 작업을 보여 드리겠습니다.

Ansible은 오늘날 시장에서 가장 많이 사용되는 DevOps 도구 중 하나입니다. Windows 서버를 구성하고 관리하는 데 사용되는 많은 Windows 모듈을 제공합니다. Windows 서버를 관리하려는 Windows에 이미 Ansible이 설치되어 있다고 가정합니다.

다음은 Windows 관리자가 매일 수행하는 일반적으로 사용되는 작업 중 일부입니다. Ansible을 사용하여 Windows를 관리하는 것이 얼마나 쉬운지 알면 놀랄 것입니다.

내 Ansible Windows 컨트롤러 시스템의 IP 주소는 192.168.0.106이고 원격 Windows 시스템의 IP 주소는 192.168.0.102입니다. 시작하기 전에 win_ping 모듈을 실행하여 Windows 원격 서버에 연결할 수 있는지 여부를 확인하십시오.

[email protected] ~
$ ansible win -m win_ping
192.168.0.102 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

원격 호스트에 성공적으로 연결되었습니다.

이제 Ansible Playbooks를 시작하겠습니다…

파일 복사

win_copy는 로컬 서버에서 원격 Windows 호스트로 파일을 복사하는 모듈입니다. 이 모듈을 사용하여 단일 PDF를 복사합니다.

아래 YAML 코드를 사용하여 소스 및 대상 경로를 지정하십시오.

[email protected] ~
$ vi copy.yml
---

- hosts: win

  tasks:

  - name: Copy File

    win_copy:

      src: C:output.pdf

      dest: C:ansible_examples
     
      remote_src: yes

win_copy에 대해 가능한 플레이북을 실행합니다.

[email protected] ~
$ ansible-playbook copy.yml

PLAY [win] ***********************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]

TASK [Copy File] *****************************************************************************************************************************
changed: [192.168.0.102]

PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=2 changed=1 unreachable=0 failed=0
skipped=0 rescued=0 ignored=0

파일이 원격 Windows 시스템의 대상 위치에 성공적으로 복사되었습니다.

MSI 설치/제거

MSI 파일을 사용하여 응용 프로그램을 설치하려면 win_get_url을 사용하여 다운로드할 MSI 파일의 경로를 언급한 다음 win_package 모듈을 사용하여 설치해야 합니다. 현재 상태는 MSI가 컴퓨터에 설치되고 응용 프로그램이 현재 상태임을 의미합니다.

여기서는 Apache를 설치합니다.

사용할 YAML 코드:

[email protected] ~
$ vi msi.yml
---
- name: Installing Apache MSI 
  hosts: win 
 
  tasks:
    - name: Download the Apache installer
      win_get_url:
        url: https://archive.apache.org/dist/httpd/binaries/win32/httpd-2.2.25-win32-x86-no_ssl.msi
        dest: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi

    - name: Install MSI
      win_package: 
        path: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi
        state: present

MSI를 사용하여 설치하려면 가능한 플레이북을 실행하십시오.

[email protected] ~
$ ansible-playbook msi.yml

PLAY [Installing Apache MSI] *****************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]

TASK [Download the Apache installer] *********************************************************************************************************
changed: [192.168.0.102]

TASK [Install MSI] ***************************************************************************************************************************
changed: [192.168.0.102]

PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=3 changed=2 unreachable=0 failed=0
skipped=0 rescued=0 ignored=0

이제 Windows 시스템으로 이동하여 Apache 응용 프로그램이 성공적으로 설치되었는지 확인합니다.

C:Userskoreantech.org>cd C:Program Files (x86)Apache Software FoundationApache2.2bin
C:Program Files (x86)Apache Software FoundationApache2.2bin>httpd -v
Server version: Apache/2.2.25 (Win32)
Server built: Jul 10 2013 01:52:12

인수가 있는 MSI를 사용하여 응용 프로그램을 설치할 수도 있습니다. 아래는 위와 동일한 예이지만 상태 대신 install 인수를 사용하여 아파치를 설치합니다.

  Windows 10에서 Netflix 독점 스피커 제어를 제공하는 방법

사용할 YAML 코드:

---

- name: Installing Apache MSI 

  hosts: win 

  tasks:

    - name: Download the Apache installer

      win_get_url:

        url: https://archive.apache.org/dist/httpd/binaries/win32/httpd-2.2.25-win32-x86-no_ssl.msi

        dest: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi


    - name: Install MSI

      win_package: 

        path: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi

        arguments:

          - /install

          - /passive

          - /norestart

MSI 파일을 사용하여 응용 프로그램을 제거하려면 win_package 모듈을 사용해야 합니다. 부재 상태는 MSI 파일을 사용하여 응용 프로그램이 제거됨을 의미합니다.

여기서는 Apache를 제거합니다.

[email protected] ~
$ vi uninstall_msi.yml

---

- name: UnInstalling Apache MSI 

  hosts: win 

  tasks:

    - name: UnInstall MSI

      win_package: 

        path: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi

        state: absent

MSI를 사용하여 제거하려면 sible-playbook을 실행하십시오.

[email protected] ~
$ ansible-playbook uninstall_msi.yml

PLAY [UnInstalling Apache MSI] *****************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]

TASK [UnInstall MSI] *************************************************************************************************************************
changed: [192.168.0.102]

PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=2 changed=1 unreachable=0 failed=0
skipped=0 rescued=0 ignored=0

이제 아파치 버전을 확인하면 애플리케이션이 제거되면서 아래와 같이 출력됩니다.

C:Program Files (x86)Apache Software FoundationApache2.2bin>httpd -v 'httpd' is not recognized as an internal or external command,
operable program or batch file.

소프트웨어(.EXE) 제거

해당 소프트웨어의 제품 ID를 사용하여 .exe 파일로 소프트웨어를 제거할 수도 있습니다.

[email protected] ~
$ vi uninstall.yml 
---

- hosts: win 

  tasks:

   - name: Uninstall 7-Zip from the exe

     win_package:

       path: C:Program Files7-ZipUninstall.exe

       product_id: 7-Zip

       arguments: /S

       state: absent

7-Zip을 제거하려면 sible-playbook을 실행하십시오.

[email protected] ~
$ ansible-playbook uninstall.yml

PLAY [win] *************************************************************************************************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************************************************************************************
ok: [192.168.0.102]

TASK [Uninstall 7-Zip from the exe] ***********************************************************************************************************************************************************
changed: [192.168.0.102]

PLAY RECAP *************************************************************************************************************************************************************************************
192.168.0.102              : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Windows 서비스 중지/시작/다시 시작

win_service 가능 모듈은 서비스를 시작, 중지 또는 다시 시작하는 데 사용됩니다. 여기에서는 Tomcat 서비스를 중지하는 방법을 보여 드리겠습니다.

YAML 파일에서 서비스 이름을 언급하고 상태를 중지로 설정해야 합니다.

[email protected] ~
$ vi service.yml
---
- hosts: win 

  tasks: 

   - name: Stop service Tomcat

     win_service:

       name: Tomcat8

       state: stopped

tomcat 서비스를 중지하려면 sible-playbook을 실행하십시오.

[email protected] ~
$ ansible-playbook service.yml

PLAY [win] ***********************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]

TASK [Stop service Tomcat] ****************************************************************************************************************
changed: [192.168.0.102]

PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=2 changed=1 unreachable=0 failed=0
skipped=0 rescued=0 ignored=0

Windows 시스템에서 tomcat 서비스를 확인하면 이제 중지된 상태입니다.

서비스 상태를 변경하기 위해 시작됨 또는 다시 시작됨 또는 일시 중지됨으로 상태를 정의할 수 있습니다.

수집 사실

win_disk_facts 가능한 모듈을 사용하여 대상 호스트의 모든 디스크 정보를 검색할 수 있습니다.

[email protected] ~
$ vi disk.yml
---
- hosts: win 
  tasks: 
  - name: Get disk facts
    win_disk_facts:

  - name: Output first disk size
    debug:
      var: ansible_facts.disks[0].size

  - name: Convert first system disk into various formats
    debug:
      msg: '{{ disksize_gib }} vs {{ disksize_gib_human }}'
    vars:
      # Get first system disk
      disk: '{{ ansible_facts.disks|selectattr("system_disk")|first }}'

      # Show disk size in Gibibytes
      disksize_gib_human: '{{ disk.size|filesizeformat(true) }}' 
      disksize_gib: '{{ (disk.size/1024|pow(3))|round|int }} GiB'

sible-playbook을 실행하여 디스크 정보를 가져옵니다.

[email protected] ~
$ ansible-playbook disk.yml

PLAY [win] ***********************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]

TASK [Get disk facts] ************************************************************************************************************************
ok: [192.168.0.102]

TASK [Output first disk size] ****************************************************************************************************************
ok: [192.168.0.102] => {

"ansible_facts.disks[0].size": "1000204886016"
}

TASK [Convert first system disk into various formats] ****************************************************************************************
ok: [192.168.0.102] => {
"msg": "932 GiB vs 931.5 GiB"
}

PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=4 changed=0 unreachable=0 failed=0
skipped=0 rescued=0 ignored=0

win_command 가능 모듈을 사용하면 원격 호스트에서 명령을 실행하고 CPU 정보, 장치 세부 정보 등을 얻을 수 있습니다.

[email protected] ~
$ vi check.yml
---
- hosts: win 
  tasks:
   - name: Get disk facts
     win_command: wmic cpu get caption, deviceid, name, numberofcores, maxclockspeed, status
     register: usage

   - debug: msg="{{ usage.stdout }}"

원격 시스템 정보를 얻으려면 가능한 플레이북을 실행하십시오.

[email protected] ~
$ ansible-playbook check.yml

PLAY [win] ***********************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]

TASK [Get facts] ************************************************************************************************************************
changed: [192.168.0.102]

TASK [debug] *********************************************************************************************************************************
ok: [192.168.0.102] => {
"msg": "Caption DeviceID MaxClockSpeed
Name
NumberOfCores Status rrnIntel64 Family 6 Model 142 Stepping 9 CPU0 2712 Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz 2 OK rrnrrn"
}

PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=3 changed=1 unreachable=0 failed=0
skipped=0 rescued=0
ignored=0

명령 실행

창에서 실행하는 모든 명령은 가능한 win_command 모듈을 통해 실행할 수 있습니다. YAML 파일에 명령을 지정하기만 하면 됩니다. 여기서는 디렉토리를 생성할 뿐입니다.

[email protected] ~
$ vi commands.yml
---

- hosts: win 

  tasks:

   - name: run an executable using win_command

     win_command: whoami.exe


   - name: run a cmd command

      win_command: cmd.exe /c mkdir C:test

win_command 작업을 수행하려면 sible-playbook을 실행합니다.

[email protected] ~
$ ansible-playbook commands.yml

PLAY [win] ***********************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]

TASK [run an executable using win_command] ***************************************************************************************************
changed: [192.168.0.102]

TASK [run a cmd command] *********************************************************************************************************************
changed: [192.168.0.102]

PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=3 changed=2 unreachable=0 failed=0
skipped=0 rescued=0 ignored=0

환경 변수

Windows 시스템에는 JAVA_HOME과 같은 여러 환경 변수가 있습니다. win_environment 가능 모듈을 사용하여 Windows 시스템에서 환경 변수를 추가하거나 수정할 수 있습니다. 이 예에서는 Windows 환경 변수 목록에 새 변수를 추가하고 있습니다.

[email protected] ~
$ vi env.yml
---
- hosts: win 
  tasks:
   - name: Set an environment variable for all users
     win_environment:
       state: present
       name: NewVariable
       value: New Value
       level: machine

원격 Windows 시스템에 환경 변수를 추가하려면 sible-playbook을 실행하십시오.

[email protected] ~
$ ansible-playbook env.yml

PLAY [win] ***********************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]

TASK [Set an environment variable for all users] *********************************************************************************************
changed: [192.168.0.102]

PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=2 changed=1 unreachable=0 failed=0
skipped=0 rescued=0 ignored=0

환경 변수 창으로 이동합니다. 방금 추가한 새 변수가 여기에 표시됩니다.

  Windows 10에서 키보드 단축키로 키보드 레이아웃을 변경하는 방법

레지스트리 추가/편집

win_regedit 가능 모듈은 원격 Windows 시스템에서 레지스트리 세부 정보를 추가하거나 편집하는 데 사용됩니다. 추가/업데이트할 레지스트리 및 콘텐츠의 경로를 제공해야 합니다. 여기에서 HKLM:SOFTWARE 경로 안에 새 레지스트리 항목 koreantech.org를 만든 다음 이 레지스트리에 이름과 데이터를 추가합니다.

[email protected] ~
$ vi registry.yml
---

- hosts: win 

  tasks:

   - name: Creating a registry

     win_regedit:

      path: HKLM:SOFTWAREkoreantech.org

   - name: Modifying a registry, adding name and data

     win_regedit:

      path: HKLM:SOFTWAREkoreantech.org

      name: Geek

      data: Flare

sible-playbook을 실행하여 레지스트리를 추가합니다.

[email protected] ~
$ ansible-playbook registry.yml

PLAY [win] ***********************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************
ok: [192.168.0.102]

TASK [Creating a registry] *******************************************************************************************************************
changed: [192.168.0.102]

TASK [Modifying a registry, adding name and data] ********************************************************************************************
changed: [192.168.0.102]

PLAY RECAP ***********************************************************************************************************************************
192.168.0.102
: ok=3 changed=2 unreachable=0 failed=0
skipped=0 rescued=0 ignored=0

원격 시스템의 레지스트리 편집기로 이동하면 이 레지스트리가 Name 및 Data 매개변수와 함께 성공적으로 추가되었음을 알 수 있습니다.

로그 삭제

win_eventlog 가능한 모듈은 Windows 시스템에서 Windows 이벤트 로그를 추가, 지우거나 제거하는 데 사용됩니다.

Windows Powershell로 이동하여 원격 Windows 시스템에 있는 EventLog를 나열합니다.

PS C:Userskoreantech.org> Get-EventLog -List                                                                                 
  Max(K) Retain OverflowAction        Entries Log
  ------ ------ --------------        ------- ---
  20,480      0 OverwriteAsNeeded      33,549 Application
  20,480      0 OverwriteAsNeeded           0 HardwareEvents
     512      7 OverwriteOlder             20 Internet Explorer
  20,480      0 OverwriteAsNeeded           0 Key Management Service
     128      0 OverwriteAsNeeded         190 OAlerts
                                              Security
  20,480      0 OverwriteAsNeeded      44,828 System
  15,360      0 OverwriteAsNeeded       3,662 Windows PowerShell

이제 Internet Explorer의 모든 소스에서 로그를 제거하는 방법을 보여 드리겠습니다.

[email protected] ~
$ vi log.yml
---
- hosts: win 
  tasks:
   - name: Remove Internet Explorer Logs
     win_eventlog:
      name: Internet Explorer
      state: absent

원격 Windows 시스템에서 Internet Explorer를 제거하려면 가능한 플레이북을 실행하십시오.

[email protected] ~
$ ansible-playbook log.yml

PLAY [win] *************************************************************************************************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************************************************************************************
ok: [192.168.0.102]

TASK [Remove Internet Explorer Logs] **********************************************************************************************************************************************
changed: [192.168.0.102]

PLAY RECAP *************************************************************************************************************************************************************************************
192.168.0.102              : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

이제 EventLogs를 다시 나열하면 Internet Explorer 로그가 제거된 것을 볼 수 있습니다.

PS C:Userskoreantech.org> Get-EventLog -List

  Max(K) Retain OverflowAction        Entries Log
  ------ ------ --------------        ------- ---
  20,480      0 OverwriteAsNeeded      33,549 Application
  20,480      0 OverwriteAsNeeded           0 HardwareEvents
  20,480      0 OverwriteAsNeeded           0 Key Management Service
     128      0 OverwriteAsNeeded         190 OAlerts
                                              Security
  20,480      0 OverwriteAsNeeded      44,835 System
  15,360      0 OverwriteAsNeeded          56 Windows PowerShell

이것은 원격 Windows 관리에 사용할 수 있는 Ansible 플레이북에 관한 것이었습니다. 이 플레이북을 사용해 보세요. 당신은 또한 다른 시도 할 수 있습니다 Ansible Windows 모듈 사용 가능.

  Windows 10에서 Netflix 독점 스피커 제어를 제공하는 방법