Ansible を使用して特定のタスクでユーザーを認証するにはどうすればよいですか?

Ansible を使用して特定のタスクでユーザーを認証するにはどうすればよいですか?

vagrant ユーザーで apt を使用してプレイブックにいくつかの依存関係をインストールしようとすると、「msg: 排他操作のために apt をロックできませんでした」というメッセージが表示されます。タスクの実行中に vagrant ユーザーを認証できないために、このメッセージが表示されるのではないかと考えています。

これは私が使用しているロール宣言です。

- name: ruby installer
  hosts: all
  sudo: True
  sudo_user: vagrant
  roles:
  - ruby

そして、失敗するタスクは次のようになります。

    - name: Install ruby building dependencies
      apt: name={{ item }} 
           state=installed 
           update_cache=yes

      with_items:
      - dependency

「update_cache=yes」を削除してプレイブックを再実行すると、次のメッセージが表示されます: E: 管理ディレクトリ (/var/lib/dpkg/) をロックできません。root ですか?

当然、root で実行すると完全に正常に動作しますが、一部の Ruby (rvm、rbenv 固有) タスクのため、root 以外の別のユーザーで実行する必要があります。

プレイブックを実行するときに、Vagrant ユーザーを適切に認証するにはどうすればよいですか? 誰か正しい方向を示してもらえますか?

答え1

最終的に、次のような役割宣言になりました。

- name: ruby installer
  hosts: all
  sudo: True
  user: vagrant
  roles:
  - ruby

依存関係をインストールするためのこのタスク:

- name: Install ruby building dependencies
  apt: name={{ item }} 
       state=installed 
       update_cache=yes
  sudo_user: root

  with_items:
  -dependency

これで、プレイブック内の apt タスクには root が使用され、その他の ruby​​ タスクには vagrant が使用されるようになりました。

答え2

aptシステムレベルのパッケージをインストールするため、apt を使用するには root と同等の権限が必要です。

別のユーザーとしてさらにアプリケーションの展開手順を実行する必要がある場合は、それらの手順を deb パッケージのインストール プロセスから取り出す必要があります。

関連情報