우선 저의 테스트 환경을 먼저 알려 드리겠습니다.
- centos 7
- windows10 (powershell 이 3버전 이상이여야 합니다.)
yum 으로 ansible 설치부터 진행 하면서 설명 드리겠습니다.
1. Extra Packages for Enterprise Linux 설치
yum install -y epel-release
2. yum 을 통한 ansible 설치
yum install -y ansible
3. python 에서 winrm 을 실행 시킬 수 있도록 해줌
pip install "pywinrm>=0.3.0"
winRM은 기본적으로 사용하는 포트는 5985,6번 입니다.
(http 는 5985, https 는 5986)
https 라니? 리눅스에선 openssl 을 미리 설치 해놔야야겠죠?
(openssl 설치는 https://shonm.tistory.com/614?category=525880 를 참고해주세요)
4. /etc/ansible/hosts 파일에 아래와 같은 내용을 기술 해 줍니다.
(hosts 파일을 inventory 라고 합니다. 작업 할 시스템 목록 설정 파일입니다.)
[win10]
172.30.1.6
[win10:vars]
ansible_user=user_id
ansible_password=password
ansible_connection=winrm
ansible_winrm_server_cert_validation=ignore
(172.30.1.6 은 실제로 작업 될 테스트 서버의 IP 입니다.)
5. windows 에서 power shell 을 관리자 권한으로 띄워서 아래와 같은 명령어를 입력 함
- Get-Service -Name winrm
위 명령어 실행 시 Stopped 라고 멈춤 상태라고 나옵니다.
때문에 winrm 을 running 상태로 돌리려면
$url = "https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1" $file = "$env:temp\ConfigureRemotingForAnsible.ps1" (New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file) powershell.exe -ExecutionPolicy ByPass -File $file |
위의 4개줄을 power shell 관리자 권한에서 실행 시킵니다.
(주의할 점 power shell 3.0 버전 이상이여야 하므로 window7,2008 에서는 안됨)
인터넷이 안되는 환경이라면 첨부 파일을 power shell 에서 실행 시켜주세요.
PS C:\temp> ./Setup-winrm-For-Ansible.ps1 |
정상 동작하는지 여부 확인은
Get-Service -Name winrm 이 Running 이라고 나오면 됩니다.
예)
PS C:\WINDOWS\system32> Get-Service -Name winrm Status Name DisplayName ------ ---- ----------- Running winrm Windows Remote Management (WS-Manag... |
상태에 대한 구체적인 확인은
winrm enumerate winrm/config/Listener
로 확인 하면 됩니다.
예)
$url = "https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1" $file = "$env:temp\ConfigureRemotingForAnsible.ps1" (New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file) powershell.exe -ExecutionPolicy ByPass -File $file PS C:\WINDOWS\system32> winrm enumerate winrm/config/Listener Listener Address = * Transport = HTTP Port = 5985 Hostname Enabled = true URLPrefix = wsman CertificateThumbprint ListeningOn = 127.0.0.1, 169.254.15.227, 169.254.33.58, 169.254.148.118, 169.254.181.236, 169.254.188.81, 172.30.1.6, 192.168.101.1, 192.168.107.1, ::1, fe80::14c9:9320:c958:b5ec%17, fe80::2943:c38:5ec0:bc51%9, fe80::48a3:b37:8d98:9081%19, fe80::509a:b80e:dca2:fe3%5, fe80::54ec:481e:37c6:9476%2, fe80::8589:636c:8999:e3f5%11, fe80::a42c:79cf:b79a:213a%13, fe80::a8fe:7796:104f:b0e4%16 Listener Address = * Transport = HTTPS Port = 5986 Hostname = DESKTOP-PNOJ4TS Enabled = true URLPrefix = wsman CertificateThumbprint = 5E7AF02614ACA9681FC9216326AEC3BD992F3737 ListeningOn = 127.0.0.1, 169.254.15.227, 169.254.33.58, 169.254.148.118, 169.254.181.236, 169.254.188.81, 172.30.1.6, 192.168.101.1, 192.168.107.1, ::1, fe80::14c9:9320:c958:b5ec%17, fe80::2943:c38:5ec0:bc51%9, fe80::48a3:b37:8d98:9081%19, fe80::509a:b80e:dca2:fe3%5, fe80::54ec:481e:37c6:9476%2, fe80::8589:636c:8999:e3f5%11, fe80::a42c:79cf:b79a:213a%13, fe80::a8fe:7796:104f:b0e4%16 |
그리고 만약
ssl: the specified credentials were rejected by the server 라는 메시지가 나오면
power shell 에서
Set-Item -Path WSMan:\localhost\Service\Auth\Basic -Value $true
그리고 windows 의 사용자는 administrator 권한을 가진 계정이어야 합니다.
6. ansible 이 잘 설치 되었는지 확인 하자면 windows 서버에 ping 을 쳐서
확인 해보도록 합시다.
ansible -i hosts win10 -m win_ping 를 ansible host linux 서버에서 실행 시
172.30.1.6 | SUCCESS => { "changed": false, "ping": "pong" } |
와 같이 windows 서버에 SUCCESS 로 연결 되는지 여부를 확인합니다.
7. 이제 playbook 을 만들어 봅시다.
playbook 이란 ansible 을 통해 어떤 작업을 할 것인가를 기술 하는 파일입니다.
설정을 최소화 하기 위해 yml 파일로 설정 하도록 되어 있습니다.
ansible 을 통해 할수 있는 일을 tasks 라는 항목에 기술 하는데 ansible 에서
기본적으로 제공하는 모듈이 많이 있으니 찾아서 사용하면 좋을 것 같습니다.
playbook 실행 방법
ansible-playbook -i [ansible의 inventory] [playbook위치 및 파일 이름)
실행을 당할 windows 서버의
D:\ 에 test.bat 라는 파일을 만들고
내용을 echo test_success 와 같이 만든다
그리고 win_test.yml 라는 파일을 아래와 같은 내용으로 생성 한다.
- name: Run test Powershell hosts: win10 gather_facts: false tasks: - name: Run test.bat win_command: D:\test.bat |
그럼 다음 아래와 같이 ansible 의 playbook 을 실행 해 줍니다.
ansible-playbook -i hosts win_test.yml -vvv
아래와 같이 결과 값이 보입니다.
[root@ansible1 ansible]# ansible-playbook -i hosts win_test.yml -vvv ansible-playbook 2.9.6 config file = /etc/ansible/ansible.cfg configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python2.7/site-packages/ansible executable location = /bin/ansible-playbook python version = 2.7.5 (default, Aug 7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] Using /etc/ansible/ansible.cfg as config file host_list declined parsing /etc/ansible/hosts as it did not pass its verify_file() method script declined parsing /etc/ansible/hosts as it did not pass its verify_file() method auto declined parsing /etc/ansible/hosts as it did not pass its verify_file() method Parsed /etc/ansible/hosts inventory source with ini plugin PLAYBOOK: win.test.yml *********************************************************************************************************************************************** 1 plays in win.test.yml PLAY [Run test Powershell] ******************************************************************************************************************************************* META: ran handlers TASK [Run test.bat] ************************************************************************************************************************************************** task path: /etc/ansible/win.test.yml:5 Using module file /usr/lib/python2.7/site-packages/ansible/modules/windows/win_command.ps1 Pipelining is enabled. <172.30.1.6> ESTABLISH WINRM CONNECTION FOR USER: shonm on PORT 5986 TO 172.30.1.6 EXEC (via pipeline wrapper) changed: [172.30.1.6] => { "changed": true, "cmd": "D:\\test.bat", "delta": "0:00:00.050112", "end": "2020-04-14 05:58:39.070225", "rc": 0, "start": "2020-04-14 05:58:39.020112", "stderr": "", "stderr_lines": [], "stdout": "\r\nC:\\Users\\shonm>echo test_success \r\ntest_success\r\n", "stdout_lines": [ "", "C:\\Users\\shonm>echo test_success ", "test_success" ] } META: ran handlers META: ran handlers PLAY RECAP *********************************************************************************************************************************************************** 172.30.1.6 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 |
위와 같이 정상적으로 잘 생행 된 것을 볼 수 있습니다.
'ANSIBLE' 카테고리의 다른 글
[ ANSIBLE] ansible 에서 windows 로 복사 및 실행 (0) | 2020.05.17 |
---|
댓글