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

Ansibleを使用したマルチパス仮想マシン

この投稿は、Ansibleを使用したマルチパス仮想マシンに関するものです

前提条件

マルチパス仮想マシンは、「マルチパス仮想マシンと秘密鍵を使用した認証」の記事の指示に従って作成する必要があります。秘密鍵を含むファイルが保存されている場所に注意してください。
2番目の前提条件はAnsibleです。 Ansibleのインストール方法の説明は、Ansibleの公式ドキュメントに記載されています。

準備

この記事の例の準備は次のとおりです。

  • この記事の例のファイルを保持するディレクトリを作成します。
    ディレクトリを「AnsibleMultipass」と呼びます。
  • 「user_key」という名前の秘密鍵ファイルを新しいディレクトリにコピーします。
    このキーファイルは、前の記事のマルチパスVMの作成の一部として作成されました。
  • キーベースの認証を備えたマルチパスVMを起動します。
  • キーベースの認証を使用してマルチパスVMのIPアドレスを検索します。
    これは、たとえば、マルチパスリストを使用して実行できます。 ターミナルウィンドウのコマンド。私の場合、IPは192.168.64.20です。

Ansible Inventory

Ansibleインベントリは、インフラストラクチャ内の1つ以上のノードに接続する方法をAnsibleに通知します。したがって、この記事の例には、単一の仮想マシンのみで構成される非常に小さなインフラストラクチャが含まれています。

AnsibleMultipassディレクトリに、次の内容の「multipass-vm-inventory.yml」という名前のファイルを作成します。

all:
  hosts:
    multipassvm1:
      ansible_connection: ssh
      ansible_host: "192.168.64.20"
      ansible_user: vmadmin
      ansible_ssh_common_args: "-o StrictHostKeyChecking=no -o ControlMaster=no -o ControlPath=none"
      ansible_ssh_private_key_file: user_key

注:

  • このAnsibleインベントリファイルには、multipassvm1という1つのホストがあります。
  • ホストへの接続の種類は、SSHであるansible_connection値によって指定されます。
  • ホストのIPアドレス、または存在する場合はDNS名は、ansible_host値で指定されます。
  • IPアドレスは、ローカルマルチパスVMのIPアドレスに置き換える必要があります。
  • ansible_userの値vmadminは、ホストに接続するときに使用されるユーザーの名前です。
  • この値(この例ではvmadmin)は、ssh-keygenコマンドでキーが生成されたときに使用されたユーザー名である必要があります。
  • ansible_ssh_common_argsは、sftp、scp、およびsshコマンドに追加される共通の引数を指定します。
  • StrictHostKeyChecking =noは、新しいキーが信頼できるかどうかのプロンプトをオフにします。代わりに、新しいキーはすべて、known_hostsファイルにサイレントに追加されます。
  • ControlMasterとControlPathの設定は、エスケープされなかったスペースを含むデフォルトのControlPathが原因で発生したコンピューターの問題の回避策です。これらは他のコンピューターでは必要ない場合があり、省略できます。
  • 最後に、ansible_ssh_private_key_file値は、ホストへの接続時に使用される秘密鍵ファイルの名前と、オプションで場所を指定します。
  • ファイル名のみが指定されている場合、キーファイルの場所はインベントリファイルを基準にしています。絶対的な場所にすることができます。

Ansibleモジュール

Ansibleインベントリを配置すると、インベントリ内のホストに対してAnsibleモジュールを実行できるようになります。したがって、この記事では、いくつかの例のみを示します。ドキュメントには、利用可能なすべてのAnsibleモジュールのリストがあります。

Pingモジュール

Ansbileモジュールの1つはpingモジュールです。ドキュメントに記載されているように、pingモジュールはホストに接続し、使用可能なPythonインストールを検証しようとします。
AnsibleMultipassディレクトリにあるターミナルウィンドウで、次のコマンドを発行します。

ansible -i multipass-vm-inventory.yml multipassvm1 -m ping

上記のコマンドには、次のパラメータがあります。

  • -i multipass-vm-inventory.yml
    multipass-vm-inventory.ymlという名前のカスタムインベントリファイルを使用します
  • multipassvm1
    モジュールを実行するホストの名前。使用するインベントリのホストである必要があります。
  • -m ping
    実行するモジュールの名前(この場合はping)を指定します。

結果の出力は次のようになります。

multipassvm1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

ご覧のとおり、マルチパスVMとの接続が正常に確立され、Pythonインタープリターが検出されました。

したがって、マルチパスVMホストに対してpingモジュールを実行する際に問題が発生した場合は、Ansibleコマンドに-vvvを追加して、より詳細な出力を行います。

ansible -vvv -i multipass-vm-inventory.yml multipassvm1 -m ping

実行が成功すると、上記は次のような出力を生成します(一部の出力は省略されています):

ansible 2.10.3
...
Parsed /Users/ivan/AnsibleMultipass/multipass-vm-inventory.yml inventory source with yaml plugin
...
<192.168.64.20> ESTABLISH SSH CONNECTION FOR USER: vmadmin
<192.168.64.20> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="user_key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="vmadmin"' -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o ControlMaster=no -o ControlPath=none 192.168.64.20 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /home/vmadmin/.ansible/tmp `"&& mkdir "` echo /home/vmadmin/.ansible/tmp/ansible-tmp-1621106467.2205691-7451-138900743300503 `" && echo ansible-tmp-1621106467.2205691-7451-138900743300503="` echo /home/vmadmin/.ansible/tmp/ansible-tmp-1621106467.2205691-7451-138900743300503 `" ) && sleep 0'"'"''
<192.168.64.20> (0, b'ansible-tmp-1621106467.2205691-7451-138900743300503=/home/vmadmin/.ansible/tmp/ansible-tmp-1621106467.2205691-7451-138900743300503\n', b'')
<multipassvm1> Attempting python interpreter discovery
<192.168.64.20> ESTABLISH SSH CONNECTION FOR USER: vmadmin
<192.168.64.20> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="user_key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="vmadmin"' -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o ControlMaster=no -o ControlPath=none 192.168.64.20 '/bin/sh -c '"'"'echo PLATFORM; uname; echo FOUND; command -v '"'"'"'"'"'"'"'"'/usr/bin/python'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.7'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.6'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python3.5'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python2.7'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python2.6'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'/usr/libexec/platform-python'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'/usr/bin/python3'"'"'"'"'"'"'"'"'; command -v '"'"'"'"'"'"'"'"'python'"'"'"'"'"'"'"'"'; echo ENDFOUND && sleep 0'"'"''
<192.168.64.20> (0, b'PLATFORM\nLinux\nFOUND\n/usr/bin/python3\nENDFOUND\n', b'')
<192.168.64.20> ESTABLISH SSH CONNECTION FOR USER: vmadmin
<192.168.64.20> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="user_key"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="vmadmin"' -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o ControlMaster=no -o ControlPath=none 192.168.64.20 '/bin/sh -c '"'"'/usr/bin/python3 && sleep 0'"'"''
<192.168.64.20> (0, b'{"platform_dist_result": [], "osrelease_content": "NAME=\\"Ubuntu\\"\\nVERSION=\\"20.04.2 LTS (Focal Fossa)\\"\\nID=ubuntu\\nID_LIKE=debian\\nPRETTY_NAME=\\"Ubuntu 20.04.2 LTS\\"\\nVERSION_ID=\\"20.04\\"\\nHOME_URL=\\"https://www.ubuntu.com/\\"\\nSUPPORT_URL=\\"https://help.ubuntu.com/\\"\\nBUG_REPORT_URL=\\"https://bugs.launchpad.net/ubuntu/\\"\\nPRIVACY_POLICY_URL=\\"https://www.ubuntu.com/legal/terms-and-policies/privacy-policy\\"\\nVERSION_CODENAME=focal\\nUBUNTU_CODENAME=focal\\n"}\n', b'')
...
multipassvm1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "invocation": {
        "module_args": {
            "data": "pong"
        }
    },
    "ping": "pong"
}
META: ran handlers

インベントリ構成の読み取り、SSHを使用したホストへの接続、Pythonのインストールの確認、およびホストのオペレーティングシステムに関する情報の取得のプロセスの詳細を識別できます。

セットアップモジュール

この記事で試す2番目で最後のAnsibleモジュールは、ホストに関する情報を収集するセットアップモジュールです。マルチパスVMホストに関する情報を収集するには、ターミナルウィンドウで次のコマンドを発行します。

ansible -i multipass-vm-inventory.yml multipassvm1 -m setup

コンソールには多くの情報が出力されます。幸い、次の例のようにフィルターを適用することで、情報のサブセットを選択できます。

ansible -i multipass-vm-inventory.yml multipassvm1 -m setup -a "filter=ansible_env*"

上記はmultipassvm1に関する情報を収集し、ansible_envで始まるキーを持つ情報のみを保持します。私のシステムでは、出力は次のようになります:

multipassvm1 | SUCCESS => {
    "ansible_facts": {
        "ansible_env": {
            "DBUS_SESSION_BUS_ADDRESS": "unix:path=/run/user/1000/bus",
            "HOME": "/home/vmadmin",
            "LANG": "C.UTF-8",
            "LC_CTYPE": "C.UTF-8",
            "LOGNAME": "vmadmin",
            "MOTD_SHOWN": "pam",
            "PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin",
            "PWD": "/home/vmadmin",
            "SHELL": "/bin/sh",
            "SSH_CLIENT": "192.168.64.1 49301 22",
            "SSH_CONNECTION": "192.168.64.1 49301 192.168.64.20 22",
            "SSH_TTY": "/dev/pts/0",
            "TERM": "xterm-256color",
            "USER": "vmadmin",
            "XDG_RUNTIME_DIR": "/run/user/1000",
            "XDG_SESSION_CLASS": "user",
            "XDG_SESSION_ID": "8",
            "XDG_SESSION_TYPE": "tty"
        },
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false
}

上記は、マルチパスVMにログインするときにvmadminユーザーに設定される環境変数です。

マルチパスVMホストを含​​むAnsibleインベントリを作成できるため、この種の仮想マシンでAnsibleを使用できます。したがって、Ansibleプレイブックを作成して、マルチパス仮想マシンをセットアップおよび構成できます。これは、今後の記事で利用します。


Linux
  1. Ansibleガイド:Ansibleを使用してファイルを管理する

  2. 仮想ホストを使用して複数のドメインにサービスを提供

  3. ansible を使用してテンプレート ファイルのフォルダーをデプロイする

  1. Ansibleを使用してDockerにNextcloudをデプロイする

  2. Ansibleを使用してLinuxユーザーを作成する方法

  3. 毎週の仮想マシン、ビルド スクリプト付き

  1. Ansibleを使用してリモートWindowsホストを管理する方法

  2. Virt-Managerを使用してKVM仮想マシンを管理する方法

  3. コックピットWebコンソールを使用したKVM仮想マシンの管理