GNU/Linux >> Linux の 問題 >  >> Linux

Vagrantでファイルとシェルプロビジョナーを操作する方法

プロビジョナー 仮想マシンを起動するときにワークフローを自動化できるツールです。 Vagrant ファイル、シェル、ansible、puppet、saltstackなどのプロビジョナーをサポートします。これらのツールのいずれかを使用して、仮想マシンの展開ワークフローを自動化できます。

[あなたも好きかもしれません:VagrantとVirtualBox入門]

この記事では、新しい仮想マシンをデプロイするときに定期的に使用できる2つのプロビジョナーのファイルとシェルについて説明します。

Vagrantでシェルプロビジョナーを使用する方法

シェル プロビジョナーを使用すると、シェルを実行できます Vagrantマシンのコマンド。 シェルを使用するには プロビジョナーvm.provisionへの引数としてシェルを渡す必要があります メソッド。

config.vm.provision "shell"

シェルを実行する方法は2つあります vagrantのコマンド。

  1. インラインスクリプト
  2. 外部スクリプト

Vagrantでインラインスクリプトを操作する方法

インライン スクリプト、シェルを渡します Vagrantfile内のコマンド 。インラインスクリプトを使用する方法はたくさんあります。次の例は、インラインスクリプトの使用方法を示しています。シェルプロビジョナーを定義した後、インラインとコマンドをキーと値のペアとして渡す必要があります。先に進み、Vagrantfileを変更して、上記の行を追加します。

config.vm.provision "shell", inline: "echo Welcome to linuxshelltips"

プロビジョナーを実行する前 注意すべき重要な点があります。プロビジョナーは通常、「 vagrant up」を実行した場合にのみ実行されます 」が初めて。

以下の画像を見てください。Vagrantfileにシェルプロビジョナーを追加して仮想マシンを起動すると、--provisionを使用するように指示されます。 このVMを起動するのはこれが初めてではないため、フラグを立てます。

$ vagrant up --provision           # Starting the VM
$ vagrant reload --provision       # Restarting the VM

ブロックを使用することもできます より読みやすい構文。これは、前の1行の定義と同じです。

config.vm.provision "shell" do |cmd|
    cmd.inline = "echo Welcome to Linuxshelltips"
end

bashを使用したことがある場合は、ヒアドキュメントを使用した可能性があります。 。そのルビーに似ています また、vagrantファイルで使用して一連のbashコマンドをリダイレクトできるヒアドキュメントもサポートしています。ここでepel-repositoryをインストールしようとしています wgetをインストールします コマンド。

$COMMANDS = <<-'BLOCK'
yum install epel-release -y 
yum install wget -y
BLOCK
        
config.vm.provision "shell", inline: $COMMANDS

上記のコードが何をするのか説明させてください。 $COMMANDSという変数を作成しています ヒアドキュメントを保存します 変数内。 $COMMANDSを渡します 一連のyumを実行するインラインの値としての変数 コードブロック内で渡したコマンド。

上のスクリーンショットから、両方の epel-repoを見ることができます。 およびwget 正常にインストールされます。また、vagrantマシンですでに利用可能なスクリプトを呼び出すこともできます。 welcome.shという名前のテストスクリプトがあります vagrant hostで実行するには、構成ファイルに次の構文を追加します。

config.vm.provision "shell",
    inline: "/usr/bin/bash /home/vagrant/welcome.sh"

仮想マシンを起動/再起動するたびにプロビジョナーを実行する場合は、ブロックスタイル定義を使用して、「常に」を渡すことができます。 」から「実行 」。 Runは、「常に」という2つの値を受け入れます 」と「決して 」。 「決して」に設定されている場合 」プロビジョナーは実行されません。

Vagrant.configure("2") do |config|
  config.vm.provision "shell", inline: "/usr/bin/bash ~/welcome.sh",
    run: "always"
end

--no-provisionを渡すこともできます start / restartコマンドでフラグを立てて、実行パラメーターの動作を抑制します。

$ vagrant up --no-provision
$ vagrant reload --no-provision

Vagrantで外部スクリプトを操作する方法

インラインスクリプトの代替オプションは、外部スクリプトです。これは非常に簡単です。外部でシェルスクリプトを作成し、以下のようにシェルプロビジョナーでスクリプトのパスを指定します。

config.vm.provision "shell", path: "/home/karthick/welcome.sh"

Vagrantはスクリプトを/tmp /にコピーします 仮想マシン内の場所であり、スクリプトをトリガーします。

Vagrantでファイルプロビジョナーを使用する方法

ファイルプロビジョナーを使用すると、ファイルをホストマシンからvagrantマシンにディレクトリとしてアップロードできます。ファイルプロビジョナは、2つのパラメータソースパスと宛先パスを受け入れます。

ファイルをコピーするには、ソースパスと宛先パスを使用してVagrantfileに次のプロパティを追加します。場所に応じて送信元パスと宛先パスを置き換えます。

config.vm.provision "file", source: "/home/karthick/vagrant/centos7/script.sh" , destination: "~/script.sh"

仮想マシンを起動/再起動すると、ログファイルに表示されるプロビジョナーが呼び出され、ファイルが仮想マシンにコピーされます。

ディレクトリをコピーするには、ソースと宛先のディレクトリパスを渡す必要があります。ディレクトリにソースと同じ名前が必要な場合は、同じ宛先名を指定する必要があります。

config.vm.provision "file", source: "/home/karthick/vagrant/centos7" , destination: "~/centos7"

次の記事では、Playbookを使用してワークフローを自動化するためのAnsibleプロビジョナーの方法を見ていきます。


Linux
  1. .bashrcの目的とそれはどのように機能しますか?

  2. シェルスクリプトで一時ファイルを作成するにはどうすればよいですか?

  3. Btrfs ファイル システムを作成してマウントする方法 (例で説明)

  1. Bashでプログラミングする方法:構文とツール

  2. Linuxシェルスクリプトでファイル内の単語を変更する方法

  3. ddを使用してFFでファイルをパディングする方法は?

  1. libvirtでVagrantを使用する方法

  2. Linuxでユーザーとグループを操作する方法

  3. `^ m`そしてそれを取り除く方法は?