リモートホストへのAnsible接続に関する質問


8

Ansibleの動作についていくつか質問したいと思います。

1-リモートホストにログインするときにAnsibleが使用するシェルはどれですか?

/ubuntu/937354/track-logins-made-via-non-interactive-shells/937716?noredirect=1#comment1486867_937716

2-プレイブックに10個のタスクがある場合、ansibleはリモートホストへの接続を10回行うか、単一の接続を使用してこれらの10個のタスクすべてを実行しますか?

3-2つのホストで10のタスクを実行している場合、

最初のタスクはホスト1で実行され、次にホスト2で実行され、次に2番目のタスクがホスト1で実行され、次にホスト2で実行されます。など

だから、ここでも接続は両方のホストに持続しますか?

または

最初にホスト1に接続してタスク1を実行してから切断し、さらにホスト2に接続してタスク1を実行してから切断しますか?


1
一般に、Stack Exchangeプラットフォームは、1つの質問に対して1つの質問のみを行う場合に最適に機能します。
Xiong Chiamiov

はい、そうです!しかし、これらは小さな質問であり、単一のトピックに関連しているため、それらを組み合わせました。
luv.preet 2017

今後は質問を組み合わせないでください。Q&Aセット全体に答えたり読んだりすることが難しくなります。質問1は他の2つとは実際には関係ありません。
RichVel 2017

回答:


7

1と答えることはできません(特に指定されていない限り、デフォルトの/ bin / shを使用するといつも思っていましたか?)

  1. 10回以上の接続になります。通常、単一のタスクには、リモートで実行されるタスクファイルをコピーするためのSCPまたはSFTP接続があり、次にスクリプトをトリガーする別の接続があります。次のように-vvvを使用してプレイブックを実行することで、この状況を監視できます。

    ansible-playbook deploy_app.yml -u maplebird -vvv
    

    第3レベルの冗長性は、クライアントへのすべての接続を示します。

  2. デフォルトでは、Ansibleは、構成されたフォークの最大数まで、すべてのホストでタスクを同時に実行します。したがって、両方のホストでタスク1を実行し、次に両方のホストでタスク2を実行します。フォークはansible.cfgで定義されており、デフォルトは5です。この変数をより大きい値に変更するか、コメント化します。

    forks = 5
    

    必要に応じて、プレイブックでserialオプションを指定することにより、プレイブックの実行時にローリングバッチを実行することもできます。これは、同時に定義したホストのタスクのみを同時に実行します。

    5台のホストに対してプレイブックを実行していて、シリアルオプションが設定されているとします。serial = 1の場合、一度に完全なPlaybook 1ホストを実行します。シリアル= 2の場合、ホスト1と2、次にホスト2と3、次にホスト5を実行します。例:

    name: deploy to all webservers
    hosts: webservers
    serial: 2
    roles:
       - deploy_application
    

もっと読む:

シリアル(ローリング)プレイブックの実行:

フォーク:

お役に立てれば。


2
IIRC ansiblessh多重化を使用するので、すべてのタスクでリモートホストへの単一の接続ではないのですか?
heemayl 2017

3

(1)Ansibleはどのシェルを使用しますか?

Ansibleは/bin/shデフォルトで使用します。RHEL / CentOSを含む多くの* nixシステムで/bin/shbash-しかし、Ubuntu / Debianではdashそれがはるかに基本的です。

Ansibleでbashを使用する

これは、ansible.cfgexecutable = /bin/bashconfigオプション変更でき、インベントリでansible_shell_typeも設定できる可能性があります。

しかし、実際には(Ansible 2.2.2以降)、私や他の人executableansible.cfgbecomeモードであるかどうかにかかわらず)inの設定が機能しないことを発見しました。

うまく機能するが、タスクごとに少し多くのコードを意味するアプローチは、これを書くことです:

- shell:
    echo hello from $0
  args:
    executable: /bin/bash

これはhello from /bin/bash、シェルが正しいことを示すと表示されます。

あなたが使用する必要がある場合rvmrbenvpyenvまたは同様のツールが必要です前回source ~/.bash_profile(対話型シェルと同様に)、あなたがする必要がありますラッパースクリプトを使用またはシェルタスク内のinvokeのbashを


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.