관리자가 가능한 플레이북을 사용하여 원격 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 인수를 사용하여 아파치를 설치합니다.
사용할 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
환경 변수 창으로 이동합니다. 방금 추가한 새 변수가 여기에 표시됩니다.
레지스트리 추가/편집
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 모듈 사용 가능.