2015-11-04 10 views
6

私はすべての要件がローカルにインストールされていることを確認するプレイブックを持っています。なぜsudoユーザーとしてPipを実行しないのですか?

--- 
    - hosts: localhost 
    become: yes 
    become_user: "{{ sudo_user }}" 
    connection: local 

    vars_files: 
     - vars/main.yml 

    roles: 
     - do 

sudo_userはVARSでsurfer190です:私はansible 2.0.0

ansible-playbook site.yml -i staging 

site.ymlを使用しています。

は/タスク/ main.ymlの操作を行います。

- name: make sure everything is installed 
    apt: name={{item}} state=installed 
    with_items: 
    - python-apt 
    - python-pycurl 
    - python-pip 
    - python-setuptools 

- name: Install dopy 
    pip: name={{ item }} 
    with_items: 
    - virtualenv 
    - dopy 
    - passlib 

私は次のエラーを取得:基本的にpermission deniedある

failed: [localhost] => (item=passlib) => {"cmd": "/usr/local/bin/pip install passlib", "failed": true, "invocation": {"module_args": {"name": "passlib"}, "module_name": "pip"}, "item": "passlib", "msg": "stdout: Collecting passlib\n Using cached passlib-1.6.5-py2.py3-none-any.whl\nInstalling collected packages: passlib\n\n:stderr: Exception:\nTraceback (most recent call last):\n File \"/usr/local/lib/python2.7/dist-packages/pip/basecommand.py\", line 211, in main\n status = self.run(options, args)\n File \"/usr/local/lib/python2.7/dist-packages/pip/commands/install.py\", line 311, in run\n root=options.root_path,\n File \"/usr/local/lib/python2.7/dist-packages/pip/req/req_set.py\", line 646, in install\n **kwargs\n File \"/usr/local/lib/python2.7/dist-packages/pip/req/req_install.py\", line 803, in install\n self.move_wheel_files(self.source_dir, root=root)\n File \"/usr/local/lib/python2.7/dist-packages/pip/req/req_install.py\", line 998, in move_wheel_files\n isolated=self.isolated,\n File \"/usr/local/lib/python2.7/dist-packages/pip/wheel.py\", line 339, in move_wheel_files\n clobber(source, lib_dir, True)\n File \"/usr/local/lib/python2.7/dist-packages/pip/wheel.py\", line 310, in clobber\n ensure_dir(destdir)\n File \"/usr/local/lib/python2.7/dist-packages/pip/utils/__init__.py\", line 71, in ensure_dir\n os.makedirs(path)\n File \"/usr/lib/python2.7/os.py\", line 157, in makedirs\n mkdir(name, mode)\nOSError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/passlib'\n"} 

を。したがって、sudoでコマンドを実行していません。私はsudo pip install passlibを試してみるとうまくいきます。

-kで実行してもsudoのパスワードを入力しても動作しません。 surfer190ユーザーがsudoにはパスワードを要求することに注意してください。

私は間違っていますか?ぼーっとしたタスクをインストールする

- name: make sure everything is installed 
    apt: name={{item}} state=installed 
    with_items: 
    - python-apt 
    - python-pycurl 
    - python-pip 
    - python-setuptools 

- name: Install dopy 
    pip: name={{ item }} 
    with_items: 
    - virtualenv 
    - dopy 
    - passlib 
    sudo: yes 

タスクを実行しながら、脚本の実行がハングすることに気付いた場合、それはにsudo passowordためansible待機する可能性がありますがありませんがあります:

+0

は? '/ usr/local'は必ずしもroot所有ではありません。 – cel

+0

私にとっては、 'GNU/Linux'を実行しています。' Ubuntu 14.04' – surfer190

+0

@ surfer190 'become_method'を試しましたか? – frank

答えて

1

必要な最低限の設定があるようなので、それが見えます:

--- 
    - hosts: localhost 
    become: yes 
    become_user: "{{ sudo_user }}" 
    connection: local 

    vars_files: 
     - vars/main.yml 

    roles: 
     - ... 

のでbecome_userが、その私が思うになしパスでsudoをすることができ、ユーザーである必要があります。 それはで失敗なしbecome_userがない場合:

OSはあなたがオンになっている
failed: [localhost] => (item=passlib) => {"failed": true, "item": "passlib", "parsed": false} 
[sudo via ansible, key=sgidbrejgqoibeozxncyhixnwsukxjbe] password: 
2

追加「はいsudo」をあなたはパスワードを入力することができます。それを回避する方法があります。 「の/ etc/sudoersの」

# Allow members of group sudo to execute any command 
%sudo ALL=(ALL:ALL) ALL 
yourusername ALL=NOPASSWD: ALL 

に位置あなたのsudoersファイルで、以下の指定されたセクションを更新しての/ etc/sudoersファイルを編集中に、誤ったエントリが二度とサーバーにログオンできないことがあります持つ、注意してください。

+0

' sudo:yes'は 'Ansible 2'で廃止されました。 – surfer190

+0

これは後方互換です。また、私は、その2の代​​わりに、不可能な2のことを理解するのに苦労していました。可能なドキュメントごとには、sudoの代わりになりますが、disiは私のために働きません。私はそれを正しくしていないかもしれません。 –

+0

私は答えを見つけたと思う、必要な唯一の方法は 'になる:はい'だ。これは、プレイ/タスクを 'root'として実行します。 'become_user'を使って特定のユーザを実行することはできません。 – surfer190

関連する問題