なぜ自動化?ネットワークオペレーティングシステムのための可用性のある脚本と望ましい状態



ホイールを再発明しないでください

あなた自身のコードを書くことは必ずしも答えではない
多くの場合、Pythonのようなコミュニティは、個々に作成することよりも、かなり高い品質のコードを提供します.
これはいい.ほとんどすべてのケースで、羊毛の伝統主義のプログラマーに染められて、選択の彼らの言語で「図書館」を消費します-それは、開発者が彼らが使うすべてをつくるアウトサイダー視点です.
現代の工学では、真のエンジニアや建築家はしばしば自分の解決策を作成しようとするのではなく、現実世界の状況に大学で勉強を適用します.これはcreativityを割引しません、また、それはより実用的に指向される人々を割引しません.創造性がなければ、我々はエンジニアリングプラクティスを改善する方法がなく、プラグマティズムなしで、我々は人生のいくつかのかなり深刻な損失を見てきた
https://interestingengineering.com/23-engineering-disasters-of-all-time
...でも君はまだやるべき仕事がたくさんある
エンジニアリング慣行、インターネットからコードを適応させて、実践の問題としてのGogled Cisco例トポロジーは、仕事をします.スタックオーバーフローからすべてのコードを信頼しますか?シスコ回答.ネット(本当のウェブサイトではない)?
あなたはすべきではありません、そして、現代のエンジニアリング慣行はどちらもそうしません.ほぼすべてのケースでは、問題へのエンジニアリングプラクティスを適用する能力は、同様のアプリケーションで理想的に、個々の練習のための歴史として、過去の例(失敗と成功)の年間の訓練、数千年が付属しています.この例の良い例は、材料の硬さを操作(最大化)は、もはや自動勝利ではなく、深刻な安全性リスクの詳細です.
私たちは抽象化と純粋な数学のより単純な世界に住んでいます.我々は、コンピュータソリューション(ネットワーク、システム、ドントケア)のデザイナーと実装者として、より規律いとこから学ぶことができます.私は後でこれについて書きます、しかし、今のところ、批判的にあらゆる行動をチェックするだけで、少なくとも同意しましょう.

脚本自動化
ここで技術管理を評価する技術者のレンズを使いましょう.それがおそらく最も簡単であるので、不可解はここの私の例であるつもりです.
brittle fractures
サポートファイル
スタンドアロン、自立型の脚本を実行することが可能ですが、それは一般的にスケールで推奨されていません.このオートメーションを活用するための第一歩は在庫を定義することです.いつものように、これは通常YAMLにあるので、ほとんどの努力は実際の仕事とは対照的にあなたのデータを構造化することになります.
推奨事項:
  • は、生産、ラボなどの間に衝突することはありません.我々は誰の生産ネットワークで シナリオを持ってしたくない.
  • それが意味をなすことを確認してください.これはかなり簡単に/下に整理する;あなたが働くかもしれない最小の元素単位について考えてください.
  • レバレッジソースコントロール!コピーを保存し、リビジョン履歴を保存します.さらに良い、ピアレビューを取得します.
  • 覚えて、これは後で編集することができます!これは絶えず改善しなければなりません.
  • 例( 年に基づいている)
    私は、プロジェクト(仮想化CLOSトポロジー)を接頭辞として使っていて、そこからデバイスタイプを組織化しています.棘はVLANを必要としません、そして、ルート・リフレクターであるでしょう.
    Wargames
    在庫
    vyos_vclos_leafs: hosts: vclos_l0.engyak.net: ansible_host: "1.1.1.1" vclos_l1.engyak.net: ansible_host: "1.1.1.2" vars: ansible_network_os: vyos.vyos.vyos ansible_user: vyos ansible_connection: ansible.netcommon.network_clivyos_vclos_spines: hosts: vclos_s0.engyak.net: ansible_host: "1.1.1.3" vclos_s1.engyak.net: ansible_host: "1.1.1.4" vars: ansible_network_os: vyos.vyos.vyos ansible_user: vyos ansible_connection: ansible.netcommon.network_cli
    
    ここで何をしたか説明しましょう.典型的なものは少ない.ここで説明しようとします.
  • YAML目録:これはちょうど私です、私はLinuxの人としてini形式の上でそれを好みます.また、私はネットワークガイとして好きな構造化された階層で、多くのことができます.
  • 変数宣言:
    可用性のhttps://docs.ansible.com/ansible/latest/user_guide/intro_inventory.htmlにつき
  • 、我々はネットワークオートメーションに特有のいくつかのものがあるということを知っています-すなわち、オンボードPythonの不足.これは、実行可能な制御ノード(脚本を実行する1つ)は、それが計画/思考のすべてをやっていることを知る必要があることを意味します.このためには、いくつかのユニークな(再利用可能な)宣言
  • を作成する必要があります
  • ansible_network_os :多かれ少なかれ正確に言うこと.Voys用の組み込み可能なインタプリタがありますが、これは実際にはネットワークディストリビューションの一握りでのみ本当です.あなたは から多くを得ることができますが、広範なテストを適用する必要があります.
  • ansible_connection :これは基本的にCLIの「ドライバ」です.あなたは同様にparamikoやsshを使用することができます.これは主にネットワークOSによって管理されます.
  • ansible_userは、ターゲットホストに対してどんなユーザ名を試みるかを制御ノードに指示します.
  • この他にも、すべてのVYSノードにSSHキー認証を設定しました.それはかなり簡単です:(documentation on networking)
    set system login user vyos authentication public-keys key1 key blahblahblahset system login user vyos authentication public-keys key1 type ssh-rsa
    
    Ansible Galaxy
    脚本
    https://wiki.vyos.net/wiki/Remote_access

    プレイブックを設計する前に、Ansibleキーのデザイン値の一部をカバーする必要があります.
  • iDemsioncy :一度実行すると、毎回同じ結果を得る.変更が既になされていて、侵略的であるならば、州が合わないならば、それを繰り返さないでください.
  • 抽象化の薄いベール:技術的な観点から実装されているものを意識するべきであるが、その最後の局面を制御する必要はない.
  • 宣言します:あなたが実装したい抽象的な概念からデザインして、必要に応じて技術的な詳細に記入してください.

  • 日0、システムオンラインを取得
    この例では、4つのデバイスにいくつかのレベルの使用可能な設定があります.また、手動でエラーを起こしやすい編集をする必要はありません.私たちは、神社の展開をサポートするために再ツール化することによって、私の をこの目的のために適合させるつもりです.高レベルの神社脚本
  • Load変数:これは別のファイルになります.
  • テンプレートを読み込み、変数を翻訳します.
    我々はこの例をかなり短くします-それはリンクされたリポジトリで利用可能です、しかし、我々は将来の変化のためにidemotencyを活用したいです.他の方法によって適用されるベース構成を作成するので、それはインベントリを活用しません.
    楽しい事実-これはコード実装としてどんなインフラストラクチャの最初のステージです.作成された終了結果(template)を直接適用することができます.
    変数
    --------global: hostname: 'vyos-router.engyak.net' domain: 'engyak.net' timezone: 'US/Alaska'
    
    実行(脚本)
    --------- hosts: localhost tasks: - name: Import Vars... include_vars: file: vyos-base.yml - name: Combine vyos... template: src: templates/vyos-base.j2 dest: vyos-compiled.conf
    

    日2、ルーチンの変更を適用する
    この例では、すでに配備を開始し、実行して実行しています.私たちは作るためのルーチンの変更のいくつかの形式を持っていますが、我々は一貫して適用されるようにし、先例のないようにしたい.これは、構成変更の脚本は、このメソッドを使用して理想的な世界の特定の変更について何も含まれてはいけないことを意味します.
    - hosts: vclos_l0.engyak.net tasks: - name: Apply on L0! vyos.vyos.vyos_config: src: 'vyos-l0-compiled.conf' save: yes- hosts: vclos_l1.engyak.net tasks: - name: Apply on L1! vyos.vyos.vyos_config: src: 'vyos-l1-compiled.conf' save: yes- hosts: vclos_s0.engyak.net tasks: - name: Apply on S0! vyos.vyos.vyos_config: src: 'vyos-s0-compiled.conf' save: yes- hosts: vclos_s1.engyak.net tasks: - name: Apply on S1! vyos.vyos.vyos_config: src: 'vyos-s1-compiled.conf' save: yes
    
    再実行されるならば、これは繰り返し再構築されるベース構成と神社熟成を通して段階的にされるどんな変更でも適用します.
    注意:この特定のネットワークドライバは無効です.生産ネットワークでは、ナパーム/Nornirのような何かがより適切かもしれません.メソッドを繰り返し実行することによって、idemabilitiesを確認することができますPlayBook -期待される結果は*-compiled.confです.
    18:55:40 PLAY [vclos_l0.engyak.net] *****************************************************18:55:40 18:55:40 TASK [Gathering Facts]*********************************************************18:55:41 [WARNING]: Ignoring timeout(20) for vyos.vyos.vyos_facts18:55:44 ok: [vclos_l0.engyak.net]18:55:44 18:55:44 TASK [Apply on L0!] ************************************************************18:55:49 changed: [vclos_l0.engyak.net]18:55:49 18:55:49 PLAY [vclos_l1.engyak.net]*****************************************************18:55:49 18:55:49 TASK [Gathering Facts] *********************************************************18:55:49 [WARNING]: Ignoring timeout(20) for vyos.vyos.vyos_facts18:55:53 ok: [vclos_l1.engyak.net]18:55:53 18:55:53 TASK [Apply on L1!]************************************************************18:55:57 changed: [vclos_l1.engyak.net]18:55:57 18:55:57 PLAY [vclos_s0.engyak.net] *****************************************************18:55:57 18:55:57 TASK [Gathering Facts]*********************************************************18:55:58 [WARNING]: Ignoring timeout(20) for vyos.vyos.vyos_facts18:56:02 ok: [vclos_s0.engyak.net]18:56:02 18:56:02 TASK [Apply on S0!] ************************************************************18:56:06 changed: [vclos_s0.engyak.net]18:56:06 18:56:06 PLAY [vclos_s1.engyak.net]*****************************************************18:56:06 18:56:06 TASK [Gathering Facts] *********************************************************18:56:06 [WARNING]: Ignoring timeout(20) for vyos.vyos.vyos_facts18:56:10 ok: [vclos_s1.engyak.net]18:56:10 18:56:10 TASK [Apply on S1!]************************************************************18:56:14 changed: [vclos_s1.engyak.net]18:56:14 18:56:14 PLAY RECAP ********************************************************************* 18:56:14 localhost : ok=12 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 18:56:14 vclos_l0.engyak.net : ok=4 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 18:56:14 vclos_l1.engyak.net : ok=4 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 18:56:14 vclos_s0.engyak.net : ok=4 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 18:56:14 vclos_s1.engyak.net : ok=4 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
    
    次のステップは重要です-自動的に構成変更に基づいてネットワークを更新!いつものように、これを実行するための私のソースコードはbase configurationです.これは移動プロジェクトであり、将来の投稿で更新プログラムを取得します.