5. 태스크 실행 및 권한 확인


태스크가 정상적으로 발행됐다면, 태스크를 실행(Execution) 할 수 있습니다.

태스크가 실행되면 실행 인스턴스가 만들어지고, 실행 인스턴스별로 실행 ID를 부여받게 됩니다.


태스크 실행


opmate execution run으로 이전 단계에서 발행한 태스크를 실행할 수 있습니다.

$ opmate execution run -ts task_uptime

> Requesting https://127.0.0.1:8443/opmate;user=gildong
> execution #1 has been created successfully.
  • ‘Execution #1‘으로 태스크가 실행된 것을 확인할 수 있습니다.
    • 이때 ‘1’ 은 해당 실행의 실행 ID입니다.

Execution 결과 조회


opmate execution listnode로 태스크 실행 결과 목록을 조회합니다.

$ opmate execution listnode -id 1

> Requesting https://127.0.0.1:8443/opmate;user=gildong

+--------------------------------------+-----------------+---------------+-----------+---------+
| NODE-SESSION-ID                      | HOSTNAME        | REMOTE-ADDR   | STATUS    | RESULT  |
+--------------------------------------+-----------------+---------------+-----------+---------+
| 9510d4b6-4269-4b00-a2be-cb408c6e668d | APP-DEV-LINUX   | 11.22.33.46   | stopped   | n/a     |
| 01d5020e-dc5f-4744-ad9c-22f23727db76 | DB-DEV-LINUX    | 11.22.33.43   | completed | success |
| ea3117fe-2c16-4533-afb7-8b0fe7685251 | DB-PROD-LINUX   | 11.22.33.45   | completed | success |
+--------------------------------------+-----------------+---------------+-----------+---------+

> ROWS COUNT : 3/3

모든 리눅스 노드를 대상으로 태스크를 실행했기에 총 3개의 노드가 조회됩니다.

여기서 STATUScompleted라면 태스크가 정상적으로 실행 완료되었다는 뜻입니다.
STATUSrequesting이나 running라면 태스크가 실행 중이라는 뜻으로 잠시 대기합니다.
만약 STATUSstopped라면 모종의 이유로 태스크가 중지되었다는 뜻입니다.

실행 완료된 노드 중 하나인 ‘DB-DEV-LINUX’를 opmate execution viewnode로 상세 조회해 보겠습니다.

$ opmate execution viewnode -id 1 -nd 01d5020e-dc5f-4744-ad9c-22f23727db76

> Requesting https://127.0.0.1:8443/opmate;user=gildong

+-----------------+--------------------------------------+
| FIELD           | VALUE                                |
+-----------------+--------------------------------------+
| NODE-SESSION-ID | 01d5020e-dc5f-4744-ad9c-22f23727db76 |
| HOSTNAME        | DB-DEV-LINUX                         |
| REMOTE-ADDRESS  | 11.22.33.43                          |
| ACCOUNT         | root                                 |
| STATUS          | completed                            |
| RESULT          | success                              |
| EXIT-NUM        | 0                                    |
| FORCE-STOP      | n/a                                  |
| START-DATE      | 2024-03-20 16:14:19 KST              |
| END-DATE        | 2024-03-20 16:14:20 KST              |
+-----------------+--------------------------------------+

[STDOUT]
 07:14:20 up  4:45,  0 users,  load average: 0.05, 0.03, 0.01

[STDERR]
No content.

표준 출력(STDOUT)으로 스크립트(uptime)의 결과가 출력되는 것을 확인할 수 있습니다.

그렇다면 이번엔 STATUSstopped였던 ‘APP-DEV-LINUX’ 노드를 상세 조회해 볼까요?

$ opmate execution viewnode -id 1 -nd 9510d4b6-4269-4b00-a2be-cb408c6e668d

> Requesting https://127.0.0.1:8443/opmate;user=gildong

+-----------------+--------------------------------------+
| FIELD           | VALUE                                |
+-----------------+--------------------------------------+
| NODE-SESSION-ID | 9510d4b6-4269-4b00-a2be-cb408c6e668d |
| HOSTNAME        | APP-DEV-LINUX                        |
| REMOTE-ADDRESS  | 11.22.33.46                          |
| ACCOUNT         | root                                 |
| STATUS          | stopped : no role of node            |
| RESULT          | n/a                                  |
| EXIT-NUM        |                                      |
| FORCE-STOP      | n/a                                  |
| START-DATE      |                                      |
| END-DATE        |                                      |
+-----------------+--------------------------------------+

[STDOUT]
No content.
[STDERR]
No content.

‘no role of node’라는 메시지와 함께 태스크 실행이 중단된 것을 확인할 수 있습니다.

그러면 role이란 과연 무엇이고, 왜 태스크 실행이 중단되었을까요?


권한 확인


역할(Role)은 노드에서의 태스크 실행 권한입니다.
태스크의 소유자(Owner)가 노드를 태스크의 대상으로 지정할 때는 반드시 지정한 노드에 대한 역할을 가지고 있어야 합니다.

그럼 ‘gildong’ 이 어떤 역할을 가지고 있는 지 조회해 보겠습니다.
우선 opmate role list로 전체 역할 목록을 조회합니다.


$ opmate role list

> Requesting https://127.0.0.1:8443/opmate;user=gildong

+-------------+------------+
| ID          | NAME       |
+-------------+------------+
| ro-app-dev  | APP 개발자  |
| ro-db-admin | DB 관리자   |
| ro-db-dev   | DB 개발자   |
+-------------+------------+

>ROWS COUNT : 3/3

총 3개의 역할이 조회됩니다.

다시 한번 상기하자면, ‘gildong’은 DB 관리자입니다.
따라서 opmate role view‘DB 관리자’ 역할을 상세 조회해 보겠습니다.


$ opmate role view -id ro-db-admin

> Requesting https://127.0.0.1:8443/opmate;user=gildong

+----------+------------------------------------+
| FIELD    | VALUE                              |
+----------+------------------------------------+
| ID       | ro-db-admin                        |
| NAME     | DB 관리자                           |
| CREATED  | 2024-03-20 16:02:14 KST BY admin   |
| UPDATED  | 2024-03-20 16:14:04 KST BY admin   |
+----------+------------------------------------+
| NODE-SET | #1. HOSTNAME:"^DB-" AS * # DB 서버  |
+----------+------------------------------------+
| USER     | admin(관리자)                       |
|          | gildong(홍길동)                     |
+----------+------------------------------------+

USER는 역할을 사용할 수 있는 사용자입니다. 예시에선 ‘admin’‘gildong’ 이 해당합니다.

NODE-SET은 역할을 가진 사용자가 사용할 수 있는 노드입니다. 정규 표현식으로 지정되어 있습니다.

예시에서는 호스트명이 ‘DB-‘로 시작되는 모든 노드가 지정되어 있는데요,

stopped 상태였던 ‘APP-DEV-LINUX’ 노드는 ‘DB-‘로 시작되는 노드가 아니므로,
‘DB 관리자’ 역할만 가지고 있는 ‘gildong’ 에게는 해당 노드에 대한 권한, 즉 역할이 없습니다.

따라서 해당 노드를 제외하여, DB 노드에서만 태스크를 실행하고 싶다면
4장: 태스크 정의에서 만들었던 태스크 정의서(test_uptime.tdf)를 다음과 같이 수정해야 합니다:

---
id: task_uptime
owner: gildong
publisher: gildong
script-account: root
description: 서버 가동 시간 조회

target:
- node-set: HOSTNAME:"^DB-", OS-TYPE:"^Linux$"
  description: OS가 Linux인 모든 DB 대상으로 Task 실행

node-setHOSTNAME: “^DB-"라는 표현식을 추가했습니다.
이는 HOSTNAME에 ‘DB-‘라는 식별자로 시작하는 노드만을 포함한다는 뜻입니다.


수정 후 task_uptime 태스크를 수정(opmate task edit) 및 발행(opmate task publish)하고,\ 실행(opmate execution run)까지 완료하면 태스크 실행 결과가 다음과 같이 변경됩니다:
$ opmate execution listnode -id 2

> Requesting https://127.0.0.1:8443/opmate;user=gildong

+--------------------------------------+-----------------+---------------+-----------+---------+
| NODE-SESSION-ID                      | HOSTNAME        | REMOTE-ADDR   | STATUS    | RESULT  |
+--------------------------------------+-----------------+---------------+-----------+---------+
| 01d5020e-dc5f-4744-ad9c-22f23727db76 | DB-DEV-LINUX    | 11.22.33.43   | completed | success |
| ea3117fe-2c16-4533-afb7-8b0fe7685251 | DB-PROD-LINUX   | 11.22.33.45   | completed | success |
+--------------------------------------+-----------------+---------------+-----------+---------+

> ROWS COUNT : 2/2

‘APP-DEV-LINUX’ 노드가 실행 목록에서 제외된 것을 확인할 수 있습니다.