장점
- applicatoin배포
- 구성 관리,자동화,오케스트레이션에 용이
용어
- 관리 시스템 : ansible이 설치된 머신.
- 관리되는 노드: ansible이 관리하는 대상 장치이며 ‘호스트’라고도 함. 이들은 서버,네트워크장치,다른 컴퓨터가 될 수도 있음. 여기에서 앤서블이 설치 되지않음
- 인벤토리 : 관리 대상 서버에 대한 정보를 포함하는 파일. 즉, 호스트 파일이라고도 함. 여기에는 각 관리되는 노드에 대한 ipAddr,호스트정보,변수와 같은 정보를 지정할 수 있음
- 태스크task: 앤서블의 작업 단위
- 모듈 : 실행하는 코드 단위
- 플레이북 : 대상 서버와 수행할 작업을 정의하는 yaml형식의 파일
- 롤 : 플레이북과 코드의 공유와 재사용을 용이하게 하기 위해 필요한 다른 모든 파일을 구성하는 것
- 컬렉션 : 논리적인 집합
- 팩트 : 시스템 정보를 포함하는 전역변수
- 핸들러 : 변경사항 발생시 서비스 중지 or 재시작하는데 사용
사전 작업-ssh 연결 확인

ssh-keygen -t rsa
ssh-copy-id root@localhost
ssh root@localhost

각각의 옵션들....
-m 모듈 선택
-i 인벤토리 선택
-u 유저명
ansible inventory
- 앤서블을 사용해서 작업을 실행할 서버에 대한 정보와 작업에 사용할 변수 정보를 저장하는 것이 인벤토리이다.
- ini파일과 yaml파일로 설정 가능
- -i옵션으로 인벤토리 파일을 지정하는 것이 가능. ansible-playbook -I inven.yaml
- cfg파일 설정은 inventroy옵션에 파일 경로를 지정하면 되며 ,를 이용해서 여러개 가능 [default] inventory=inventory.yaml,common.yaml
다음은 인벤토리에 호스트명을 설정하는 방법이다
# all에는 모든 호스트 정보를 추가함...직접 ipAddr를 넣어도 됨.
# [1:10]같은 형태룰 사용하면 1~10번까지의 호스트를 설정하는 것
# 그룹별 호스트 정보를 추가하는 것도 가능
all:
hosts:
serverHost1:
serverHost2:
dbserverHost[1:10]:
127.0.0.1:
groupHosts:
webservers:
hosts:
serverHost1:
host_var: "local_var" # 이는 호스트 변수
serverHost2:
dbservers:
hosts:
dbserverHost[1:10]:
vars:# 그룹변수
id:"admin"
passwd:"admin123"
vars:
global_var:"global_var" # 전역 변수
vars:
string_var: "AAA" # 문자열 변수
number_var: 1 # 숫자 변수
boolean_var: "yes" # 불리언 변수
list_var: # 리스트 변수
- A
- B
- C
dict_var: # 딕셔너리 변수
key_a: "val_a"
key_b: "val_b"
key_c: "val_c"
ansible module
모듈의 공통 파라미터
- ignore_errors: yes → 오류를 무시함
- become: yes. → root로 실행함을 의미
- when: → 조건문 분기
- tags → 실행 태그 추가
- environment →. 실행 환경 변수 설정
file모듈
- 첫번째 예시는 복사를 하면서 권한을 변경한다
- 두번쨰는 리커시브하게 변경
- 세번째는 링크 생성
- 네번째는 state:absent를 이용하여 파일삭제
- 다섯번째는 디렉토리 생성
- 여섯번째는 파일 생성
- 7번째는 압축해제
- name: "Mode change ex"
file:
scr: "~/pathOfSrc"
dest: "~/pathOfDest"
mode: 0744
owner: "jjh"
group: "exGroup"
become: yes
- name: "Mode change ex2"
file:
path: "~/Path"
mode: 0744
recurse: yes
- name: "Mode change ex3"
file:
scr: "~/pathOfSrc"
dest: "~/pathOfDest"
state: link
owner: "jjh"
group: "exGroup"
become: yes
- name: "del file"
file:
path: "~/path"
state: absent
- name: "create dir"
file:
path: "~/path"
state: directory
- name: "touch ex"
file:
path: "~/path"
state: touch
- name: "unarchive ex"
unarchive:
src: "path"
dest "~/path"
remote_src: True
become: True
- 첫번째는 로컬에서 복사
- 두번째는 원격서버의 파일을 복사함.
- name: "cp ex"
copy:
src: "srcFile"
dest: "~/dest"
- name: "cp ex"
copy:
src: "srcFile"
dest: "~/dest"
remote_src: yes
become: yes
template는 파이썬의 jinja2를 사용해서 파일을 변환하면서 복사한다
- name: copy ex configs
template:
src: "{{src}}"
dest: "~/PATH/{{src}}"
with_items:
- ex.cfg
get_url은 파일을 다운로드함. wget과 같다고 생각…
- name: downloadFile
get_url:
url: "http://......"
dest "~/Path"
mode: '0744'

ansible task

'리눅스 > ansible' 카테고리의 다른 글
| ansible playbook-2 postgresql설치 (0) | 2024.08.11 |
|---|---|
| ansible playbook-1 (0) | 2024.08.11 |