精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

在线播放蜜桃麻豆| 中文字幕免费视频观看| 97久久亚洲| 欧美视频免费在线| 色999日韩自偷自拍美女| 国产精品视频久久久久久| 国内精品久久久久久久影视蜜臀 | 在线观看国产欧美| 亚洲热在线视频| 日韩深夜视频| 亚洲图片你懂的| 国产一区免费在线| 中文字幕乱码人妻无码久久| 国产在线成人| 中文字幕9999| 三级视频网站在线观看| 久久久久伊人| 亚洲一区二区三区在线看| 日本欧美精品久久久| 亚洲第一天堂影院| 美国十次了思思久久精品导航| 欧美精品video| 青青青视频在线播放| 加勒比视频一区| 欧美日本高清视频在线观看| 国产免费黄色小视频| 在线观看的av| 久久综合色一综合色88| 99re在线国产| 一级片在线观看视频| 亚洲在线观看| 欧美精品福利在线| 成人免费视频国产免费观看| 精品久久国产| 日韩精品中文字幕视频在线| 91亚洲一区二区| 色综合天天色| 色综合一区二区三区| 女人帮男人橹视频播放| 国产网站在线免费观看| 国产精品日韩成人| 日韩高清av| 天天干天天爽天天操| 国产成人精品www牛牛影视| 国产日韩欧美在线播放| 18国产免费视频| 久久午夜精品| 久久婷婷色综合| 日韩欧美123| 欧美婷婷精品激情| 亚洲va中文在线播放免费| 亚洲一卡二卡三卡四卡五卡| 黄色a级在线观看| av天在线观看| 欧美激情自拍偷拍| 日本中文不卡| 国产精品四虎| 中文字幕欧美日本乱码一线二线 | 91精品中文字幕| 免费看欧美美女黄的网站| 国产成人精品av在线| 中文字幕黄色片| 久久久久久久尹人综合网亚洲| 欧美一区二区色| 欧美一区二区三区四| 欧美亚洲免费| 国产成人精品免费久久久久 | 欧美日韩国产精品一区二区三区四区 | 亚洲男人天堂古典| 永久免费看mv网站入口78| 夜色77av精品影院| 亚洲性生活视频| 亚洲一级黄色录像| 久久伦理在线| 乱亲女秽乱长久久久| 99热在线观看精品| 综合激情在线| 午夜欧美大片免费观看| 日韩经典在线观看| 欧美一级播放| 国产精品午夜一区二区欲梦| 国产又大又黄的视频| 国产精品亚洲午夜一区二区三区 | 亚洲宅男一区| 亚洲最新在线视频| 麻豆明星ai换脸视频| 欧美色一级片| 秋霞av国产精品一区| 日韩美女免费视频| 老牛影视av老牛影视av| 日本欧美肥老太交大片| 久久久精品国产网站| 久久久久久久黄色| 国产一区导航| 国产日本欧美一区二区三区在线| 99热在线只有精品| 99re在线精品| 自拍偷拍视频在线| gogo久久| 欧洲精品一区二区| 亚洲精品成人无码毛片| 宅男在线一区| 久久亚洲私人国产精品va| 日本午夜小视频| 日韩av电影天堂| 亚洲综合中文字幕在线观看| 手机看片福利在线观看| 综合色天天鬼久久鬼色| 成年人视频观看| 99综合99| 亚洲视频精品在线| 久久精品这里有| 蜜桃视频一区二区| 国产欧美精品一区二区三区| 性开放的欧美大片| 亚洲成av人片www| 中日韩av在线播放| 亚洲国产网址| 欧美日韩福利在线观看| 国产美女www爽爽爽| 成人污视频在线观看| 伊人av成人| 伊人久久在线| 欧美xfplay| 三级黄色录像视频| 久久亚洲国产精品一区二区| 99久久99久久精品国产片| av在线天堂播放| 五月天欧美精品| 操人视频免费看| 日韩欧美视频专区| 国产精品91视频| 欧美一级视频免费| 伊人婷婷欧美激情| 国产乱女淫av麻豆国产| 精品成av人一区二区三区| 久久人人爽人人| av高清一区二区| 欧美国产激情二区三区| 欧美精品一区二区三区免费播放| 日韩aaaaa| 国产专区精品| 日韩中文字幕av| 亚洲成熟少妇视频在线观看| 91在线丨porny丨国产| 97免费视频观看| 欧美黄视频在线观看| 久久激情视频免费观看| 国产成人精品一区二区色戒| 国产亚洲精品资源在线26u| 欧美在线观看成人| 噜噜噜天天躁狠狠躁夜夜精品| 欧美国产日本高清在线| 国产视频第二页| 亚洲视频一区二区在线观看| 久久久精品高清| 99久久久久国产精品| 成人免费高清完整版在线观看| 中文字幕日本在线观看| 欧美三级三级三级爽爽爽| 中文字幕在线观看免费高清| 日日摸夜夜添夜夜添亚洲女人| 久热这里只精品99re8久| 亚洲天堂免费电影| 亚洲免费av网址| 日本视频在线观看免费| 久久人人爽人人爽| 一区二区三区国产免费| 日韩在线观看一区 | 天堂av中文在线观看| 日韩成人av网址| aaa人片在线| 国产网站一区二区三区| 色噜噜狠狠一区二区| 香蕉国产精品| 不卡日韩av| 久久男人av资源站| 亚洲人成在线电影| 亚洲天堂手机版| 天天做天天爱综合| 色网综合在线观看| 四虎永久免费在线观看| 免费精品视频在线| 成人毛片100部免费看| youjizzjizz亚洲| 91精品国产自产91精品| 国产youjizz在线| 欧美日韩电影一区| 国产一级二级毛片| 国产日韩欧美精品电影三级在线| 亚洲最大综合网| 欧美国产日本| 蜜桃成人在线| 亚洲欧美专区| 久久久人成影片一区二区三区| 少妇性bbb搡bbb爽爽爽欧美| 精品1区2区3区| 美女毛片在线观看| 久久久久99精品一区| 91pony九色| 国产日韩欧美在线播放不卡| 亚洲v欧美v另类v综合v日韩v| 欧美黄色一级| 国产97在线视频| 羞羞电影在线观看www| 亚洲裸体xxxx| 国产av精国产传媒| 欧美性xxxx极品hd满灌| 伊人在线视频观看| 2019国产精品| 日本女人黄色片| 日韩一区欧美二区| 久艹在线免费观看| 国产精品毛片久久| 蜜桃网站成人| 风间由美中文字幕在线看视频国产欧美| 国产精品99久久久久久人| 欧美另类tv| 中日韩美女免费视频网站在线观看| 亚洲伦理在线观看| 欧美日韩国产高清一区| 日韩特级黄色片| 亚洲精品国产一区二区三区四区在线 | 美国一级片在线观看| 96av麻豆蜜桃一区二区| 亚洲欧美日韩一二三区| 日韩二区在线观看| 鲁一鲁一鲁一鲁一色| 欧美激情成人在线| 亚洲精品中文综合第一页| 丝袜连裤袜欧美激情日韩| 91麻豆精品秘密入口| 国产69精品久久久久按摩| 青青草原成人在线视频| 免费毛片在线看片免费丝瓜视频 | 欧洲视频在线免费观看| 精品日韩一区二区| 国产成人av免费看| 在线播放亚洲一区| 中文字幕久久久久| 国产专区欧美精品| 尤物tv国产一区| 欧美天堂在线视频| 精品奇米国产一区二区三区| 国产在成人精品线拍偷自揄拍| 色哟哟在线观看一区二区三区| 日韩久久精品视频| 精品成人乱色一区二区| 成人免费看片98| 亚洲午夜激情av| 免费在线一级片| 一区二区三区在线不卡| 国产激情无码一区二区三区| 国产精品第一页第二页第三页| av网在线播放| 国产农村妇女毛片精品久久麻豆| 亚洲男人在线天堂| 91老师国产黑色丝袜在线| 在线视频 日韩| 91视视频在线观看入口直接观看www| 逼特逼视频在线观看| 粉嫩av一区二区三区粉嫩| 一二三区视频在线观看| 成人国产亚洲欧美成人综合网| 亚洲免费观看在线| aaa亚洲精品| 女尊高h男高潮呻吟| 国产日产精品一区| 日韩av毛片在线观看| 亚洲日本一区二区| 久久精品久久精品久久| 亚洲成人久久影院| 69成人免费视频| 欧洲中文字幕精品| 91国产免费视频| 日韩欧美一级片| 五月天婷婷视频| 亚洲深夜福利在线| www视频在线看| 久久久久久久久久婷婷| 极品蜜桃臀肥臀-x88av| 毛片基地黄久久久久久天堂| 在线观看免费的av| 成人免费的视频| 免费看黄色的视频| 亚洲三级免费观看| 国产精品suv一区二区69| 欧美日韩中文字幕综合视频| 亚洲男人天堂网址| 欧美一级xxx| 色综合888| 日韩在线观看免费网站| 肉体视频在线| 国产精品久久久久7777婷婷| 成人97精品毛片免费看| 国产乱子伦精品| 国产欧美日韩精品一区二区三区| 国产精品亚洲天堂| 一区二区日本视频| 一起操在线视频| 99精品视频一区二区三区| 成人精品一二三区| 精品久久中文字幕久久av| 亚洲天堂久久久久| 日韩黄色av网站| 成人高清免费在线| 日本成人免费在线| 天堂va在线高清一区| 欧洲在线视频一区| 欧美在线黄色| 嫩草av久久伊人妇女超级a| 国产91在线观看| 亚洲一区二区自偷自拍| 亚洲午夜久久久久中文字幕久| 亚洲第一区av| 亚洲国内精品视频| 在线播放免费av| 国产精品欧美激情在线播放| 久久资源综合| wwwwww欧美| 麻豆国产精品官网| wwwwxxxx国产| 亚洲成人精品影院| 91精品免费视频| 综合欧美亚洲| 最新国产精品久久| 日韩成人一区二区| 风间由美一二三区av片| 一区二区三区中文免费| 一级黄色片在线| 亚洲网站在线观看| 日本а中文在线天堂| 国产成人免费观看| 欧美在线亚洲| 在线免费黄色小视频| 中文字幕在线不卡一区二区三区| 亚洲GV成人无码久久精品 | 97国产suv精品一区二区62| 欧美精选视频一区二区| 免费成人深夜夜行视频| 亚洲青色在线| 男女性杂交内射妇女bbwxz| 又紧又大又爽精品一区二区| 91麻豆成人精品国产免费网站| 在线观看日韩视频| 精品肉辣文txt下载| 三区精品视频观看| 热久久久久久久| 国产主播av在线| 欧美三区免费完整视频在线观看| 国产视频网站在线| 国产极品jizzhd欧美| 国产亚洲一区| 黑人粗进入欧美aaaaa| 国产性色一区二区| 成人黄色三级视频| 日韩中文字幕在线观看| 日本免费一区二区三区等视频| 亚洲欧美日韩在线综合| 六月丁香婷婷色狠狠久久| 中国特黄一级片| 欧美精品自拍偷拍动漫精品| 欧美69xxx| 91精品久久久久久久久久另类 | 欧美激情图片小说| 日韩亚洲欧美在线观看| 97在线视频免费观看完整版| 欧美日韩免费不卡视频一区二区三区| 中文无码精品一区二区三区| 中文字幕无线精品亚洲乱码一区 | 精品乱子伦一区二区| 色综合视频网站| 日本成人7777| 天堂社区在线视频| 中文字幕一区不卡| 亚洲欧美另类综合| 日本一区二区在线免费播放| 精品美女在线视频| 91精品国产三级| 欧美日韩黄色大片| 在线免费av网站| av免费精品一区二区三区| 亚洲精品美女| 99久久久无码国产精品衣服| 69堂精品视频| 91福利区在线观看| 亚洲免费久久| 福利一区福利二区| 日本丰满少妇做爰爽爽| 久久精品精品电影网| 久久男人av| 亚洲免费999| 亚洲第一久久影院| 电影av一区| 国产精品一区二区av| 免费成人小视频| 久一视频在线观看| 色999日韩欧美国产| 欧美18xxxx| 国产探花在线观看视频|