タグ付けされた質問 「ansible」

Ansibleは、コンピューターを構成および管理するためのオープンソースソフトウェアプラットフォームです。マルチノードソフトウェアの展開、アドホックタスクの実行、および構成管理を組み合わせています。

1
Ansible-MFA付きバスティオンを介したアクセス
現在の環境では、MFAが有効になっている要塞ホストを介してのみ、すべてのLinuxサーバーにアクセスできます。 Ansibleが要塞を介してサーバーと正常に通信できるようにしましたが、唯一の問題は、ホストごとに要塞への新しい接続を確立することです。つまり、サーバーと同じ数のMFAキーを入力する必要があります。悪い時代。:( 多重化を機能させるために、私のssh設定で次のようなものをいじってみました: Host bastion ControlMaster auto ControlPath ~/.ssh/ansible-%r@%h:%p ControlPersist 5m 残念ながらそれはそれをしていないようです。誰かが、要塞ホストを介して接続するすべてのホストについて、Ansibleが接続を再確立して接続を再確立できないようにする方法についていくつかのヒントを得ましたか? ありがとう!

2
Ansibleでバイナリファイルを暗号化する方法
Ansible Vaultを使用して、パスワード、証明書の秘密鍵などをAnsible Playbook gitリポジトリに保存しています。既存のプライベートデータはすべてテキスト形式であるため、変数に格納できます。これらは、テンプレートまたはcontentコピーモジュールのパラメーターで使用されます。 これで、JavaのKeyStoreファイルができましたが、残念ながらバイナリ形式になっています。そのため、それを変数内に格納することはできません-または、少なくともそれを行う方法がわかりません。gitに保存されているファイルを適切に暗号化する最も簡単な方法は何ansible-playbookですか?実行時に利用できますか? 私が成功せずにすでに試したこと: バイナリファイルをbase64でエンコードし、エンコードされたデータを変数に格納し、テンプレートモジュールをで使用します{{base64_data | b64decode}}。EF BF BD結果ファイルの大量の16進ダンプにつながります。3バイトはUnicode置換文字をUTF-8でエンコードするため、バイナリデータをテキストとして解釈する際に問題があります。 バイナリファイルをbase64でエンコードし、エンコードされたデータを変数に格納し、でコピーモジュールを使用しますcontent="{{base64_data | b64decode}}"。Ansibleは「変数がモジュールの引数に新しいパラメーターを挿入しました」と文句を言います。二重引用符の代わりに単一引用符を使用すると、Ansibleは「引数文字列の解析エラー」と、ターミナルにダンプされたすべてのバイナリデータのコピーを表示します...
9 ansible 

2
Ansible:ホストが複数のグループに表示され、両方のグループに同じタスクが含まれています。タスクを一度実行する方法はありますか?
私はこのようなプレイブックを持っています: --- - hosts: group1 roles: - role1 - role2 - hosts: group2 roles: - role2 - role3 次のようなエントリを持つhostsファイルがあるとします。 [group1] host1.example.com [group2] host1.example.com Ansibleはhost1.example.comのrole2 TWICEでタスクを実行します。これは、2つのグループに表示され、それぞれにrole2が割り当てられているためです。 同じ役割が2回含まれていることをAnsibleに認識させるにはどうすればよいですか。
9 ansible 

2
Ansibleは、sudoパスが指定されている場合でも、sudoの認証に失敗します
問題 最新の安定したAnsibleビルドを使用すると、「Gathering_Facts」中にプレイブックが1つのサーバーでハングするが、Sudoを使用すると他の同様のサーバーで正常に機能するという奇妙な問題があります。Ansibleサーバーでは、ユーザー(NISユーザー)として実行し、リモートサーバーでsudo(rootとして)を使用して変更を加えます。このセットアップからSudoを削除すると、すべてが正常に動作します。 セットアップ ソフトウェアのバージョン OS:RHEL 6.4 Ansibleバージョン:ansible 1.8.2 須藤バージョン: Sudoバージョン1.8.6p3 Sudoersポリシープラグインバージョン1.8.6p3 Sudoersファイル文法バージョン42 Sudoers I / Oプラグインバージョン1.8.6p3 SSHバージョン:OpenSSH_5.3p1、OpenSSL 1.0.0-fips 2010年3月29日 サーバーマップ -------- User1 @ Server1:sudo -H -S -p(Gathering_Factsでハングアップ) / User1 @ Ansible ---- \ -------- User1 @ Server2:sudo -H -S -p(正常に機能) ユーザー User1:Server1とServer2の両方でNISにアクセスできるユーザー。 root:各サーバーのローカルrootユーザー。 Ansible構成 私のansible.cfgの関連部分。 ansible.cfg sudo = true sudo_user …
9 sudo  rhel6  ansible 

1
Ansible:ホスト名または役割に応じてファイルをコピーします
ホスト名に応じてファイルをコピーする最良の方法は何ですか? 内容は異なるがファイル名が同じファイルを複数のマシンにコピーする必要があります。 私はいくつかのファイルを持っています: file.role1 file.role2 file.role3 ホスト名や役割に応じて、コピーfile.roleXして名前を変更したいfile ありがとう。
9 ansible 

1
Ansibleプレイブックの連想配列
Ansibleを使用してサーバーにユーザーを追加しようとしています。ユーザーごとに暗号化されたパスワードが異なります。 私はそのようなものを持っています: vars: users: - myuser1 - myuser2 password: encryptedpasswordhere tasks: - name: Creating users user: name={{ item }} password={{ password }} groups=sudo,adm shell=/bin/bash with_items: users これはうまくいきますが、すべてのユーザーが同じパスワードを持っています。 連想配列を作成しようとしています。PHPでは、次のようにします。 $users = array('user'=>'myuser1', 'password'=>'encryptedpass1', 'user'=>'myuser2', 'password'=>'encryptedpass2', ); Ansibleプレイブックでそれを行う方法はありますか?
9 ansible 

2
複雑な引数のフォームを使用して自由形式のコマンドをAnsibleに渡す
プログラムで生成されたAnsibleプレイブックを使用しています。一般的に、プレイブックは単なるYAMLであるため、これは簡単です。ただし、「シンプルな」key=valueフォームを使用する場合、プレイブックは純粋なYAML ではなく、shlex解析可能なフォームに埋め込まれたコンテンツが含まれます。 この形式のあいまいさを回避し(key=valueコマンドの引数またはansibleの引数をペアにしていますか?)、解析および生成するフォーマットが1つしかないため、無条件に例で示されている複雑な引数メカニズムを無条件に使用しています-examplesリポジトリ。 これは、次の種類の構文を使用します。 action: module-name args: key1: value1 key2: value2 ...それはよくて良いです。ただし、このフォームをshellまたはcommandモジュール(ドキュメントには実際のコマンドがという引数で渡されると記述されているfree_form)に使用しようとすると、うまく機能しません。 action: shell args: free_form: echo hello_world >/tmp/something creates: /tmp/something 呼び出されると、これは以下を実行します。 /bin/sh -c " free_form='echo hello_world >/tmp/something' " ...これは、私が達成しようとしていることではありません。 純粋なYAML構文を使用して「自由形式」のコマンドを取得するAnsibleモジュールを使用する正しい方法は何ですか?
9 ansible 

3
AnsibleでのPuppetの「unless」に相当するものは何ですか?
背景: Puppetでは、コマンドがまだ実行されていない限り、コマンドを実行することが可能です。 exec { '/bin/echo root >> /usr/lib/cron/cron.allow': path => '/usr/bin:/usr/sbin:/bin', unless => 'grep root /usr/lib/cron/cron.allow 2>/dev/null', } 目的:既にAnsibleで実行されていない限り、コマンドを実行する 方法 tasks / main.yml - name: add vhost sensu command: rabbitmqctl add_vhost /sensu 結果 TASK [ansible-rabbitmq : add vhost sensu] ************************************** fatal: [111.222.333.444]: FAILED! => {"changed": true, "cmd": ["rabbitmqctl", "add_vhost", "/sensu"], …
9 ansible 

1
グループにscp_if_ssh = Trueを設定する方法は?
この変数をansible.cfgに設定するのは簡単ですが、sftpを使用していないホスト(およびおそらくPythonも同様)に対してのみ意味があります。だから私はルーターのグループを持っています– group_varsでこの変数を設定することは可能ですか?
9 ansible 

2
Ansibleに存在しない場合はユーザーを作成します
特定のユーザーが常にシステムに存在することを確認したいので、存在しない場合にのみ作成します 私の現在のタスクは: - name: Create default user action: user name={{ user }} groups={{ group }} state=present ただし、ユーザーがすでに存在する場合はエラーが発生するので、ユーザーアカウントがすでに存在する場合にエラーを回避するにはどうすればよいですか?
9 ansible 

1
ansible runグローバル変数
ansibleを使用して、サーバーのクラスターを作成したいと思います。 1つのメインプレイブックに、いくつかのサブプレイブックを含めています。 - include: playbook_commandserver.yml - include: playbook_agent.yml playbook_commandserver.ymlで、コマンドサーバー(aws上)を作成します。次に、set_factモジュールを使用してコマンドサーバーのDNS名を記憶するロールをトリガーします。 - name: Get hostname of command server shell: /usr/bin/host $(/usr/bin/curl -s http://ipecho.net/plain) | /usr/bin/awk '{print $5}' | /usr/bin/awk -F 'aws.com' '{print $1"aws.com"}' register: cs - name: Set hostname of command server as fact set_fact: commandserver="{{ cs.stdout }}" commandserver実際には、同じプレーではなく、同じ脚本で..おろかで提供されplaybook_agent.yml、その後、含まれ得ることを、。そして、それはまさにそこにあり、そこでcommandserver-factにアクセスする必要があります。 では、完全なansible-runに有効な変数をどのように設定/保存するのでしょうか。 私はこれを見つけました:https : …

1
Ansibleはスーパーバイザの再起動に問題があります
Ansibleプレイブックを使用してスーパーバイザを再起動しようとしていますが、Ansibleのスーパーバイザモジュールの問題に遭遇しているようです。 私のスーパーバイザー構成で、プログラムを定義しました: [program:process] process_name=%(program_name)s_%(process_num)02d command=/home/box1/workers/bin/process numprocs=64 directory=/home/box1/workers/bin autostart=true autorestart=true startretries=5 stderr_logfile=/tmp/%(program_name)s-err.log stdout_logfile=/tmp/%(program_name)s-out.log user=root そして、これはうまくいきます。しかし、Ansibleを介してスーパーバイザを再起動しようとすると、次のエラーが発生します。 failed: [box1] => {"failed": true} msg: program:process: ERROR (no such process) program:process: ERROR (no such process) 私のAnsibleタスク構成は次のようになります。 - name: Restart Supervisor sudo: yes supervisorctl: name=program:process state=restarted config=/etc/supervisor/supervisord.conf name私が試してみましたパラメータprogram:process、program、program:そしてprocessどれも仕事に思えません。現在、Ansible 1.5.4を使用しています。

2
テンプレート出力をその場でキャプチャ
stdinのみを介してデータを受け入れるターゲットサーバーでコマンドを実行する必要があります。フィードしているデータはテンプレートファイルからのものであり、機密データが含まれているため、ファイルシステムに1秒間置かないようにしています。 コマンドに渡せるように、テンプレートタスクの出力を取得する方法を見つけようとしています。何かのようなもの: - name: generate data template: src: data.j2 dest: [I'd rather not have any files written] register: myvar - name: run command shell: "command < {{ myvar }}" 一時ファイルの書き込み、コマンドへのフィード、その後の消去を含まない、これに対処するより良い方法はありますか?
8 ansible 

1
ユーザーおよび実行としてのssshはルートを持っています(期待どおり)
SSHからアクセスできるユーザーが1人だけいる(彼をfooと呼びましょう)重要な数のホストを管理し、次にrootとしてログインして特権コマンドを実行する必要があります。 Fooユーザーにはsudo権限の種類がないため、特権コマンドを実行するにはrootとしてログインする必要があります。私は実際にこのスクリプトを実行するために期待スクリプトを使用しており(sshログインとしてfoo、rootとしてsu経由でログイン)、Ansibleに切り替えたいと考えています。新しいユーザーを作成して彼にsudo権限を付与したり、基本的にfooにsudo権限を付与したりできることはわかっていますが、Ansibleで期待しているのと同じことを実行できますか? fooとしてssh接続を行い、ルートとしてプレイブックまたは任意のアドホックコマンドを実行します。Ansibleのドキュメントにそれに関する情報は見つからなかったので、誰かがすでにこの種の尋問を受けているかどうかをここで尋ねます。
8 sudo  root  ansible  expect 


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