批量刪除harbor中的鏡像

来源:https://www.cnblogs.com/xiyangxixi/archive/2018/12/16/10126106.html
-Advertisement-
Play Games

一 說明 這個是我第一篇博客,所以我想放上原創的東西,儘管我一直都很擔心自己寫得太low,但是總要學會嘗試,學會改變自己,相信自己。在寫這個腳本時,由於我接觸LInux不是很多,能力有限,僅僅是為了讓自己心情好點,可以說只是為了完成任務,並沒有考慮其中比如代碼重覆,註釋不完整等諸多問題。這是9月份做 ...


一 說明

     這個是我第一篇博客,所以我想放上原創的東西,儘管我一直都很擔心自己寫得太low,但是總要學會嘗試,學會改變自己,相信自己。在寫這個腳本時,由於我接觸LInux不是很多,能力有限,僅僅是為了讓自己心情好點,可以說只是為了完成任務,並沒有考慮其中比如代碼重覆,註釋不完整等諸多問題。這是9月份做的事情了,因為各種原因,後續也沒去關註腳本中問題。請多多包含。

二 背景

     公司最近在搞關於k8s的東西,我也跟著參與進去了。在學習和使用了一段時間之後,發現Habor中的鏡像越來越多,因為我們是採用以當前時間作為鏡像的標簽,所以幾個月之後,發現磁碟容量剩餘不多了,決定要刪除之前的一些已經確定不會再使用的鏡像。於是,我就手動刪除了最早一個月的鏡像,結果搞得我很不爽,這樣子太慢了,太消耗時間了。於是想,通過腳本刪除豈不是更好麽?這樣子很快的就能夠刪除那些沒用的鏡像了,省得我心煩。後來網上找了一下,發現並沒有類似的腳本之類的。於是,決定根據官網所提供的介面自己來寫一個腳本。當時在瞭解了之後,決定用shell,python也是可以的 ,不過我還在學習的路上。所以決定先用shell,後學學成再改到用python。在此過程中,非常感謝我的一個同事陪我一起進行了測試和驗證。

三 具體思路

     首先,我們的harbor中的項目都是公有的,harbor的訪問時通過功能變數名稱,採用https,鏡像以當前時間為標簽,比如201810121420 201807081234。執行刪除腳本時,先告訴你目前harbor下有那些項目,讓你選擇項目,根據你選擇的項目去查詢它下麵有哪些倉庫,讓你輸入倉庫,再去查詢其下麵有哪幾種鏡像格式,如10月的鏡像格式為201810;再根據你輸入的鏡像格式去刪除以鏡像格式刪除的鏡像,就是如果你選擇201810,則2018年10月的所有鏡像都會被刪除,最後告知你刪除了多少個鏡像。腳本執行後,磁碟空間並不會釋放,還是需要停止Harbor進行回收。

四 腳本內容

     腳本我放在了github上,地址:https://github.com/zhouhua-amei/docker

#! /bin/bash
# 通過Harbor提供的API來批量刪除鏡像,人工刪除費時費力
# 經過測試發現,通過介面去刪除時提供的是的標簽,但實際上刪除的時候通過的是鏡像的IMAGE_ID,也就是說
# 如果我把同一個鏡像tag多次上傳到harbor,通過藉口刪除時,只需要提供其中一個標簽,那麼和這個鏡像的IMAGE_ID相同的鏡像都會刪除


#### 項目個數
lines=`curl -s -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://harbor.k8stest.com/api/projects?" |grep "\"name\""|awk -F "\"" '{print $4}'|wc -l`
##### 展示當前有幾個項目
echo "當前Harbor有以下幾個項目:"
for i in $(seq 1 $lines)
do
   ###########具體是啥項目
   a=`curl -s -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://harbor.k8stest.com/api/projects?" |grep "\"name\""|awk -F "\"" '{print $4}'|awk -v b=$i 'NR==b{print $1}'`
   echo $i、$a
done
#######選擇具體的項目
read -p  "請輸入序號(1~$lines):,查看其下的鏡像倉庫:" number
if [ $number -ge 1 -a $number -le $lines ]
then
 #########選擇的是哪個項目
 c=`curl -s -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://harbor.k8stest.com/api/projects?" |grep "\"name\""|awk -F "\"" '{print $4}'|awk -v b=$number 'NR==b{print $1}'`
#####多少個倉庫
  d=`curl -s -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://harbor.k8stest.com/api/projects?" |grep "$c" -C 2 |grep "project_id" |awk '{print $2}' |awk -F "," '{print $1}'`
  #echo "\$d-----------$d"
######顯示倉庫個數
 ## e=`curl -s -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://harbor.k8stest.com/api/repositories?project_id=$d" | grep "\"name\"" |awk -F "\"" '{print $4}' |awk -F "/" '{print $2}'|wc -l`
e=`curl -s -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://harbor.k8stest.com/api/repositories?project_id=2" | grep "\"name\"" |awk -F "\"" '{print $4}' |sed 's/sc\///g'|wc -l`
 ####### 簡單展示
  echo "項目$c下有以下鏡像倉庫:"
  for line in $(seq 1 $e)
  do
   #####具體的倉庫名
    f=`curl -s -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://harbor.k8stest.com/api/repositories?project_id=$d" | grep "\"name\"" |awk -F "\"" '{print $4}' |sed 's/sc\///g'|awk -v g=$line 'NR==g{print $1}'`
    echo $line、$f
  done
   read -p  "請輸入序號(1~$e):,查看其下的鏡像格式以及對應的數量:" num
   if [ $num -ge 1 -a $num -le $e ]
   then
  #### 鏡像倉庫名字
     h=`curl -s -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://harbor.k8stest.com/api/repositories?project_id=$d" | grep "\"name\"" |awk -F "\"" '{print $4}' |sed 's/sc\///g'|awk -v g=$num 'NR==g{print $1}'`
     echo "您選擇的倉庫是$h"
  #### 標簽類型種類個數
#     i=`curl -s -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://harbor.k8stest.com/api/repositories/$c%2F$h/tags/" |grep "\"name\"" |awk -F"\"" '{print $4}' | cut -c -6 |sort -n |uniq|wc -l`
    # echo $i
 #### 標簽類型以及個數
    echo "##################################"
    echo "鏡像格式為:如果是10月,則為201810*"
    echo "##################################"
    #####每種鏡像格式以及其數量
    curl -s -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://harbor.k8stest.com/api/repositories/$c%2F$h/tags/" |grep "\"name\"" |awk -F"\"" '{print $4}' | cut -c -6 |awk '{count[$1]++}END{for (i in count)print i,count[i]}'
 ######輸入鏡像格式,進行刪除
     echo "如果想刪除某種形式的鏡像,請輸入類型:"
     read image_format
     ##########輸入類型的所有鏡像
     images=`curl -s -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://harbor.k8stest.com/api/repositories/$c%2F$h/tags/" |grep "\"name\"" |awk -F"\"" '{print $4}'|grep $image_format|awk '{print $1}'`
     #########統計鏡像個數
    count_image=`curl -s -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://harbor.k8stest.com/api/repositories/$c%2F$h/tags/" |grep "\"name\"" |awk -F"\"" '{print $4}'|grep $image_format|wc -l`
    for image_label in $images
    do
    #############執行刪除
      curl -u "admin:Harbor12345" -X DELETE -H "Content-Type: application/json" "https://harbor.k8stest.com/api/repositories/$c%2F$h/tags/$image_label"
    done
      if [ $? -eq 0 ]
      then
        echo "刪除成功"
        echo "本次共刪除$count_image個鏡像"
      fi
 fi
fi

五 致謝

     感謝博客園提供平臺,也感謝我的同事幫助我進行測試和驗證。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、命令介紹 ls命令用於顯示目錄中的信息。 二、實例 我們首先使用ls命令不加任何參數,不帶參數運行ls會只列出文件或者目錄。看不到其他信息輸出。 所處的工作目錄不同,當前工作目錄下的文件肯定也不同。 使用 ls 命令的“-a”參數看到全部文件(包括隱藏文件),使用“-l”參數可以查看文件的屬性、 ...
  • 安裝swat swat是一個圖形化的samba管理軟體,可以幫助不熟悉的人去靈活的配置samba服務, 1、安裝swat [root@localhost wj]#yum install -y samba-swat Dependency Updated: libsmbclient.i686 0:3.6 ...
  • { 個人心得: 嵌入式底層重要的是在CPU(各種架構)或SOC基礎上,利用u-boot初始化系統,並啟動OS,建立實時多任務環境、文件系統等,再根據功能要求設計上層程式;而對硬體的需有足夠掌握。 } 1 cmd命令 1.1 常用命令 pwd、ls、cd、mkdir(文件操作:touch、cp、mv、 ...
  • inotify簡介: inotify是一種強大的、細粒度的、非同步的文件系統事件監控機制,linux內核從2.6.13起,加入了inotify支持,通過inotify可以監控文件系統添加、刪除、修改、移動等各種事件,利用這個內核介面,第三方軟體就可以監控文件系統下文件的各種變化情況,而inotify- ...
  • 大家都知道數據非常重要的,需要經常備份,如果備份了,但無法恢復還原,那就證明你備份的很失敗,所有當我們備份了數據需要檢查是否備份完整,是否可用可恢復。以下為一個企業案例: 某公司里有一臺Web伺服器,裡面的數據很重要,但是如果硬碟壞了,數據就會丟失,現在領導要求你把數據在其他機器上做一個周期性定時備 ...
  • 在內核初始化完成之後, 記憶體管理的責任就由伙伴系統來承擔. 伙伴系統基於一種相對簡單然而令人吃驚的強大演算法. Linux內核使用二進位伙伴演算法來管理和分配物理記憶體頁面, 該演算法由Knowlton設計, 後來Knuth又進行了更深刻的描述. 伙伴系統是一個結合了2的方冪個分配器和空閑緩衝區合併計技術的 ...
  • Centos7 firewall開放3306埠 1. 查看防火牆狀態 2. 關閉防火牆firewall 3. 開啟埠 4. 重啟防火牆 5. 常用命令介紹 ...
  • 無人值守安裝可以大大縮短安裝系統的時間。我在虛擬機測試成功。 先給文件鏈接https://files.cnblogs.com/files/sishenzaixian/%E8%87%AA%E5%8A%A8%E5%AE%89%E8%A3%85.zip。 這裡先上xp自動應答文件——unattend.tx ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...