Ansible은 현재 python 2.7 이며, 추후 python 3.x 버전을 기반으로 한 Ansible버전이 릴리즈될 것이다.

Ansible.cfg 설정 재정의

  1. Global
    1. /etc/ansible/ansible.cfg
  2. 사용자권한에 귀속
    1. ~/.ansible/ansible.cfg
  3. Custom Diractory
    1. /demo/ansible.cfg


설정적용 우선순위는 다음과 같다 . 환경변수 > 디렉토리 > 사용자 > 전역



[student@workstation .ansible]$ ansible --version

ansible 2.3.1.0

  config file = /home/student/.ansible/ansible.cfg

  configured module search path = Default w/o overrides

  python version = 2.7.5 (default, Aug  2 2016, 04:20:16) [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)]

[student@workstation .ansible]$

Escalation

Ansible 전용 계정을 만들어 사용하는 것을 권장 한다.

  • ansible전용 계정으로 접속하고 권한 에스컬레이션 하여 root권한을 가져와 사용하는 것을 권장


<<ansible.cfg>>

[default]

inventory = ./inventory

remote_user = someuser

ask_pass = false


[privilege_escalation]

become=True

become_method=sudo

become_user=root

become_ask_pass=false

Ansible 모듈 doc

  • 전체 모듈 확인 하기
    • $ansible-doc -l
  • 특정 모듈 확인 하기
    • $ansible-doc ping


[student@workstation ~]$ ansible-doc ping

> PING    (/usr/lib/python2.7/site-packages/ansible/modules/system/ping.py)


  A trivial test module, this module always returns `pong' on successful contact. It does not make sense in playbooks, but it is useful from `/usr/bin/ansible' to

  verify the ability to login and that a usable python is configured. This is NOT ICMP ping, this is just a trivial test module.


EXAMPLES:

# Test we can logon to 'webservers' and execute python with json lib.

ansible webservers -m ping



MAINTAINERS: Ansible Core Team, Michael DeHaan


METADATA:

        Status: ['stableinterface']

        Supported_by: core

[student@workstation ~]$

동적 인벤토리 관리

  • 사전조건
    • ~/dep-lab/ansible.cfg
      • [student@workstation dep-lab]$ cat ansible.cfg

        [defaults]

        inventory = inventory

        remote_user = devops

        ask_pass = false


        [privilege_escalation]

        become=false

        become_method=sudo

        become_user=root

        become_ask_pass=false

    • ~/dep-lab/inventory/inventory
    • ~/dep-lab/inventory/binventory.py
      • [student@workstation dep-lab]$ cat inventory/binventory.py

        #!/usr/bin/env python


        from subprocess import Popen,PIPE

        import sys

        import json


        result = {}

        result['internetweb'] = {}

        result['internetweb']['hosts'] = []

        result['internetweb']['vars'] = {}


        pipe = Popen(['getent', 'hosts'], stdout=PIPE, universal_newlines=True)


        for line in pipe.stdout.readlines():

           s = line.split()

           if s[1].startswith('serverb'):

              result['internetweb']['hosts'].append(s[1])


        if len(sys.argv) == 2 and sys.argv[1] == '--list':

            print(json.dumps(result))

        elif len(sys.argv) == 3 and sys.argv[1] == '--host':

            print(json.dumps({}))

        else:

            print("Requires an argument, please use --list or --host <host>")

        [student@workstation dep-lab]$

  • 동적 인벤토리 설명
    • inventory 디렉터리내의 실행권한이 있는 스크립트를 모두 실행하여 동적 inventory를 구성한다.
    • 아래와 같이 binventory 실행결과가 'serverb.lab.example.com'을 반환하고 있으므로, 정적 'inventory'파일에는 포함되어 있지 않지만, 동적스크립트를 통하여 'serverb' 가 추가 되었다. 

      [student@workstation dep-lab]$ inventory/binventory.py --list
      {"internetweb": {"hosts": ["serverb.lab.example.com"], "vars": {}}}
      [student@workstation dep-lab]$



  • No labels
Write a comment…