2017-01-07 11 views
2

私はリモートホストに接続しているようです。何故なの?不可能:動的ec2でユーザーを設定する

コマンドライン:ansible-playbook -i "127.0.0.1," -c local playbook.yml

これは脚本です。役割は、create_ec2_instanceは、ハンドブック(ansible/playbook.yml)の第二の部分内で使用される変数ec2hosts作成:

# Create instance 
- hosts: 127.0.0.1 
    connection: local 
    gather_facts: false 
    roles: 
    - create_ec2_instance 

# Configure and install all we need 
- hosts: ec2hosts 
    remote_user: admin 
    gather_facts: false 
    roles: 
    - show-hosts 
    - prepare-target-system 
    - install-project-dependencies 
    - install-project 

これは単純なEC2モジュールの作成です。これは必要に応じて機能します。 (ansible /役割/作成-EC2インスタンス/タスク/ main.yml):これらはansible(本当に基本的なものですけれども、私は、透明性のための余分な方法を含めました

- name: Create instance 
    ec2: 
    region: "{{ instance_values['region'] }}" 
    zone: "{{ instance_values['zone'] }}" 
    keypair: "{{ instance_values['key_pair'] }}" 
    group: "{{ instance_values['security_groups'] }}" 
    instance_type: "{{ instance_values['instance_type'] }}" 
    image: "{{ instance_values['image_id'] }}" 
    count_tag: "{{ instance_values['name'] }}" 
    exact_count: 1 
    wait: yes 
    instance_tags: 
     Name: "{{ instance_values['name'] }}" 
    when: ec2_instances.instances[instance_values['name']]|default("") == "" 
    register: ec2_info 

- name: Wait for instances to listen on port 22 
    wait_for: 
    state: started 
    host: "{{ ec2_info.instances[0].public_dns_name }}" 
    port: 22 
    when: ec2_info|changed 

- name: Add new instance to ec2hosts group 
    add_host: 
    hostname: "{{ ec2_info.instances[0].public_ip }}" 
    groupname: ec2hosts 
    instance_id: "{{ ec2_info.instances[0].id }}" 
    when: ec2_info|changed 

/役割/ショーのホスト/タスク/ main.yml):

- name: List hosts 
    debug: msg="groups={{groups}}" 
    run_once: true 

、我々は(ansible /役割/準備・ターゲット・システム/タスク/ main.yml)があります。

- name: get the username running the deploy 
    local_action: command whoami 
    register: username_on_the_host 

- debug: var=username_on_the_host 

- name: Add necessary system packages 
    become: yes 
    become_method: sudo 
    package: "name={{item}} state=latest" 
    with_items: 
    - software-properties-common 
    - python-software-properties 
    - devscripts 
    - build-essential 
    - libffi-dev 
    - libssl-dev 
    - vim 

編集:私は上記のremote_userに更新しましたし、以下はエラー出力です:

TASK [prepare-target-system : debug] ******************************************* 
task path: <REDACTED>/ansible/roles/prepare-target-system/tasks/main.yml:5 
ok: [35.166.52.247] => { 
    "username_on_the_host": { 
     "changed": true, 
     "cmd": [ 
      "whoami" 
     ], 
     "delta": "0:00:00.009067", 
     "end": "2017-01-07 08:23:42.033551", 
     "rc": 0, 
     "start": "2017-01-07 08:23:42.024484", 
     "stderr": "", 
     "stdout": "brianbruggeman", 
     "stdout_lines": [ 
      "brianbruggeman" 
     ], 
     "warnings": [] 
    } 
} 

TASK [prepare-target-system : Ensure that we can update apt-repository] ******** 
task path: /<REDACTED>/ansible/roles/prepare-target-system/tasks/Debian.yml:2 
Using module file <REDACTED>/.envs/dg2/lib/python2.7/site-packages/ansible/modules/core/packaging/os/apt.py 
<35.166.52.247> ESTABLISH LOCAL CONNECTION FOR USER: brianbruggeman 
<35.166.52.247> EXEC /bin/sh -c '(umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1483799022.33-268449475843769 `" && echo ansible-tmp-1483799022.33-268449475843769="` echo $HOME/.ansible/tmp/ansible-tmp-1483799022.33-268449475843769 `") && sleep 0' 
<35.166.52.247> PUT /var/folders/r9/kv1j05355r34570x2f5wpxpr0000gn/T/tmpK2__II TO <REDACTED>/.ansible/tmp/ansible-tmp-1483799022.33-268449475843769/apt.py 
<35.166.52.247> EXEC /bin/sh -c 'chmod u+x <REDACTED>/.ansible/tmp/ansible-tmp-1483799022.33-268449475843769/ <REDACTED>/.ansible/tmp/ansible-tmp-1483799022.33-268449475843769/apt.py && sleep 0' 
<35.166.52.247> EXEC /bin/sh -c 'sudo -H -S -n -u root /bin/sh -c '"'"'echo BECOME-SUCCESS-owktjrfvqssjrqcetaxjkwowkzsqfitq; /usr/bin/python <REDACTED>/.ansible/tmp/ansible-tmp-1483799022.33-268449475843769/apt.py; rm -rf "<REDACTED>/.ansible/tmp/ansible-tmp-1483799022.33-268449475843769/" > /dev/null 2>&1'"'"' && sleep 0' 
failed: [35.166.52.247] (item=[u'software-properties-common', u'python-software-properties', u'devscripts', u'build-essential', u'libffi-dev', u'libssl-dev', u'vim']) => { 
    "failed": true, 
    "invocation": { 
     "module_name": "apt" 
    }, 
    "item": [ 
     "software-properties-common", 
     "python-software-properties", 
     "devscripts", 
     "build-essential", 
     "libffi-dev", 
     "libssl-dev", 
     "vim" 
    ], 
    "module_stderr": "sudo: a password is required\n", 
    "module_stdout": "", 
    "msg": "MODULE FAILURE" 
} 
    to retry, use: --limit @<REDACTED>/ansible/<redacted playbook>.retry 

PLAY RECAP ********************************************************************* 
127.0.0.1     : ok=6 changed=2 unreachable=0 failed=0 
35.166.52.247    : ok=3 changed=1 unreachable=0 failed=1 
+0

私はあなたが必要とする必要があるすべてのファイルを追加しました。 –

答えて

0

使用become

remote_user: ansible 
become: true 
become_user: root 

Ansibleドキュメント:たとえばBecome (Privilege Escalation)

:私はユーザーとしてリモートホストに接続私のスクリプトの中で 'ansible'(sshはルートのために無効になっているため)、および次に 'root'になります。まれに、私は '不可解'として接続し、その後 'apache'ユーザーになります。したがって、remote_user接続するユーザ名を指定してください。become_userは接続後のユーザ名です。ユーザーansibleため

PSパスワードなしsudoを:

- name: nopasswd sudo for ansible user 
    lineinfile: "dest=/etc/sudoers state=present regexp='^{{ ansible_user }}' line='{{ ansible }} ALL=(ALL) NOPASSWD: ALL'" 

これが知られている回避策、ここを参照してください:Specify sudo password for Ansible

+0

したがって、私が使用するときには:root、それはリモートマシンではなく私のローカルマシン上でsudoを試みます...エラーは:FAILED! "module_stderr": "sudo:パスワードが必要\ n"、 "module_stdout": ""、 "msg": "MODULE FAILURE"} –

+0

@BrianBruggeman Loosあなたのローカルユーザーのように、パスワードなしのsudoはありません。投稿の更新を参照してください。 –

+0

私はそこではっきりしていてはいけません。実際にはリモートホストに接続しようとしているとは思えません。私のlocalhost上ですべて起こっている。 –

関連する問題