Home | 문태준 | 시스템어드민 메일링 | Sys Admin 세미나
Skip to end of metadata
Go to start of metadata

Learning MCollective에서 Custom Plugins 만드는 방법 정리함.

https://github.com/jorhett/learning-mcollective/tree/master/examples/thanks 에서 소스 참고하면 됨.

agent 만들기

http://docs.puppetlabs.com/mcollective/simplerpc/index.html

http://docs.puppetlabs.com/mcollective/simplerpc/agents.html

http://docs.puppetlabs.com/mcollective/simplerpc/agents.html 에서 예제로 나온 echo agent 는 "mco rpc echo echo msg='test'" 로 해서 실행을 할 수 있다.

mco plugin generate agent 명령을 이용하여 기본 템플릿을 만들 수 있음. 

thanks.rb, thanks.ddl 을 다음과 같이 편집을 함.

agent 설치하기. 해당 패키지를 만들기 위해서는 사전에 해당 OS에 맞는 프로그램을 설치해야 하며 CENTOS의 경우  rpm-build rpm을 설치하면 됨. 새로운 agent 를 설치하고 나서는 mcollective 를 재시작 해야 함.

rpm 으로 설치한 경우 파일이 /usr/libexec/mcollective/mcollective/agent 디렉토리에 복사가 된다. 테스팅을 하는 경우에는 이 디렉토리에서 직접 테스팅을 하고 mcolletive를 재시작한 후 테스팅을 할 수도 있다.

 

agent 테스팅하기 : Learning MCollective 에서는 인자를 줄때  --person="jack"  로 되어 있지만 --는 없어야 함.

입력값을 검증하기 때문에 문자와 space만으로 시작한 문자만 허용 가능하도록 되어 있다. person은 지정하지 않은 경우에는 기본값이 나온다.

 위 에서 delicacy 에 대한 값은 /etc/mcollective/server.cfg 나 /etc/mcollective/plugin.d/thanks.cfg 등에서 불러오도록 변경을 할 수도 있음. 이에 대한 부분은 Learning Mcollective 15장 참고.

person 을 입력하지 않아도 실행은 잘 됨. 이 부분은 다음 두가지와 연관이 있다고 함.

  • "We aren't yet using an application to enforce data input"
  • The DDL provides a default value.

만약 thanks.ddl 에서 기본값을 제거하면 다음과 같이 나올 것이다.

외부 스크립트 실행하기

https://github.com/puppetlabs/marionette-collective/tree/master/ext/action_helpers/python/kwilczynski 예제 참고.

https://github.com/puppetlabs/marionette-collective/tree/master/ext/action_helpers 에서 python, perl, php 예제 스크립트를 볼 수 있음.

다른 외부 스크립트를 실행하여 그 결과를 받을 수도 있으며 결과를 JSON 포맷으로 쓸 수 있으면 된다. 이 스크립트를 reply를 JSON hash 로 쓸 수 있으면 된다. resturn code는 책 p187 참고.

echo.ddl

echo.rb https://github.com/puppetlabs/marionette-collective/tree/master/ext/action_helpers/python/kwilczynski 파일을 다운로드 받아 py 파일에 실행권한을 주고 실행하도록 하였음.

실행결과

아래는 처음 만들었던 thanks.rb 에서 특정 명령을 실행하도록 변경한 것이다.

다음과 같이 facts 같은 값을 가져올 수 도 있다. agent, class 등도 가져올 수 있다.

Client Application 만들기

thanks/agents 에 agent를 만들었다면 thanks/application 디렉토리를 만들고 여기에 thnaks.rb client Applicatoin을 만들면 된다.

이제 rpm package 로 만들고 rpm을 이용하여 설치를 하면 된다.

Standalone Client 만들기

실행하기

 

세가지 실행 방법 차이. mco rpc 이용, thanks client app 이용, 직접 작성한 스크립트 이용.

agent 를 만들고 mco rpc 이용하면 따로 스크립트나 client app을 만들지 않아도 실행을 할 수 있다. 그렇지만 자주 사용하는 명령어라면 client app을 만들어서 쓰는 것이 편할 것이고 프로그램에서 이용을 할 것이라면 직접 작성한 스크립트를 만들어서 쓰면 될 것이다.

Collecting Responses

MCollective 가 가진 기능 중 유용한 것중의 하나는 클라이언트에서 요청을 보내고 다른 클라이언트나 리스너에서 응답을 하여 처리할 수 있는 부분이다.

Figure 22-1. A separate listener to process results from requests

https://github.com/jorhett/learning-mcollective/blob/master/examples/listen/debugger.rb

위소스를 /usr/libexec/mcollective/mcollective/listener 디렉토리로 복사를 한다. 그러고 나서 특정 큐에서 응답하도록 요청을 보낸다.

요청보내기

debugger.rb 실행하기

이렇게 데이터를 받아서 필요한 다른 처리를 할 수가 있다. DBMS에 집어넣기, 파일로 저장하기, REST API를 이용하는 다른 시스템에 전송 등.

Labels
  • No labels