- 私もアンシブルが大好き
- Linuxを管理するにはAnsibleが必要です
- Linuxの役割を個別にテストするためにGitHubに別のリポジトリを作成したくないのは、エンティティを作成したくないためです(Occamのかみそりがすべてです)
猫の下で、誰が次に何が起こったか気にしてください。
短い議論の後、私は彼のツールを両方の環境に適応させることに同意しました。ツールのエンドユーザー(エンジニアまたは開発者)は、そのすべてのコンポーネントまたは一部のみを使用できるようになります。 しかし、最初に、現在何が機能しているかの簡単な説明。
そして今、標準のAnsibleロールがあります。別のディレクトリにキッチンがあり、WinServerの構成をテストし、実際にはキッチン自体を構成するPesterテストがあります。 .kitchenファイルには、Vagrantボックス(Ansible + Winserver)の2つの構成、展開スクリプト、およびテストパスがあります。 誰が気にしている、ソースはここにあります 。
キッチンディレクトリ内の4チームについては、最初から最後までテストに合格します。
- kitchen create-ローカル仮想インフラストラクチャを作成します
- キッチン収束-アンシブルロールを適用
- kitchen verifiy-検証ツールからテストスイートを適用する
- キッチン破壊-それ自体をクリーンアップします。
初回は信じられないほど長くなります(Windowsのボックスは非常に重いため)。
私が言及し忘れた重要な点:この構成は、開発者がロールを開発およびテストする方法を理解するために学ぶことができるロールのスケルトンです。 開発者が両方のエコシステムで機能する1つの役割を開発する場合を想像することはできません。
それでも、企業のGitHubはゴムではないため、少し節約する必要があります。
まず、プレイブックの役割を両方のオペレーティングシステムに共通するように構成します。 ここではAnsibleの些細な事実が役立ちます。
--- # This play installs IIS, if you run it on windows box - name: install web-server feature win_feature: name: Web-Server state: present when: ansible_os_family == "Windows" - name: deploy iis start page template template: src: iisstart.j2 dest: C:\inetpub\wwwroot\iisstart.htm when: ansible_os_family == "Windows" # This play installs Nginx, if you run it on linux box - name: install nginx yum: name=nginx state=latest when: ansible_os_family == "RedHat" - name: start nginx service: name=nginx state=started enabled=True when: ansible_os_family == "RedHat"
ご覧のとおり、最初の場合はWindowsにIISの役割をインストールし、2番目の場合はNginxをインストールして実行します。
次にテストを行います。 キッチン/テスト/統合/デフォルト(デフォルトはテストスイートの名前)にserverspecという新しいディレクトリを作成します。 その中には、defailt_spec.rbファイルが1つしかありません
私はルビーにあまり強くないので、仕様ヘルパーなしで汚れました
require 'rubygems' require 'bundler/setup' require 'serverspec' require 'pathname' require 'net/ssh' RSpec.configure do |config| set :host, ENV['KITCHEN_HOSTNAME'] # ssh options at http://net-ssh.github.io/net-ssh/Net/SSH.html#method-c-start # ssh via ssh key (only) set :ssh_options, :user => ENV['KITCHEN_USERNAME'], :port => ENV['KITCHEN_PORT'], :auth_methods => [ 'publickey' ], :keys => [ ENV['KITCHEN_SSH_KEY'] ], :keys_only => true, :paranoid => false, :verbose => :error set :backend, :ssh set :request_pty, true end describe package('nginx'), :if => os[:family] == 'redhat' do it { should be_installed } end describe service('nginx'), :if => os[:family] == 'redhat' do it { should be_enabled } it { should be_running } end describe port(80) do it { should be_listening } end
ここでは、3つのチェックのみがあります。パッケージがインストールされ、サービスが自動開始と、誰かがリッスンしているポート80の両方で起動されます。
私のようにRubyの方法がわからない人へのちょっとしたアドバイス- ドキュメントによれば、serverspec-initは上記の例のようにデフォルトのテストを生成します。
だから、役割は、テストがあります。 ここで、キッチン自体を構成する必要があります。 同僚は2台のマシンを持ち上げざるを得ません。これは、小さなansibleサーバーをWindowsにインストールするよりも簡単に展開できるためです。 私の場合、キッチン自体がansibleロールをインストールするため、1台のマシンで十分です。 私のキッチンスクリプトは小さくなります。
--- driver: name: vagrant gui: true linked_clone: true platforms: - name: centos_box driver_plugin: vagrant driver_config: box: centos/7 network: - [ 'private_network', { ip: '172.28.128.13' } ] transport: max_ssh_sessions: 1 provisioner: name: ansible_playbook roles_path: ../ role_name: kitchen_test_role ansible_inventory: inventory/hosts require_windows_support: true require_chef_for_busser: false ansible_host_key_checking: false ansible_verbose: true ansible_verbosity: 4 playbook: default_linux.yml verifier: name: serverspec remote_exec: false suites: - name: default verifier: patterns: - tests/integration/default/serverspec/default_spec.rb
別のansible_playbookがあります。これは、ロールがインベントリファイル内のLinuxマシンに対してのみ実行されるためです。
一般に、開発は終了しました。 使用する構成をキッチンに説明するのは非常に簡単です。 kitchenコマンドを実行する前に、環境変数KITCHEN_YAML = "our_ configuration_name"を渡す必要があります。
例:
KITCHEN_YAML=".kitchen_linux.yml" kitchen create/converge/verify/destroy.
ご清聴ありがとうございました。