Tagged: Ansible

[Ansible] hosts did not meet host_list requirements 메시지 처리하기

Ansible 을 사용할때에 인벤토리 파일에 대해서 가끔 “hosts did not meet host_list requirements, check plugin documentation if this is unexpected” 메시지를 보게 된다. 이 메시지는 ‘ansible -vvv ‘ 처럼 -v 옵션을 주면 보인다.

이 메시지는 인벤토리 파일 형식으로 인한 것으로 ini 형식을때에 주로 나온다. 하지만 인벤토리 파일 형식이 ini 형식임을 ansible 이 인지하지 못해서 벌어지는 일인데, 이는 ansible.cfg 파일에 다음과 같이 함으로써 없앨 수 있다.

Ansible fingerprint 접속 오류.

서버에 맨 처음 SSH 접속을 시도 하면 다음과 같은 오류가 발생한다.

이를 해결하기 위해서는 다음과 같이 환경변수를 지정해 주면 된다.

혹은 ~/.ansible.cfg 파일에 다음과 같이 지정해도 된다.

 

Ansible Inventory 에 대해

Ansible 에서 Inventory 라고 하면 리모트 서버에 정보 리스트를 말한다. 이를 대부분 파일로 저장해서 보관하는데 이를 Inventory file 이라고 부른다.

Inventory: (특정 건물 내의) 물품 목록, … 의 목록을 만들다.

리모트 서버 접속 목록을 Inventory  라고 보면 된다.

INI vs Yaml

Ansible Inventory 파일의 형식은 INI 와 Yaml 형식 두가지를 지원한다. INI 형식은 대략 다음과 같다.

브랏켓(Bracket, ‘[]’) 감싼 것은 서버의 그룹을 말한다. 그리고 그 그룹내에 접속하고자하는 서버들의 정보를 입력해준다. 간단하게 서버의 이름을 입력해주면 된다.

Yaml 형식은 다음과 같다.

INI 형식과는 조금 색다른 면을 보여준다.  hosts, children 이 보이고 children 아래에 그룹을 정의하고 있다.

뭐가 되었던 인식하기 쉬운것을 선택해서 사용하면 그만이다.

서버명 정규표현

서버명이 숫자 혹은 알파벳순으로 연속적이라면 다음과 같이 사용해 볼 수 있다.

 

Inventory 옵션들

서버들이 기본 설정을 그대로 사용하기도 하지만 변경해서 사용하기도 한다. 예를들어, SSH 접속 기본 포트 22이 아닌 다른 것을 사용할 경우나 로그인 사용자가 다를 경우에 이를 인식시켜줘야 하는데 Ansible 은 Inventory 에서 이를 지원한다.

INI 형식에서 다음과 같이 사용할 수 있다.

Yaml 형식에서는 다음과 같이 사용할 수 있다.

이는 서버마다 적용할 수 있고 전체에 한꺼번에 적용할 수 있는데, 서버전체 적용하기 위해서는 다음과 같이 하면 된다. INI 형식은 다음과 같다.

YAML 형식은 다음과 같다.