なぜ自動化?ネットワークオペレーティングシステムのための可用性のある脚本と望ましい状態
9769 ワード
ホイールを再発明しないでください
あなた自身のコードを書くことは必ずしも答えではない
多くの場合、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
ここで何をしたか説明しましょう.典型的なものは少ない.ここで説明しようとします.可用性のhttps://docs.ansible.com/ansible/latest/user_guide/intro_inventory.htmlにつき
ansible_network_os
:多かれ少なかれ正確に言うこと.Voys用の組み込み可能なインタプリタがありますが、これは実際にはネットワークディストリビューションの一握りでのみ本当です.あなたは
から多くを得ることができますが、広範なテストを適用する必要があります.ansible_connection
:これは基本的にCLIの「ドライバ」です.あなたは同様にparamikoやsshを使用することができます.これは主にネットワークOSによって管理されます.ansible_user
は、ターゲットホストに対してどんなユーザ名を試みるかを制御ノードに指示します.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キーのデザイン値の一部をカバーする必要があります.
日0、システムオンラインを取得
この例では、4つのデバイスにいくつかのレベルの使用可能な設定があります.また、手動でエラーを起こしやすい編集をする必要はありません.私たちは、神社の展開をサポートするために再ツール化することによって、私の をこの目的のために適合させるつもりです.高レベルの神社脚本
我々はこの例をかなり短くします-それはリンクされたリポジトリで利用可能です、しかし、我々は将来の変化のために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です.これは移動プロジェクトであり、将来の投稿で更新プログラムを取得します.Reference
この問題について(なぜ自動化?ネットワークオペレーティングシステムのための可用性のある脚本と望ましい状態), 我々は、より多くの情報をここで見つけました https://dev.to/ngschmidt/why-automate-ansible-playbooks-and-desired-state-for-network-operating-systems-72cテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol