Ansible - 모듈 개발 시작하기 > Ansible 자료실

본문 바로가기

사이트 내 전체검색

뒤로가기 Ansible 자료실

실습 Ansible - 모듈 개발 시작하기

페이지 정보

작성자 snow 작성일 24-10-11 17:24 조회 479 댓글 0

본문

Ansible 모듈 개발 시작하기

이 게시글에서는 Ansible 모듈 개발 시작하기에 대한 문서를 살펴보고, 예시만 안내드리는 글입니다.


1. Ansible 모듈이란?

Ansible 모듈은 재사용 가능한 독립적인 스크립트로, Ansible이 로컬 또는 원격에서 실행하여 특정 작업을 수행하는 역할을 합니다. 예를 들어, 데이터베이스 비밀번호를 변경하거나 클라우드 인스턴스를 생성하는 작업이 가능합니다. Ansible API, ansible 명령어나 ansible-playbook 프로그램을 통해 모듈을 실행할 수 있습니다. 모듈은 정해진 인터페이스를 제공하며, 인수를 받아들여 작업을 수행한 후, JSON 문자열을 stdout에 출력하여 결과를 반환합니다.

Ansible은 기본적으로 수천 개의 모듈을 제공하지만, 필요한 경우 쉽게 사용자 정의 모듈을 작성할 수 있습니다. 로컬에서 사용할 모듈을 작성할 경우, 자신이 선호하는 프로그래밍 언어를 사용하여 자유롭게 개발할 수 있습니다. 이번 글에서는 Python을 사용하여 Ansible 모듈을 개발하는 과정을 소개합니다.


2. 환경 설정

Ansible 모듈을 개발하기 위해서는 먼저 개발 환경을 설정해야 합니다. 여기서는 Ubuntu에서 Ansible 개발 환경을 구성하는 방법을 설명합니다.

2.1. Linux에서 필요한 패키지 설치

Ansible은 다양한 종속성 패키지를 필요로 하므로, Ubuntu는 다음 명령어로 필수 패키지를 설치해야 합니다.

```bash

sudo apt update

sudo apt install build-essential libssl-dev libffi-dev python-dev

```

 

CentOS는 다음 명령어로 필수 패키지를 설치해야 합니다.

```bash

sudo dnf update

sudo dnf groupinstall "Development Tools"

sudo dnf install -y openssl-devel libffi-devel python3-devel

```

위 명령을 실행하면 필수 빌드 도구와 함께 SSL, FFI 라이브러리 및 Python 개발 환경을 설정할 수 있습니다.

2.2. 가상 환경 설정

Ansible 개발을 위한 가상 환경을 설정하려면 다음 단계를 따릅니다:

```bash

git clone https://github.com/ansible/ansible.git

cd ansible

python3 -m venv venv

. venv/bin/activate

pip install -r requirements.txt

. hacking/env-setup

```

위 명령을 실행하면 가상 환경을 설정하고 필요한 개발 패키지를 설치할 수 있습니다. 이 가상 환경을 활성화한 후, Ansible 모듈 개발을 바로 시작할 수 있습니다.


3. 새로운 Ansible 모듈 작성

새로운 Ansible 모듈을 개발하기 위해 다음 절차를 따릅니다:

3.1. 모듈 파일 생성

먼저 Ansible 모듈이 위치할 디렉토리로 이동하고, 새로운 Python 파일을 생성합니다:

```bash

cd lib/ansible/modules/cloud/azure/

touch my_test.py

```

3.2. 모듈 코드 작성

아래의 Python 코드를 새로 생성한 my_test.py 파일에 붙여 넣고, 원하는 대로 수정하여 모듈을 작성합니다:

```python

# !/usr/bin/python

# Copyright: (c) 2018, Terry Jones @example.org>

# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)

 

from ansible.module_utils.basic import AnsibleModule

 

def run_module():

    module_args = dict(

        name=dict(type='str', required=True),

        new=dict(type='bool', required=False, default=False)

    )

 

    result = dict(

        changed=False,

        original_message='',

        message=''

    )

 

    module = AnsibleModule(

        argument_spec=module_args,

        supports_check_mode=True

    )

 

    if module.check_mode:

        module.exit_json(**result)

 

    result['original_message'] = module.params['name']

    result['message'] = 'goodbye'

 

    if module.params['new']:

        result['changed'] = True

 

    if module.params['name'] == 'fail me':

        module.fail_json(msg='You requested this to fail', **result)

 

    module.exit_json(**result)

 

def main():

    run_module()

 

if __name__ == '__main__':

    main()

```

이 코드는 기본적으로 사용자로부터 전달받은 이름 인수를 출력하고, 특정 조건에 따라 상태를 변경하는 간단한 모듈입니다. 이후 모듈을 확장하여 더 복잡한 작업을 수행할 수 있습니다.


4. 모듈 코드 테스트

4.1. 로컬에서 모듈 테스트

다음 명령을 사용하여 로컬에서 모듈을 직접 실행할 수 있습니다. 이를 위해 JSON 형식의 인수 파일을 먼저 생성해야 합니다.

```json

{

   "ANSIBLE_MODULE_ARGS": {

      "name": "hello",

      "new": true

   }

}

```

위와 같은 인수 파일을 /tmp/args.json 경로에 저장한 후, 가상 환경을 활성화하고 다음 명령으로 모듈을 테스트합니다:

```bash

. venv/bin/activate

. hacking/env-setup

python -m ansible.modules.cloud.azure.my_test /tmp/args.json

```

이 명령을 실행하면 JSON 형식으로 결과가 출력됩니다:

```json

{

   "changed": true,

   "state": {

      "original_message": "hello",

      "new_message": "goodbye"

   },

   "invocation": {

      "module_args": {

        "name": "hello",

        "new": true

      }

   }

}

```


4.2. Ansible 플레이북에서 모듈 테스트

모듈을 Ansible 플레이북에 포함시켜 테스트하려면 다음 단계로 진행합니다:

```bash

touch testmod.yml

```

이후 다음 내용을 포함하여 플레이북을 작성합니다:

```yaml

- name: test my new module

  hosts: localhost

  tasks:

    - name: run the new module

      my_test:

        name: 'hello'

        new: true

      register: testout

    - name: dump test output

      debug:

        msg: '{{ testout }}'

```

이후 다음 명령으로 플레이북을 실행하여 모듈을 테스트할 수 있습니다:

```bash

ansible-playbook ./testmod.yml

```

플레이북 실행 후 결과를 분석하여 모듈이 올바르게 동작하는지 확인할 수 있습니다.


5. 결론

이 글에서는 Ansible 모듈을 개발하는 기본 과정을 다뤘습니다. 모듈 작성부터 테스트까지의 과정을 순차적으로 설명하였으며, 각 단계에서 발생할 수 있는 상황에 대해 간단한 예시를 제공했습니다. Ansible 모듈 개발을 통해 다양한 시스템 작업을 자동화하고 효율적으로 관리할 수 있는 가능성을 열어줍니다. 추가적인 심화 개발을 위해 Ansible 공식 문서를 참고하여 다양한 모듈을 작성해 보시길 바랍니다.

댓글목록 0

등록된 댓글이 없습니다.

Copyright © 소유하신 도메인. All rights reserved.

사이트 정보

회사명 : (주)리눅스데이타시스템 / 대표 : 정정모
서울본사 : 서울특별시 강남구 봉은사로 114길 40 홍선빌딩 2층 / tel : 02-6207-1160
대전지사 : 대전광역시 유성구 노은로174 도원프라자 5층 / tel : 042-331-1161

PC 버전으로 보기