精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

改進你的 Ansible 劇本的 4 行代碼

運維 系統運維
在系統自動化的過程中,很少有比那些通過粘合 API 創建的象牙塔更脆弱的塔。這是一個脆弱的世界。要讓它“工作起來”,交付它,然后繼續前進,壓力巨大。

[[377986]]

只要付出一點點努力,你就可以幫助下一個人,不只是繪制出安全路徑,還可以留下危險的警告。

在博客圈里,人們對基礎架構即代碼、持續集成/持續交付(CI/CD)管道、代碼審查和測試制度贊不絕口,但人們很容易忘記,這種精心設計的象牙塔只是一種理想,而不是現實。雖然不完美的系統困擾著我們,但我們必須交付一些東西。

在系統自動化的過程中,很少有比那些通過粘合 API 創建的象牙塔更脆弱的塔。這是一個脆弱的世界。要讓它“工作起來”,交付它,然后繼續前進,壓力巨大。

要解決的問題

想象一個簡單的功能請求:編寫一些 Ansible 代碼,在外部系統中創建幾條記錄,以記錄一個 VLAN 的一些詳細信息。我最近很想做一些實驗室的管理工作來完成這個任務。這個外部系統是一個常見的互聯網協議地址管理Internet Protocol Address Management(IPAM)工具,但對于一個更抽象的配置管理數據庫Configuration Management DataBase(CMDB)或一個與網絡無關的記錄來說,困難是一樣的。在這個例子中,我創建一個記錄的直接愿望就是讓系統保存記錄而已。

如果我們的目標是一個超緊湊的、直接的、笨拙的宏,那么它可能用 100 行代碼就能寫出來。如果我記得 API,我也許能在一個小時內把它敲出來,該代碼的作用不會超過預期,除了確切的成品之外,什么也沒留下。對它的目的而言是完美的,但是對未來的擴展毫無用處。

如今,我希望幾乎每個人都能從一個角色role和幾個任務task文件開始這項任務,準備擴展到十幾個創建、讀取、更新和刪除(CRUD)操作。因為我不了解這個 API,我可能會花上幾個小時到幾天的時間,僅僅是擺弄它,弄清楚它的內部模式和工藝,彌和它的功能和我用代碼編寫出來的意圖之間的差距。

在研究 API 的時候,我發現創建一個 VLAN 記錄需要一個父對象引用 vlan_view_ref。這看起來像一個路徑片段,里面有隨機字符。也許它是一個哈希,也許它真的是隨機的,我不確定。我猜想,許多在泥濘中掙扎的人,在迫在眉睫的截止日期前,可能會把這個任意的字符串復制粘貼到 Ansible 中,然后繼續混下去。忽略這個角色role的實現細節,顯而易見這個劇本playbook級的任務應該是這樣:

  1. - name: "Create VLAN"
  2. include_role:
  3. name: otherthing
  4. tasks_from: vlan_create.yml
  5. vars:
  6. vlan_name: "lab-infra"
  7. vlan_tag: 100
  8. vlan_view_ref: "vlan_view/747f602d-0381"

不幸的是,除了通過 API,vlan_view_ref 標識符是不可用的,所以即使把它移到清單文件inventory或額外的變量中也沒有什么幫助。劇本playbook的用戶需要對系統有一些更深入的理解,才能找出正確的引用 ID。

在實驗室建設的情況下,我會經常重新部署這個記錄系統。因此,這個父對象引用 ID 每天都會發生變化,我不希望每次都要手動找出它。所以,我肯定要按名稱搜索該引用。沒問題:

  1. - name: Get Lab vlan view reference
  2.   include_role:
  3.     name: otherthing
  4.     tasks_from: search_for.yml
  5.   vars:
  6.     _resource: vlan_view
  7.     _query: "name={{ vlan_parent_view_name }}"

最終,它進行了一個 REST 調用。這將“返回” 一個 JSON,按照慣例,為了便于在角色外訪問,我把它填充進了 _otherthing_search_result 中,。search_for.yml 的實現是抽象的,它總是返回一個包含零或多個結果的字典。

正如我讀過的幾乎所有真實世界的 Ansible 代碼所證明的那樣,大多數 Ansible 開發者將會繼續前進,好像一切都很好,并且可以直接訪問預期的單個結果:

  1. - name: Remember our default vlan view ref
  2. set_fact:
  3. _thatthig_vlan_view_ref: "{{ _otherthing_search_result[0]._ref }}"
  4.  
  5. - name: "Create VLAN"
  6. include_role:
  7. name: otherthing
  8. tasks_from: vlan_create.yml
  9. vars:
  10. vlan_name: "lab-infra"
  11. vlan_tag: 100
  12. vlan_view_ref: "{{ vlan_parent_view_name }}"

但有時 _otherthing_search_result[0] 是未定義的,所以 _thatthig_vlan_view_ref 也將是未定義的。很有可能是因為代碼運行在不同的真實環境中,而有人忘記了在清單中或在命令行中更新 {{ vlan_parent_view_name }}。或者,無論公平與否,也許有人進入了工具的圖形用戶界面(GUI),刪除了記錄或更改了它的名稱什么的。

我知道你在想什么。

“好吧,不要這樣做。這是一個沒有啞巴的場所。不要那么笨。”

也許我對這種情況還算滿意,反駁道:“Ansible 會很正確的告訴你錯誤是:list 對象沒有元素 0,甚至會帶個行號。你還想怎樣?”作為開發者,我當然知道這句話的意思 —— 我剛寫的代碼。我剛從三天的和 API 斗智斗勇中走出來,我的腦子很清醒。

明天是另一個故事

但是到了明天,我可能會忘記什么是父對象引用,我肯定會忘記第 30 行上的內容。如果一個月后出了問題,就算你能找到我,我也得花一個下午的時間重新解讀 API 指南,才能搞清楚到底出了什么問題。

而如果我出門了呢?如果我把代碼交給了一個運維團隊,也許是一個實習生通過 Tower 來運行,把 vlan_view_name 手動輸入到表單之類的東西呢?那第 30 行出的問題是對他們沒有幫助的。

你說,加注釋吧! 嗯,是的。我可以在代碼中寫一些梗概,以幫助下周或下個月的開發人員。這對運行代碼的人沒有幫助,他的“工作”剛剛失敗,當然對于企業也無濟于事。

記住,我們此刻無所不能。在寫代碼或者跳過寫代碼的時候,我們是站在實力和知識的立場上進行的。我們花了幾個小時,甚至幾天的時間,研究了文檔、現實、其他 bug、其他問題,我們留下了代碼、注釋,甚至可能還有文檔。我們寫的代碼是分享成功的,而成功正是我們用戶想要的。但是在這種學習中也有很多失敗的地方,我們也可以留下這些。

在代碼中留言

“第 30 行有錯誤”對任何人都沒有幫助。至少,我可以用更好的錯誤信息來處理明顯的錯誤情況:

  1.   - name: Fail if zero vlan views returned
  2.      fail:
  3.        msg: "Got 0 results from searching for VLAN view {{ vlan_parent_view_name }}. Please verify exists in otherthing, and is accessible by the service account."
  4.      when: _otherthing_search_result | length == 0

在這四行代碼中(沒有額外的思考),我把具體的、有用的建議留給了下一個人 —— 那個無助的運維團隊成員,或者更有可能是一個月后的我 —— 這是關于現實世界中的問題,其實根本不是關于代碼的。這條消息可以讓任何人發現一個簡單的復制/粘貼錯誤,或者記錄系統發生了變化。不需要 Ansible 知識,不需要凌晨 3 點給開發人員發短信“看看第 30 行”。

但是等等!還有更多!

在了解 otherthing 的過程中,我了解到它在一個關鍵的方面,嗯,還挺笨的。它的許多記錄類型(如果不是全部的話)沒有唯一性約束,可能存在幾個相同的記錄。VLAN 視圖被定義為有一個名稱、一個開始 ID 和一個結束 ID;其他記錄類型也同樣簡單,顯然這應該是一個唯一的元組 —— 基于現實和數據庫規范化的抽象概念。但 otherthing 允許重復的元組,盡管在概念上講永遠不可能。

在我的實驗室里,我很樂意嘗試并記住不要這樣做。在企業生產環境中,我可能會寫一個策略。不管是哪種方式,經驗告訴我,系統會被破壞,會在倒霉的時候被破壞,而且可能需要很長時間才能讓這些問題發酵成,嗯,一個問題。

對于 “第 30 行有錯誤”,一個本來有豐富經驗的 Ansible 開發者可能會認識到這是“記錄沒有找到”,而不用知道其他的事情就足以解決這個問題。但如果 _otherthing_search_result[0] 只有有時是正確的 vlan_view_ref,那就糟糕多了,它讓整個世界被破壞,而悄無聲息。而這個錯誤可能完全表現在其他地方,也許六個月后的安全審計會將其標記為記錄保存不一致,如果有多種工具和人工訪問方式,可能需要幾天或幾周的時間才能發現這個特定代碼出錯的事實。

在幾天對 API 的摸索中,我學到了這一點。我不是在找問題,如果有記錄,我沒有看到。所以我來到了這篇文章的重點。我沒有因為它是一個實驗室,修復它,然后繼續前進而忽略了這種不可能的情況,而是花了兩分鐘留下了_代碼_ —— 不是注釋,不是心理筆記,不是文檔 —— 而是會一直運行的代碼,涵蓋了這種不可能的情況:

  1.   - name: Fail if > 1 views returned
  2.      fail:
  3.        msg: "Got {{ _otherthing_search_result | length }} results from searching for VLAN view {{ vlan_parent_view_name }}. Otherthing allows this, but is not handled by this code."
  4.      when: _otherthing_search_result | length > 1

我手動創建了失敗條件,所以我可以手動測試這個條件。我希望它永遠不會在實際使用中運行,但我覺得它會。

如果(當)這個錯誤發生在生產環境中,那么有人可以決定該怎么做。我希望他們能修復壞數據。如果它經常發生,我希望他們能追蹤到另一個損壞的系統。如果他們要求刪除這段代碼,而這段代碼做了未定義和錯誤的事情,那是他們的特權,也是我不想工作的地方。代碼是不完美的,但它是完整的。這是匠人的工作。

現實世界中的自動化是一個迭代的過程,它與不完美的系統進行斗爭,并平等地使用。它永遠不會處理所有的特殊情況。它甚至可能無法處理所有的正常情況。通過 Lint、代碼審查和驗收測試的工作代碼是處理安全和所需路徑的代碼。只要付出一點點努力,你就可以幫助下一個人,不僅僅是繪制安全路徑,還可以對你發現的危險留下警告。 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2021-06-29 08:00:00

Ansible開發工具

2021-03-02 06:32:03

Ansible系統運維

2023-06-26 08:06:39

重構代碼冗余

2019-11-15 15:50:41

JS代碼React前端

2019-06-26 08:37:23

Python數據處理編程語言

2021-08-25 15:32:47

腳本程序參數任務

2025-11-14 09:24:26

運維Ansible?自動化

2010-01-08 11:04:06

ASP.NET 4SEO

2011-05-06 09:25:56

海量代碼

2022-02-23 14:37:48

代碼Pythonbug

2015-10-28 17:35:35

自動化運維Ansible配置管理

2017-03-30 08:23:50

測試前端代碼

2021-12-25 15:00:50

LinuxMarkdown編輯器

2022-04-08 10:31:28

美團代碼建設

2019-06-28 12:34:34

Python情感分析NLP

2021-08-23 17:49:02

代碼開發模型

2020-02-19 15:02:23

代碼開發工具

2014-03-04 09:55:26

密碼用戶體驗

2024-01-10 17:24:00

2018-07-03 15:46:35

數據集訓練模型
點贊
收藏

51CTO技術棧公眾號

国产精品久久久久久久久免费樱桃| 日本黄色a视频| 日本丰满大乳奶| 国产成人无码一区二区三区在线 | 中文字幕日韩高清在线| 久久综合av免费| 久久久这里只有精品视频| 日本在线一区| 日本特黄一级片| 精品午夜视频| 亚洲欧洲精品一区二区精品久久久 | 欧洲av在线精品| 粉嫩av四季av绯色av第一区| 免费黄色片网站| 日产福利视频在线观看| 成人午夜电影网站| 欧美精品福利视频| 美女伦理水蜜桃4| 中文字幕有码在线视频| 欧美a大片欧美片| 亚洲精品视频在线看| 91p九色成人| 久久精品国产色蜜蜜麻豆| 国产一区二区三区久久精品| 女人扒开屁股爽桶30分钟| 亚洲男女视频在线观看| 欧美日本一区二区高清播放视频| 这里只有精品99re| 国产日韩欧美大片| 国产视频一区二区三区四区五区| 91精品国产乱码久久久久久久 | 国产精品色哟哟网站| 日本一区二区在线免费播放| 中文字幕av观看| www.九色在线| 91亚洲精品一区二区乱码| 国模视频一区二区| 久久中文免费视频| 国产丝袜一区| 色婷婷亚洲婷婷| 亚洲欧洲一区二区福利| 国产日本精品视频| 日本午夜一区二区| 久久久精品欧美| 日本少妇一级片| 阿v视频在线| 亚洲免费毛片网站| 99精品一级欧美片免费播放| 成人高清网站| 国产精品一区二区久激情瑜伽| 久久久久久69| 欧美黄片一区二区三区| 欧美一区二区三区红桃小说| 精品久久国产字幕高潮| 日韩精品一区二区三区色欲av| 国产www.大片在线| 国产99精品在线观看| 欧美在线激情网| 国产高清视频免费在线观看| 成人看片黄a免费看视频| 色婷婷综合久色| 99精品欧美一区| 国产精品www网站| 天天操夜夜操av| 欧美黄色录像片| 亚洲精品狠狠操| www.色欧美| 91白丝在线| 国产精品福利电影一区二区三区四区| 日本不卡久久| www.国产黄色| 久久亚洲影院| 久久99视频精品| 女人又爽又黄免费女仆| 精品一区二区三区中文字幕在线| 欧美日韩午夜精品| 18岁网站在线观看| 九色porny在线| 久久综合九色综合欧美就去吻| 精品一区二区视频| 精品人妻无码一区二区| 国产成人8x视频一区二区| 国产一区二区三区免费不卡| 一级特黄aaa大片| 亚洲免费综合| 色综合老司机第九色激情| 一级黄色毛毛片| 亚洲美女久久| 亚洲精品一区二区三区福利| 天天影视色综合| 97视频一区| 亚洲欧洲国产精品| 波多野结衣先锋影音| 亚洲性视频在线| 精品亚洲一区二区三区在线观看| www.美色吧.com| 亚洲成aⅴ人片久久青草影院| 伊人久久五月天| 国产精品揄拍100视频| 成人精品动漫一区二区三区| 亚洲人成电影网站色xx| 国产av 一区二区三区| 国产视频一区欧美| 7m第一福利500精品视频| 免费一级片视频| 天天综合永久入口| 欧美aa一级| 欧美午夜精品免费| 国产精品人人妻人人爽人人牛| wwww在线观看免费视频| 亚洲精品视频观看| 免费黄色福利视频| 美女100%一区| 色妹子一区二区| 国产精品亚洲二区在线观看| 日韩五码电影| 91麻豆精品国产91久久久| 国产又粗又长又爽| 亚洲香蕉av| 欧美大片在线看免费观看| 99久久久久久久久| 日韩黄色一级片| 国产精品视频在线观看| 亚洲天堂免费av| 久久成人综合网| 成人在线免费观看视视频| 亚洲一级特黄毛片| 91论坛在线播放| 奇米888一区二区三区| 综合图区亚洲| 911精品国产一区二区在线| 中文字幕在线观看的网站| 午夜激情一区| 97精品国产aⅴ7777| 国产一级淫片a视频免费观看| 国产老妇另类xxxxx| 亚洲视频精品一区| 中文字幕在线观看播放| 欧美久久久久久久久久| 97免费公开视频| 77成人影视| 久久国产精彩视频| 国产精品自拍视频一区| 国产精品一级片| 国产精品美女在线播放| 成人免费黄色| 最新日韩中文字幕| 久久久久久久久精| 欧美在线综合| 91精品视频免费看| 免费观看黄一级视频| 久久女同精品一区二区| 国产a级一级片| 亚洲激情播播| 国产ts一区二区| 色婷婷久久综合中文久久蜜桃av| 国产在线播放一区| 久久99蜜桃综合影院免费观看| 超碰在线国产| 欧美探花视频资源| 三级黄色免费观看| 国产在线播放一区| 欧美一级视频在线播放| 日产精品一区| 精品久久久久久久久久久久久久久久久| 青青草国产在线观看| 国产高清久久久久| 色一情一乱一伦一区二区三区| а√天堂在线官网| 色婷婷精品久久二区二区蜜臀av| 国产精品揄拍100视频| 日本一不卡视频| 天堂一区二区三区| 高清不卡一区| 亚洲一区二区福利| 91丨九色丨蝌蚪丨对白| 伊人夜夜躁av伊人久久| 男人的天堂日韩| 久久一本综合| 成人免费视频网站| 欧美91看片特黄aaaa| 精品噜噜噜噜久久久久久久久试看 | 最好看的2019年中文视频| 中文字幕人妻互换av久久| 成人av手机在线观看| 中文字幕一区二区三区最新| 电影网一区二区| 综合网日日天干夜夜久久| 中文字幕第15页| 成人自拍视频在线观看| 欧美在线观看成人| 99久久激情| 国产精品日韩专区| 九九热视频在线观看| 亚洲成av人片在线观看| 美女被爆操网站| 国产精品视频久久一区| 夜夜爽99久久国产综合精品女不卡 | 91手机在线视频| 久草中文在线| 日韩av网站电影| 亚洲精品午夜久久久久久久| 日本一区二区综合亚洲| 日韩a在线播放| 综合天堂av久久久久久久| 免费试看一区| 日韩中文影院| 欧美国产中文字幕| 888av在线| 欧美日韩国产片| 四虎国产成人精品免费一女五男| 日韩福利视频导航| 欧美久久在线观看| 91精品久久久久久久久久不卡| 久久久久久久久一区| 日本亚州欧洲精品不卡| 欧美激情在线播放| 在线视频91p| 精品亚洲一区二区三区在线观看 | 欧美美女黄色网| 欧美色图国产精品| 国产精品小说在线| 欧美gv在线观看| 国模精品系列视频| 午夜在线激情影院| 亚洲国产成人精品一区二区| 国产成人无码精品久在线观看| 亚洲品质自拍视频| 无码人妻精品一区二区三| 9色精品在线| 日本精品一区二区三区高清 久久 日本精品一区二区三区不卡无字幕 | 国内精品久久久久久中文字幕| 国产精品刘玥久久一区| 少妇高潮久久77777| 国产黄色片在线观看| 亚洲精品自拍第一页| 免费观看成人毛片| 亚洲影视在线播放| 97超碰在线免费观看| 波多野结衣中文一区| 成人一区二区三区仙踪林| 国产一区在线观看视频| www.桃色.com| 中文久久精品| 黄色国产一级视频| 欧美色网址大全| 天堂一区二区三区| 色综合五月天| 久久草.com| 日韩精选在线| 成人乱色短篇合集| 欧美综合影院| 91亚洲精品久久久| 亚洲视频一起| 极品尤物一区二区三区| 欧美一区二区三区久久| 欧美日韩最好看的视频| 精品国产亚洲一区二区三区| 91欧美精品成人综合在线观看| japansex久久高清精品| 欧美最猛性xxxxx(亚洲精品)| 国产在线看片免费视频在线观看| 91精品国产成人www| 午夜激情在线播放| 美乳少妇欧美精品| 污污在线观看| 91精品国产91久久久久久久久 | 狠狠v欧美ⅴ日韩v亚洲v大胸| 亚洲性av网站| 理论片午午伦夜理片在线播放| 亚洲福利视频久久| 日韩精品视频无播放器在线看| 欧美一区午夜精品| 成人h动漫精品一区二区下载 | 最近中文字幕免费mv| 欧美激情综合色综合啪啪| 久草免费福利在线| 久久亚洲美女| 久久久九九九热| 91免费精品国自产拍在线不卡 | 亚洲综合在线五月| 亚洲精品成人av久久| 最新日韩在线视频| 国产精品第9页| 欧美日韩精品一二三区| 日本高清视频在线| 中文字幕亚洲欧美日韩在线不卡| av在线影院| 日本欧美精品在线| 国产精品一区二区三区四区在线观看| 国产日韩欧美二区| 成人午夜av| 欧美日本视频在线观看| 久久99蜜桃精品| 国产麻豆天美果冻无码视频 | 国产一区二区三区四区五区3d| 欧洲美女免费图片一区| 免费成人高清在线视频| 国产伦精品一区二区三区视频免费| 警花av一区二区三区| 久久久精品有限公司| 色综合色综合| 茄子视频成人免费观看| 国产v综合v亚洲欧| 男女男精品视频网站| 性感美女久久精品| 国产视频aaa| 亚洲视频网站在线观看| 国产盗摄精品一区二区酒店| 国产精品一区二区三区久久久| 国产精品天天看天天狠| 欧美 另类 交| 日本不卡一区二区| 最近中文字幕无免费| 亚洲美女免费在线| 中文字幕一区二区人妻| 日韩久久精品电影| 波多野在线观看| 91在线观看免费高清| 欧美一区二区三区激情视频| 波多野结衣乳巨码无在线| 国产另类ts人妖一区二区| 国产wwwwxxxx| 亚洲综合免费观看高清完整版| 中文精品久久久久人妻不卡| 亚洲精品456在线播放狼人| 青青草原av在线| 97色伦亚洲国产| 麻豆国产一区二区三区四区| 亚洲永久激情精品| 奇米888四色在线精品| 自拍偷拍视频亚洲| 亚洲视频一区在线观看| 小泽玛利亚一区二区三区视频| 亚洲欧洲在线观看| 91av亚洲| 欧美日韩一区二区视频在线观看 | 久久人人97超碰精品888| 国产高清亚洲| 黑人巨大国产9丨视频| 精品一区二区在线看| www.xx日本| 欧美一区二区三区色| 国产精品刘玥久久一区| 91情侣在线视频| 激情欧美日韩| 韩国中文字幕av| 国产成人精品亚洲日本在线桃色| 在线看一区二区| 国产又大又粗又爽| 国产性猛交xxxx免费看久久| 日韩免费电影| 欧美一区观看| 奇米色777欧美一区二区| 国产三级在线观看完整版| 欧美亚一区二区| 欧美三级电影一区二区三区| 成人免费自拍视频| 欧美激情麻豆| 中文字幕乱码一区| 国产偷国产偷亚洲高清人白洁| 国产精品夜夜夜爽阿娇| 欧美性三三影院| 男人的天堂在线视频免费观看 | 日韩在线一区二区三区免费视频| 亚洲成人精品综合在线| 精品一区二区成人免费视频| 国产精品伊人色| 日韩av在线电影| 亚洲视频在线免费观看| 91麻豆精品| 日本福利视频一区| 美女视频一区在线观看| 麻豆tv在线观看| 欧美日韩国产在线播放| 亚洲一区二区乱码| 在线观看不卡一区| 国产二区三区在线| 国产视频99| 日韩成人一级片| 欧美精品久久久久性色| 亚洲欧美日韩在线高清直播| 日韩免费大片| 无码人妻丰满熟妇区96| 中文字幕一区二| 天天综合网在线| 成人av在线亚洲| 亚洲色诱最新| 国产尤物在线播放| 欧美日韩亚洲国产综合| 羞羞的网站在线观看| 欧美日本国产精品| 国产精品99久久久久久似苏梦涵| 亚洲久久在线观看| 久久这里只有精品99| 91精品网站在线观看| 大j8黑人w巨大888a片| 亚洲色图另类专区| 九一在线视频| 国产专区一区二区三区|