IaC (인프라 as 코드)
Ansible
제어노드
Ansible이 설치된 모든 호스트로 제어 노드에서는 ansible 또는 ansible-playbook 명령을 이용하여 작업을 실행 할 수 있다.
노트북, 데스크탑 및 서버 모두 Ansible을 실행할 수 있다. 그러나 Windows 호스트를 제어 노드로 사용할 수 없다.
관리노드
관리노드는 제어노드에 의해 SSH 접속을 요청받기 때문에 SSH가 설치되어 존재해야 하며 서비스가 동작해야 한다. 또한 관리 호스트에는 Python 2.x 버전대의 2.4 이상 버전이 설치되어 존재해야 한다.
Ansible은 관리 노드에 설치되지 않는다.
인벤토리
인벤토리는 호스트가 속해 있는 그룹을 정의한다. 여러 관리 노드를 그룹으로 조직화 할 수 있고, 중첩 그룹을 사용할 수 있다. 인벤토리에서 제어 노드가 관리 노드와 통신하는 방법도 정의할 수 있으며 호스트 및 그룹 변수까지 지정할 수 있다.
플러그인
플러그인은 Ansible의 핵심 기능을 강화하는 코드 조각으로 Ansible은 플러그인 아키텍처를 사용하여 풍부하고 유연하며 확장 가능한 기능 세트를 활성화한다.
모듈
모듈(Module)은 Ansible을 실행하는 Python 코드 단위다.
작업
작업(Task)은 모듈의 집합으로 Ansible의 작업 실행 단위다.
Ansible은 플레이북 내에 정의된 것과 동일한 순서로 작업을 실행한다.
Ad-hoc 명령
Ad-hoc 명령은 임시 명령으로 부르기도 하며 여러 시스템에서 빠른 작업을 수행하도록 설계된 한 줄짜리 명령이다.
플레이
플레이(Play)는 특정 관리 노드를 대상으로 순서가 지정된 작업 목록으로 하나 이상의 Ansible 작업을 결합하여 특정 호스트에 매핑된 작업을 순서대로 그룹화한 플레이를 만들 수 있으며 작업은 작성된 순서대로 실행된다.
플레이북
플레이북(Playbook)은 하나 이상의 플레이를 가지고 있는 YAML 파일이다. ansible-playbook 명령을 이용해 플레이북을 실행할 수 있다.
역할
역할(Role)은 알려진 파일/디렉토리 구조를 기반으로 관련 변수, 파일, 작업 등 아티팩트 모음이다.
컬렉션
컬렉션(Collection)은 플레이북 및 역할, 모듈, 플러그인 포함하는 Ansible 콘텐츠 배포 형식이다.
연결 플러그인
연결 플러그인은 컨트롤 머신이 관리 노드에 원격으로 연결할 때 사용하는 방법으로 기본 설정은 SSH를 사용.
#sudo apt update
#sudo apt install -y software-properties-common
#sudo apt-add-repository -y -u ppa:ansible/ansible
#sudo apt install -y ansible
#설치확인

#sudo apt install -y python3-argcomplete
#sudo activate-global-python-argcomplete
#sudo apt install -y ansible-lint
#exec bash
기본 인벤토리 파일
/etc/ansible/hosts
ansible 구성파일에다가 참조할 앤서블 파일 위치를 설정하고 적당한 위치에 인벤토리 파일을 만들기.
-i 옵션으로 인벤토리를 지정하기.
INI 스타일 정적 인벤토리
관리 호스트의 호스트 이름 또는 IP 주소가 한 줄에 하나씩 있는 목록 형
다음 2개의 호스트 그룹은 항상 존재
#nano test.ini

목록확인




검색



앤서블의 작동 방식 우선순위(설정값 로딩하는 순서)
Ansible 구성파일 우선순위
설정 파일 확인 명령어
-v

#ansible --version

일반적인 ansible.cfg 파일 ( 현재 디렉터리에 만든다)
[defaults]
inventory = ./inventory
remote_user = devops
ask_pass = false
[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false


iventory = ./inventory로 설정한 후에
#vi inventory

-i로 인벤토리를 따로 지정해주지 않아도 됨.

#cd /etc/sudoers.d

이렇게하면 비밀번호 없이 ssh 접속이 됨.
#ssh devops@10.0.2.7
#sudo useradd -m devops
#sudo passwd devops
#sudo usermod -aG sudo devops
#ssh-copy-id devops@localhost
#vim inventory 수정

#ansible all -m ping

<자주 사용되는 모듈>
● 명령 모듈
● command: 명령 실행(Python O, Shell X)
파이썬 설치 필요 / 파이프라인, 리다이렉션, 와일드카드 등의 쉘 기능 미지원
가장 기본적으로 사용하는 명령 모듈
● raw: 명령 실행(Python X, Shell X)
파이썬 설치 불필요 / 아무것도 설치안되도 가능하지만 앤서블 많은 기능 미지원
● script: 스크립트 실행
● shell: 쉘 명령 실행(Python O, Shell O)
파이썬 설치 필요 / 파이프라인, 리다이렉션, 와일드카드 등의 쉘 기능 지원
● 파일 모듈
● archive: 압축 생성
● blockinfile: 텍스트 파일에 블록 삽입업데이트삭제
● copy: 파일 복사
● fetch: 파일 가져오기
● file: 파일 및 속성 관리
● lineinfile: 텍스트 파일에 행 관리
● replace: 텍스트 파일의 문자열 관리
● synchronize: rsync 동기화
● template: Jinja2 템플릿
● unarchive: 압축 해제
● 네트워크 도구 모듈
● geturl: HTTP/S, FTP 파일 다운로드(wget)
● uri: 웹 서비스와 상호작용(curl)
● 패키지 모듈
● gem: Ruby Gems
● npm: Node.js 패키지 관리
● pip: Python 라이브러리 관리
● apt: Debian/Ubuntu 패키지 관리
● package: 일반적인 OS 패키지 관리
● dnf: dnf 패키지 관리
● yum: yum 패키지 관리
● 소스 제어 모듈
● git: git 관리
● github: github 관련 모듈
● gitlab_: gitlab 관련 모듈
● bitbucket_*: bitbucket 관련 모듈
● 시스템 모듈
● cron: crontab 관리
● filesystem: 파일시스템 관리
● firewalld: Firewalld 관리
● iptables: iptables 관리
● lvg: LVM 볼륨 그룹 관리
● lvol: LVM 논리 볼륨 관리
● mount: mount 관리
● parted: 파티션 관리
● ping: 원격 호스트 연결 시도
● reboot: 호스트 재부팅
● service: 서비스 관리
● ufw: UFW 방화벽 관리
Ansible ad-hoc 명령은 하나 이상의 관리 노드에 단일 작업을 실행하는 임시 명령이다. 임시 명령은 거의 반복하지 않는 간단한 작업에 주로 사용한다.


command를 사용하면 변하든 안 변하든 CHANGED가 뜸.


이 복사가 되어잇으므로 SUCCESS가 뜸.

shell은 shell모드를 허용.
앤서블에는 해당 모듈들로 명령어로 직접 실행하는 걸 좋아하지 않음.
멱등성 : 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질.