亚洲乱淫 I 香蕉成人av I 哺乳期av I 欧美播放器 I 成人私密视频 I 福利小导航 I 男人都懂的网站 I 日韩av网址在线观看 I 91超碰成人 I 色噜噜久久 I av无限看 I 国产综合在线播放 I 亚洲综合免费观看高清完整版 I 双腿张开被9个男人调教 I 欧美裸体xxx I 在线午夜电影 I 日韩女女同性aa女同 I 成人91 I 日本中文字幕免费 I 91久久久国产精品 I 免费观看黄色大片 I 伊人天堂视频 I 欧美日韩国产999 I 操人黄色 I 久久久久久性高 I 亚洲综合熟女久久久30p I 视频二区最新视频 I 亚洲国产成人二区 I 岛国黄色专区 I 亚洲www. I 欧美特黄视频在线观看 I 黄色三级软件 I 国产9页 I 久久动漫av I 免费看18禁止观看黄网站 I 青青久在线视观看视 I 欧美一夜爽爽爽爽爽爽 I 波多野结衣vs黑人 I 国产最爽乱淫视频免费

每日觀點:Shell腳本實戰:Consul 服務注冊和注銷的最佳實踐

來源:嗶哩嗶哩

業務爸爸需求: 寫一個腳本用于向 Consul 注冊或注銷服務。


(資料圖片)

Consul API 實現服務的注冊和注銷功能

拿到這個需求,我第一時間想到是用 curl 調用 Consul API 實現服務的注冊和注銷功能。 如下:

#!/bin/bashCONSUL_TOKEN="<your_token_here>"CONSUL_URL="http://localhost:8500"function?register_service?{??curl?\????--request?PUT?\????--header?"Content-Type:?application/json"?\????--header?"X-Consul-Token:?${CONSUL_TOKEN}"?\????--data?"@-?${CONSUL_URL}/v1/agent/service/register"?<<EOF{??"ID":?"${1}",??"Name":?"${2}",??"Address":?"${3}",??"Port":?${4}}EOF}function?deregister_service?{??curl?\????--request?PUT?\????--header?"X-Consul-Token:?${CONSUL_TOKEN}"?\????"${CONSUL_URL}/v1/agent/service/deregister/${1}"}#?example?usageregister_service?"my-service"?"My?Service"?"localhost"?8080deregister_service?"my-service"

在這個實現中,我們將認證token存儲在CONSUL_TOKEN變量中,并在curl請求中使用--header "X-Consul-Token: ${CONSUL_TOKEN}"來添加它。

這個是可以實現業務爸爸的需求, 但是,這種實現有以下幾個問題:

1.?不能批量添加相同的類型的指標。

2.?唯一ID需要手動維護。

3.?沒有配置文件留底,雖然三節點的consul集群很小概率同時出問題, 但是有留底還是一個很好習慣。

基于這個幾個點, 寫入下面實現腳本。

register 和 deregister實現

#!/bin/bash#?author?小毛驢#?SHELL_DIR=$(cd?$(dirname?$0);pwd)BACKUP_DIR=${SHELL_DIR}"/consulbackup"SOURCEFILE=${SHELL_DIR}"/origin.json"LOGFILE=${SHELL_DIR}"/add.log"BASESVCRIR=/data/consul/config/TOKENFILE=/data/consul/consul_token.yaml?OPTION=${OPTION:="1"}ENV=${ENV:="prod"}PROJECT=${PROJECT:="fb"}MODULE=${MODULE:="api"}SERVICENAME=${SERVICENAME:="node-exporter"}NAME=${NAME:="core"}TAG=${TAG:="node-exporter"}IPADDRS=""IPADDR=""PORT=${PORT:="9520"}LEGAL_IP="^([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$"if?[?!?-e?"${BACKUP_DIR}"?];then????mkdir?-p?${BACKUP_DIR}fifunction?usage(){????????echo?-e?"\nUsage:?$0?<option>?<value>"????????echo?-e?"\n?option:"????????echo?-e?"\n?-o,--option????option?name,?default?1:add?,?2:delete"????????echo?-e?"\n?-e,--env???????env?name,?default?prod"????????echo?-e?"\n?-p,--project???project?name,?default?fb"????????echo?-e?"\n?-m,--module????module?name,?default?api"????????echo?-e?"\n?-n,--name??????api?name,?default?core"????????echo?-e?"\n?-s,--svcname???serviceName?name,?default?node-exporter"????????echo?-e?"\n?-t,--tag???????tag?name,?default?node-exporter"????????echo?-e?"\n?-a,--address???ip?address,?eg?1.1.1.1|2.2.2.2?default?''?[Require]"????????echo?-e?"\n?-i,--interface?interface?num?default?9520"????????echo?-e?"\n?-h,--help??????help"}function?checkIp(){????#正則表達式檢驗?ip?地址????[[??$1?=~?$LEGAL_IP?]]????if?[?$??-gt?0?];?then????????echo?"$1?is?an?error?ip?fromat"????????exit?10????fi}function?svcDeregister()?{????if?[?!?-e?"$1"?];then????????echo?"$1?not?exit,?please?check!"????else????????/bin/consul?services?deregister??-token-file=${TOKENFILE}??$1????fi}function?svcRegister()?{????if?[?!?-e?"$1"?];then????????echo?"$1?not?exit,?please?check!"????else????????/bin/consul?services?register??-token-file=${TOKENFILE}?$1????fi}function?genJson()?{cat?>?"${SERVICENAME}-${ENV}-${PROJECT}-${MODULE}-${NAME}-${IPADDR}.json"?<<EOF{??"service":?{????"id":?"${SERVICENAME}-${ENV}-${PROJECT}-${MODULE}-${NAME}-${IPADDR}",????"name":?"${SERVICENAME}",????"tags":?[???????"${TAG}"????],????"address":?"${IPADDR}",????"port":?${PORT},????"meta":?{??????"name":?"${NAME}-${IPADDR}",??????"module":?"${MODULE}",??????"project":?"${PROJECT}",??????"env":?"${ENV}"????},????"check":?{??????"http":?"http://${IPADDR}:${PORT}/metrics",??????"interval":?"10s"????},????"weights":?{??????"passing":?10,??????"warning":?1????}??}}EOF}function?removeJson()?{????mv?"${SERVICENAME}-${ENV}-${PROJECT}-${MODULE}-${NAME}-${IPADDR}.json"??${BACKUP_DIR}}function?main()?{????if?(($#?==?0));then????????usage????????exit????fi????cd?${SHELL_DIR}????while?[?-n?"$1"?];do????????case?$1?in?????????-o|--option?)????????????OPTION=$2????????????shift????????????;;????????-e|--env?)????????????ENV=$2????????????shift????????????;;????????-p|--project?)????????????PROJECT=$2????????????shift????????????;;????????-m|--module??)????????????MODULE=$2????????????shift????????????;;????????-n|--name?)????????????NAME=$2????????????shift????????????;;????????-s|--svcname?)????????????SERVICENAME=$2????????????shift????????????;;????????-t|--tag?)????????????TAG=$2????????????shift????????????;;????????-a|--address?)????????????IPADDRS=$2????????????shift????????????;;????????-i|--interface?)????????????PORT=$2????????????shift????????????;;????????-h|--help?)????????????usage????????????exit????????????;;????????*)????????????echo?-e?"\n$1?unknow?an?option"????????????usage????????????exit????????esac????????shift?????done????if?[?"${IPADDRS}"x?==?""x?];then????????echo?-e?"\n-a|--address?option?is?Require"????????usage????????exit????fi????SVCRIR="${BASESVCRIR}/${SERVICENAME}"????if?[?!?-e?"${SVCRIR}"?];then????????mkdir?-p?${SVCRIR}????fi????cd?${SVCRIR}????hosts=($(echo?${IPADDRS}?|?sed?'s/|/?/g'))????for((?i=0;i<${#hosts[@]};i++))?????do????????echo?${hosts[$i]}????????checkIp?${hosts[$i]}????????IPADDR="${hosts[$i]}"????????if?[[?"${OPTION}"x?==?"1"x??]];?then????????????genJson????????????#statements????????????svcRegister?"${SERVICENAME}-${ENV}-${PROJECT}-${MODULE}-${NAME}-${IPADDR}.json"?????????fi????????if?[[?"${OPTION}"x?==?"2"x??]];?then????????????#statements????????????svcDeregister?"${SERVICENAME}-${ENV}-${PROJECT}-${MODULE}-${NAME}-${IPADDR}.json"?????????????removeJson????????fi????done?}main?$@

這個腳本首先定義了BACKUP_DIR,BASESVCRIR 和TOKENFILE 等路徑。

用法

./register-service.sh?[OPTIONS]參數-h,?--help:?顯示幫助信息并退出。-o,?-option:?1?register?;?2?deregister-e,--env???????環境標識,?default?prod-p,--project??項目名字,?default?fb-m,--module???業務模塊名,?default?api-n,--name??????模塊下面的應用名,?default?core-s,--svcname???service?名字,?default?node-exporter-t,--tag???????tag?名字,?default?node-exporter-a,--address???需要注冊到該服務的地址,多個以“|”分開,,?eg?1.1.1.1|2.2.2.2?default?''?[Require],必須提供-i,--interface??需要注冊的端口?9520

./register-service.sh -o 1 -e prod -p fb -m ops -n consul-ops -s consul_exporter-t consul_exporter -a "10.2.0.6|10.2.0.10|10.2.0.41" -i 9107

標簽:

推薦

財富更多》

動態更多》

熱點

主站蜘蛛池模板: 99精品国产自在现线10页 | 亚洲成aⅴ人片久青草影院按摩 | 欧美黑人体内she精在线观看 | 精品国产96亚洲一区二区三区 | 四虎影院黄色 | 丰满熟妇人妻av无码区 | 小荡货奶真大水真多紧视频 | 青草国产超碰人人添人人碱 | 国产疯狂做受xxxx高潮 | 三a级毛片| 日韩一区高清 | 亚洲一区二区视频在线 | 成人亚洲在线 | 亚洲欧美另类久久久精品 | 在线观看黄a∨免费无毒网站 | 亚洲国产成人精品无码区蜜柚 | 亚洲精品一区二区三区蜜臀 | 亚洲国产精品成人久久久麻豆 | 无码精品国产一区二区三区免费 | 国产精品一二三区成毛片视频 | 国产午国产午夜精华 免费 小雪尝禁果又粗又大的视频 | 欧美日韩福利视频 | 国产 日韩 欧美 成人 | 亚洲第一成年人网站 | 好好热视频 | 久久精品无码一区二区www | 久久人久久 | www.四虎com | 国产五月色婷婷六月丁香视频 | 69久久国产露脸精品国产 | 色偷偷免费视频 | 中文国语毛片高清视频 | 成人一区二区三区四区 | 免费人成在线观看视频播放 | 无人区国产成人久久三区 | 久热亚洲 | 精品网| 高清一区二区三区免费视频 | 日韩一区二区成人 | 国产精品18久久久久vr使用方法 | 天堂√8 | 欧美一区二区三区激情啪啪 | 怡春院国产精品视频 | 国产精品久久久久久不卡盗摄 | av视屏在线 | 亚洲卡一卡二卡三乱草莓 | 精品国产乱码久久久久久浪潮小说 | 国产精品aⅴ视频在线播放 欧美成 人版中文字幕 | 国产福利日本一区二区三区 | 一区欧美 | 九九在线 | 日日射av | 伊人55影院| 亚洲情综合五月天 | 国产白嫩护士被弄高潮 | 亚洲精品免费在线观看视频 | 巨胸爆乳美女露双奶头挤奶 | 第一亚洲中文久久精品无码 | 国产麻豆精品sm调教视频网站 | 日韩一区二区三 | 欧美精品一区二区久久久 | 国产一级淫片a直接免费看 男人天堂aaa | 激情av一区 | 放荡的少妇| 日韩乱码人妻无码中文字幕 | 特淫毛片 | 国产美女福利在线观看 | 午夜福利理论片在线观看 | 日韩美毛片 | 无翼乌工口全彩肉肉无遮挡18 | 亚洲精品2| 欧美肥老太牲交大战 | 免费最爽乱淫无遮挡 | 五月天精品在线 | 亚洲欧美日韩综合一区在线 | 私人午夜影院 | 久久久免费毛片 | 亚洲美女高清aⅴ视频免费 91五月色国产在线观看 | 特级西西人体4444xxxx | 日本少妇高潮叫床声一区二 | 久久久久久a亚洲欧洲aⅴ96 | 国产精品毛片久久久久久久av | 日日狠狠久久偷偷四色综合免费 | 99热久久这里只有精品 | 91神马午夜| 2021精品亚洲中文字幕 | 成人av黄色| 一本色道88久久亚洲综合加勒比 | 一区二区三区国 | 成人免费毛片网 | 国产又粗又黄的视频 | 免费的国产成人av网站装睡的 | 91精品区| 竹内纱里奈69av在线 | 亚洲免费网站 | 精品欧洲av无码一区二区 | 韩国无码色视频在线观看 | 色拍拍视频| 亚洲无圣光 |