리눅스/ansible

ansible

정지홍 2024. 8. 10. 01:20

장점

  • 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