Ansible의 slack 모듈을 사용할 때 필요한 "token"으로 빠진 이야기 외 [token/토큰의 취급과 변수의 default값 등]
소개
Ansible의 slack 모듈에서 slack에 알릴 때 토큰 설정에 오류가 발생했습니다.
이 기사에서는 오류 내용과 문제 해결을 공유합니다.
환경/버전 정보
오류 메시지
토큰 값이 잘못되었음을 지적했습니다.
TASK [Use the attachments API] **********************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Slack has updated its webhook API. You need to specify a token of the form XXXX/YYYY/ZZZZ in your playbook"}
※여기서 사용하고 있던 token은 slack에서 bot를 만들 때 생성되는 xoxb로 시작하는 문자열입니다.
gkz@localhost ~$ tail ~/.bashrc | grep SLACKBOT_TOKEN
export SLACKBOT_TOKEN='xoxb-xxx'
올바른 토큰
slack의 incoming webhook url의 services/에서 뒤의 xxxx/yyyy/zzzz입니다.
htps // // 뽀오 ks. scck. 코 m / 세 r
gkz@localhost ~$ cat ~/.bashrc | grep SLACKFORMAT
export INCOMING_WEBHOOK_URL_SLACKFORMAT='xxxx/yyyy/zzzz'
※incoming webhook url의 취득 장소
htps : // 아피. scck. 코 m / 아 ps / $ {아 p_이 D} / 닌코 민 g ぇ b 호오 ks
참고: reddit QA
You need to copy token from webhook url (open webhook settings and you will see it). In fact, token is just part of url
Slack Usage with Ansible? Token error etc.
참고: 소스 코드 주석
token:
description:
- Slack integration token. (전략) In 1.8 and above, ansible adapts to the new slack API where tokens look like C webhook tokens.
ansible/slack.py at devel · ansible/ansible
무사히 Ansible의 play-book에서 slack에게 메시지를 보낼 수 있었습니다.
위와 같이 slack에게 스마트한 메시지를 보내기까지 고생한 점이 몇 가지 있었으므로, 소화로서 다루겠습니다.
- 토큰/토큰은 환경 변수로 취급한다
- 변수에 default 값을 채택
- attachments 옵션의 short가 False인 경우, title와 value 하나 하나는 접히지 않는다
playbook은 이런 느낌입니다. ↓↓
---
- hosts: all
connection: local
gather_facts: no
become: no
tasks:
- shell: ping -c 5 -w 5 localhost
register: result_shell
failed_when: >
("No such file or directory" in result_shell.stdout) or
(result_shell.stderr != '') or
(result_shell.rc == 10)
changed_when: false
- name: debug result_shell.stdout
debug:
msg: "{{ result_shell.stdout | default('None', true) }}"
- name: debug result_shell.stderr
debug:
msg: "{{ result_shell.stderr | default('None', true) }}"
- name: Use the attachments API
slack:
username: "{{ lookup('env', 'SLACKBOT_NAME') | default('ansibleBot') }}"
token: "{{ lookup('env', 'INCOMING_WEBHOOK_URL_SLACKFORMAT') }}"
channel: "{{ lookup('env', 'DST_CHANNEL') }}"
attachments:
- title: Display Result Ping Communicate
text: "{{ inventory_hostname }}"
color: "#ff00dd"
fields:
- title: "[STDOUT] Ping Communicate"
value: "{{ result_shell.stdout | default('None', true)}}"
#short: True
short: False
- title: "[STDERR] Ping Communicate"
value: "{{ result_shell.stderr | default('None', true)}}"
#short: True
short: False
token/토큰은 환경 변수로 취급한다
token이나 투고처 등 호스트(Ansible 서버)에서 지정하는 값이나 playbook에 공개하고 싶지 않은 값은 환경 변수로 건네주는 것이 베터가 아닐까 생각합니다.
username: "{{ lookup('env', 'SLACKBOT_NAME') }}"
참고 : env – read the value of environment variables — Ansible Documentation
※환경 변수의 참조처가 호스트(Ansible 서버)가 아니라 타겟(Ansible의 설정처)인 경우, ansible_env를 사용하면 좋을 것 같습니다.
참고 : [Ansible] 환경 변수를 얻는 ansible_env.hoge와 lookup("env", "hoge")의 차이점
변수에 default 값을 채택
변수에 default 값을 채택할 수 있지만 true로 작성해야 하는 경우에는 그렇지 않은 경우가 있습니다.
username: "{{ lookup('env', 'SLACKBOT_NAME') | default('ansibleBot') }}"
정의된 변수의 값이 Color, False이면 default('hogehoge', true) 및 true가 필요합니다.
fields:
- title: "[STDERR] Ping Communicate"
value: "{{ result_shell.stderr | default('None', true)}}"
#short: True
short: False
참고 : Filters — Ansible Documentation
attachments 옵션의 short가 False이면 title 및 value 하나는 접히지 않습니다.
- name: Use the attachments API
slack:
username: "{{ lookup('env', 'SLACKBOT_NAME') }}"
token: "{{ lookup('env', 'INCOMING_WEBHOOK_URL_SLACKFORMAT') }}"
channel: "{{ lookup('env', 'DST_CHANNEL') }}"
attachments
- title: Display Result Ping Communicate
text: "{{ inventory_hostname }}"
color: "#ff00dd"
fields:
- title: "[STDOUT] Ping Communicate"
value: "{{ result_shell.stdout | default('None', True)}}"
short: True
#short: False
- title: "[STDERR] Ping Communicate"
value: "{{ result_shell.stderr | default('None', True)}}"
short: True ##title/valueで定義された値は複数列で記載(値は折返す)
#short: False ##title/valueで定義された値は1列で記載(値は折返さない)
참고 : Attaching content and links to messages | Slack
샘플 코드
Sample Ansible Playbook
P.S. Twitter도 하고 있으므로 팔로우해 주시면 울고 기뻐합니다 :)
@gkzvoice
#gkz
Reference
이 문제에 관하여(Ansible의 slack 모듈을 사용할 때 필요한 "token"으로 빠진 이야기 외 [token/토큰의 취급과 변수의 default값 등]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/gkzz/items/16029b85844b26b5b8d9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)