Vladimir Alexeev 1 рік тому
батько
коміт
177d9b7cb0
1 змінених файлів з 23 додано та 24 видалено
  1. 23 24
      dnsapi/dns_selectel.sh

+ 23 - 24
dnsapi/dns_selectel.sh

@@ -4,7 +4,7 @@
 #   export SL_Ver="v1"                    - версия API: 'v2' (actual) или 'v1' (legacy).
 #                                           По-умолчанию: v1
 # Если SL_Ver="v1"
-#   export SL_Key="API_KEY"               - Токен Selectel (API key)
+#   export SL_Key="API_Key"               - Токен Selectel (API key)
 #                                           Посмотреть или создать можно в панели управления в правом верхнем углу откройте меню Профиль и настройки -> Ключи API.
 #                                           https://my.selectel.ru/profile/apikeys
 # Если SL_Ver="v2"
@@ -35,12 +35,11 @@ dns_selectel_add() {
   if ! _sl_init_vars; then
     return 1
   fi
-  _debug2 SL_Ver "$SL_Ver"
-  _secure_debug3 SL_Key "$SL_Key"
-  _debug2 SL_Expire "$SL_Expire"
-  _debug2 SL_Login_Name "$SL_Login_Name"
-  _debug2 SL_Login_ID "$SL_Login_ID"
-  _debug2 SL_Project_Name "$SL_Project_Name"
+  _debug3 SL_Ver "$SL_Ver"
+  _debug3 SL_Expire "$SL_Expire"
+  _debug3 SL_Login_Name "$SL_Login_Name"
+  _debug3 SL_Login_ID "$SL_Login_ID"
+  _debug3 SL_Project_Name "$SL_Project_Name"
 
   _debug "First detect the root zone"
   if ! _get_root "$fulldomain"; then
@@ -56,9 +55,7 @@ dns_selectel_add() {
     _ext_srv1="/zones/"
     _ext_srv2="/rrset/"
     _text_tmp=$(echo "$txtvalue" | sed -En "s/[\"]*([^\"]*)/\1/p")
-    _debug txtvalue "$txtvalue"
     _text_tmp='\"'$_text_tmp'\"'
-    _debug _text_tmp "$_text_tmp"
     _data="{\"type\": \"TXT\", \"ttl\": 60, \"name\": \"${fulldomain}.\", \"records\": [{\"content\":\"$_text_tmp\"}]}"
   elif [ "$SL_Ver" = "v1" ]; then
     _ext_srv1="/"
@@ -69,8 +66,8 @@ dns_selectel_add() {
     return 1
   fi
   _ext_uri="${_ext_srv1}$_domain_id${_ext_srv2}"
-  _debug3 _ext_uri "$_ext_uri"
-  _debug3 _data "$_data"
+  _debug _ext_uri "$_ext_uri"
+  _debug _data "$_data"
 
   if _sl_rest POST "$_ext_uri" "$_data"; then
     if _contains "$response" "$txtvalue"; then
@@ -101,7 +98,7 @@ dns_selectel_add() {
         _debug3 _record_seg "$_record_seg"
         _debug3 _record_array "$_record_array"
         _debug3 _record_array "$_record_id"
-        _debug2 "New data for record" "$_data"
+        _debug "New data for record" "$_data"
         if _sl_rest PATCH "${_ext_uri}${_record_id}" "$_data"; then
           _info "Added, OK"
           return 0
@@ -124,12 +121,11 @@ dns_selectel_rm() {
   if ! _sl_init_vars "nosave"; then
     return 1
   fi
-  _debug2 SL_Ver "$SL_Ver"
-  _secure_debug3 SL_Key "$SL_Key"
-  _debug2 SL_Expire "$SL_Expire"
-  _debug2 SL_Login_Name "$SL_Login_Name"
-  _debug2 SL_Login_ID "$SL_Login_ID"
-  _debug2 SL_Project_Name "$SL_Project_Name"
+  _debug3 SL_Ver "$SL_Ver"
+  _debug3 SL_Expire "$SL_Expire"
+  _debug3 SL_Login_Name "$SL_Login_Name"
+  _debug3 SL_Login_ID "$SL_Login_ID"
+  _debug3 SL_Project_Name "$SL_Project_Name"
   #
   _debug "First detect the root zone"
   if ! _get_root "$fulldomain"; then
@@ -153,7 +149,7 @@ dns_selectel_rm() {
   #
   _debug "Getting txt records"
   _ext_uri="${_ext_srv1}$_domain_id${_ext_srv2}"
-  _debug3 _ext_uri "$_ext_uri"
+  _debug _ext_uri "$_ext_uri"
   _sl_rest GET "${_ext_uri}"
   #
   if ! _contains "$response" "$txtvalue"; then
@@ -176,7 +172,11 @@ dns_selectel_rm() {
     return 1
   fi
   # record id
-  _record_id="$(echo "$_record_seg" | tr "," "\n" | tr "}" "\n" | tr -d " " | grep "\"id\"" | cut -d : -f 2 | tr -d "\"" | sed '1!d')"
+  # следующие строки меняют алгоритм удаления записей со значением $txtvalue
+  # если использовать 1-ю строку, то за раз удаляются все такие записи 
+  # если использовать 2-ю строку, то удаляется только первая запись из них
+  #_record_id="$(echo "$_record_seg" | tr "," "\n" | tr "}" "\n" | tr -d " " | grep "\"id\"" | cut -d : -f 2 | tr -d "\"")" # удалять все записи со значением $txtvalue
+  _record_id="$(echo "$_record_seg" | tr "," "\n" | tr "}" "\n" | tr -d " " | grep "\"id\"" | cut -d : -f 2 | tr -d "\"" | sed '1!d')" # удалять только первую запись со значением $txtvalue
   if [ -z "$_record_id" ]; then
     _err "can not find _record_id"
     return 1
@@ -188,6 +188,7 @@ dns_selectel_rm() {
     _new_arr="$(echo "$_record_seg" | sed -En "s/.*(\{\"id\"[^}]*records[^[]*(\[(\{[^]]*${txtvalue}[^]]*)\])[^}]*}).*/\3/gp" | sed -En "s/(\},\{)/}\n{/gp" | sed "/${txtvalue}/d" | sed ":a;N;s/\n/,/;ta")"
     # uri record for DEL or PATCH
     _del_uri="${_ext_uri}${_record_id}"
+    _debug _del_uri "$_del_uri"
     if [ -z "$_new_arr" ]; then
       # удалить запись
       if ! _sl_rest DELETE "${_del_uri}"; then
@@ -210,7 +211,7 @@ dns_selectel_rm() {
     # legacy
     for _one_id in $_record_id; do
       _del_uri="${_ext_uri}${_one_id}"
-      _debug2 _ext_uri "$_del_uri"
+      _debug _del_uri "$_del_uri"
       if ! _sl_rest DELETE "${_del_uri}"; then
         _err "Delete record error: ${_del_uri}."
       else
@@ -302,7 +303,6 @@ _sl_rest() {
   data="$3"
 
   _token=$(_get_auth_token)
-  #_debug "$_token"
   if [ -z "$_token" ]; then
     _err "BAD key or token $ep"
     return 1
@@ -394,7 +394,7 @@ _sl_init_vars() {
   # version API
   SL_Ver="${SL_Ver:-$(_readaccountconf_mutable SL_Ver)}"
   if [ -z "$SL_Ver" ]; then
-    SL_Ver="v2"
+    SL_Ver="v1"
   fi
   if ! [ "$SL_Ver" = "v1" ] && ! [ "$SL_Ver" = "v2" ]; then
     _err "You don't specify selectel.ru API version."
@@ -459,7 +459,6 @@ _sl_init_vars() {
     fi
     # service user password
     SL_Pswd="${SL_Pswd:-$(_readaccountconf_mutable SL_Pswd)}"
-    #_secure_debug3 SL_Pswd "$SL_Pswd"
     if [ -z "$SL_Pswd" ]; then
       SL_Pswd=''
       _err "You did not specify the service user password."