[Ansible plugins] 앤서블 플러그인이란 무엇인가 - what is plugin?

  



Ansible에서 playbook을 작성할 때 modules만큼 중요한 요소가 plugins입니다. 이번 글에서는 Ansible plugins이 무엇인지, 그리고 어떤 역할을 하는지 간단히 살펴보겠습니다.

 

Ansible plugins ?

Ansible 공식 문서에 따르면, plugins은 "Ansible의 핵심 기능을 확장하는 코드 모음이며, plugin 아키텍처를 통해 풍부하고 유연하며 확장 가능한 기능 세트를 가능하게 한다"고 설명되어 있습니다.

Plugins are pieces of code that augment Ansible’s core functionality. Ansible uses a plugin architecture to enable a rich, flexible and expandable feature set.

즉, 플러그인은 Ansible이 원활히 작동하도록 지원하는 부가 기능이라 이해할 수 있습니다. 다만, 이 설명만으로는 다소 추상적으로 느껴질 수 있습니다.

그래서 실제로 Ansible에 어떤 종류의 plugins이 포함되어 있으며, 이들이 어떤 방식으로 실행을 보조하는지를 살펴보겠습니다.

 

Ansible plugins 종류

Ansible 2.9 버전 기준 공식 문서를 살펴보면, Ansible Core에 기본 포함된 다양한 plugin 목록을 확인할 수 있습니다. 이 목록을 보다 보면 Become, Inventory, Lookup, Vars, Filters처럼 익숙한 이름이 눈에 띕니다.

이처럼 plugins는 모듈처럼 대상 노드에서 직접 작업을 수행하지는 않지만, 우리가 이미 사용 중인 인벤토리, 변수, Become 기능처럼 Ansible 실행에 필수적인 역할을 담당합니다.

아래 그림에서 보이는 각 이름은 plugin의 타입(type)을 나타내며, 하나의 타입 안에는 여러 개의 plugins가 포함되어 있습니다.



예를 들어, Become plugin 타입 안에는 다양한 개별 plugins들이 존재합니다. 이처럼 plugin은 실행 방식에 따라 다양한 형태로 분류됩니다. 아래 그림은 Become Plugin 하위에 있는 플러그인입니다.



 

Ansible plugins 도움말 보기

Ansible plugins도 모듈과 마찬가지로 ansible-doc 명령어를 통해 도움말을 확인할 수 있습니다.

ansible-doc -h 명령을 실행해 보면 -t 옵션에서 plugin 타입을 지정할 수 있다는 항목이 보입니다.

# ansible-doc -h
...
-t {become,cache,callback,cliconf,connection,httpapi,inventory,lookup,netconf,shell,module,strategy,vars}, --type {become,cache,callback,cliconf,connection,httpapi,inventory,lookup,netconf,shell,module,strategy,vars}
                        Choose which plugin type (defaults to "module").
                        Available plugin types are : ('become', 'cache',
                        'callback', 'cliconf', 'connection', 'httpapi',
                        'inventory', 'lookup', 'netconf', 'shell', 'module',
                        'strategy', 'vars')
..

여기서 -t <플러그인 타입> 옵션과 함께 -l 옵션을 추가하면, 해당 타입에 포함된 plugin 목록을 확인할 수 있습니다.

# ansible-doc -t inventory -l
nmap                Uses nmap to find hosts to target                                                                                                                           
host_list           Parses a 'host list' string                                                                                                                                 
hcloud              Ansible dynamic inventory plugin for the Hetzner Cloud                                                                                                      
openstack           OpenStack inventory source                                                                                                                                  
vultr               Vultr inventory source                                                                                                                                      
aws_ec2             EC2 inventory source                                                                                                                                        
cloudscale          cloudscale.ch inventory source                                                                                                                              
virtualbox          virtualbox inventory source                                                                                                                                 
constructed         Uses Jinja2 to construct vars and groups based on existing inventory
...

이제 예시로 inventory 타입에 포함된 aws_ec2 plugin의 사용법을 확인해 보겠습니다.

# ansible-doc -t inventory aws_ec2
> AWS_EC2    (/usr/lib/python2.7/site-packages/ansible/plugins/inventory/aws_ec2.py)

        Get inventory hosts from Amazon Web Services EC2. Uses a YAML configuration file that ends with `aws_ec2.(yml|yaml').

  * This module is maintained by The Ansible Community
OPTIONS (= is mandatory):

- aws_access_key
        The AWS access key to use.
        (Aliases: aws_access_key_id)[Default: (null)]
        set_via:
          env:
          - name: EC2_ACCESS_KEY
          - name: AWS_ACCESS_KEY
          - name: AWS_ACCESS_KEY_ID
...

 

마치며

우리는 평소에도 의식하지 못한 채 Ansible plugins 기능을 사용하고 있으며, 많은 핵심 기능들이 plugin 형태로 제공된다는 점을 확인할 수 있었습니다. 결국 Ansible은 새로운 plugin의 추가나 기존 plugin의 기능 확장을 통해 전체 성능과 유연성을 계속해서 발전시키고 있습니다.

plugin의 종류는 매우 다양하여 모두 살펴보기는 어렵습니다. 따라서 필요한 기능부터 하나씩 확인하고 직접 사용해 보는 방식이 현실적인 접근일 것입니다.

다음 포스팅에서는 실제 plugins를 활용하는 예제를 소개할 예정입니다.

 

참고사이트

Ansible 공식 문서: https://docs.ansible.com/ansible/latest/plugins/plugins.html

댓글

이 블로그의 인기 게시물

[Linux] RHEL Local YUM Repository 구성

[Linux Command] sudo command 설명

[Ansible Modules] Fetch module 설명 및 활용