[IaC] Ansible

이정훈·2023년 3월 29일
0

IaC

목록 보기
5/8
post-thumbnail

변수

  • 어디서든 사용할 수 있다.
  • 인벤토리에서도 변수를 만들수 있다.
- hosts: ["web"]
  tasks:
  - name: creat file
    shell: |
      echo "{{ var01 }}" > /root/"{{ var02 }}"
    become: yes

  - name: print # 확인해보기!
    debug:
      msg: "{{ var01  }}"
    become: yes

  vars:
    var01: 10
    var02: 20

  • 변수를 저장하고 사용하고

[root@ansible01 vartest]# cat vars.yml

var03: 30
var04: 40
[root@ansible01 vartest]# cat playbook
- hosts: ["web"]
  tasks:
  - name: creat file
    shell: |
      echo "{{ var01 }}" > /root/"{{ var02 }}"
    become: yes

  - name: print
    debug:
      msg: "{{ var01  }}"
    become: yes

  - name: load vars
    include_vars: "/root/vartest/vars.yml"

  - name: print
    debug:
      msg: "{{ var03 }}"
    become: yes

  vars:
    var01: 10
    var02: 20

  • 변수만 저장해놓고 불러와서 사용도 가능하다

  • role로 만들었다면, role 디렉토리 아래 파일에 변수들을 저장해 주면 된다. 그럼 경로를 지정하지 않아도 그 친구를 찾아간다!

  • 설정 파일들을 일일이 수정하지 않고 변수를 만들어 사용하면 편리하게 이용할 수 있다.

- hosts: ["web"]
  tasks:
  - name: creat file
    shell: |
      df -h | grep /dev/mapper/cs-root | awk -F" " '{print $5}' | cut -d'%' -f 1
    register: df_result # 이값을 활용!
    become: yes

  - set_fact: var05={{ df_result.stdout }}

  - name: print
    debug:
      msg: "{{ df_result }}"

  • grep으로 나온 register 값을 확인하면 이렇게 나온다. 이 중에 우리가 사용하고자하는 값을 변수로 만들어 사용하게 되는 것인데 아래와 같다.
- hosts: ["web"]
  tasks:
  - name: creat file
    shell: |
      df -h | grep /dev/mapper/cs-root | awk -F" " '{print $5}' | cut -d'%' -f 1
    register: df_result
    become: yes

  - set_fact: var05={{ df_result.stdout }}

  - name: print
    debug:
      msg: "{{ var05 }}"

  • register에서 나온 값중에 .stdout 값을 변수 var05로 사용해서 출력하겠다!
- hosts: ["web"]
  tasks:
  - name: test
    stat:
      path : /root/vartest
    register: root_stat

  - name: print
    debug:
      msg: "{{ root_stat }}"

  - name: print
    debug:
      msg: " {{ root_stat.stat.exists }}"

  • stat 값을 참고하면 조건무을 작성할때 활용이 가능하다

조건문

- hosts: ["web"]
  tasks:
  - name: test
    stat:
      path : /root/slkdfkfdj
    register: root_stat
    become: yes

  - name: print
    debug:
      msg: "{{ root_stat }}"

  - name: print
    debug:
      msg: "출력"
    when: "{{ root_stat.stat.exists }}"

  • slkdfkfdj 이거는 없으니니깐 skipping
- hosts: ["web"]
  tasks:
  - name: test
    stat:
      path : /root/20
    register: root_stat
    become: yes

  - name: print
    debug:
      msg: "{{ root_stat }}"

  - name: print
    debug:
      msg: "출력"
    when: "{{ root_stat.stat.exists }}"


  • 20 이라는 파일은 존재하니깐 출력!

동적 인벤토리

  • 설치
yum install python3
pip3 install boto3
  • 설정
vi /etc/ansible/ansible.cfg 파일 수정 
			[inventory] 항목에서 aws_ec2 추가

		[inventory]
		# enable inventory plugins, default: 'host_list', 'script', 'auto', 'yaml', 'ini', 'toml'
		enable_plugins = host_list, virtualbox, yaml, constructed, aws_ec2
  • 파일 생성 aws_ec2.yml
---
plugin: aws_ec2
aws_access_key: [엑세스 키]
aws_secret_key: [시크릿 키]
keyed_groups:
  - key: tags
    prefix: tag

  • ec2 3대를 만들었다.
  • 가져오기
ansible-inventory -i aws_ec2.yml --graph

  • 플러그인 해주고 태그로 만들었던 ec2 인벤토리를 가져왔다. 그룹 미지정 1대, abcd 그룹 1대, qwer 그룹 1대

  • 확인

- hosts: ["all"]
  vars:
    ansible_ssh_private_key_file: "/root/ec2/inven.pem"
  tasks:
  - name: print
    debug:
      msg: "{{ ansible_facts.default_ipv4.address }}"
    become: yes
ansible-playbook -i aws_ec2.yml playbook --user ubuntu

  • inven.pem의 권한 문제 때문에 실행이 안되고 있다 그래서 권한을 변경
chmod 600 /root/ec2/inven.pem

  • 권한 변경 후에 실행하니 확인 완료
  • 처음 ec2에 접속하기 때문에 yes를 해줘야한다.(계속 연결할거냐?)

  • tag_group_qwer 친구만 확인 완료
profile
싱숭생숭늉

0개의 댓글