<p>boto๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ: ์ด ๋ชจ๋“ˆ์— boto๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.</p>

์— ๋งŒ๋“  2016๋…„ 03์›” 17์ผ  ยท  32์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: ansible/ansible

"msg": "boto required for this module" ๋…ผ๋ฆฌ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ๊ณณ์—์„œ ๊นจ์ง„ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  aws ์ง€์›์„ ์“ธ๋ชจ ์—†๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

local_action ๋˜๋Š” ์ง์ ‘ ์‹คํ–‰ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๊ณ  ๋‚ด๊ฐ€ ํ™•์ธํ•œ ๊ฒฝ์šฐ์—๋„ ์ด๊ฒƒ์€ ๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘์—์„œ ๊นจ์กŒ์Šต๋‹ˆ๋‹ค.

- hosts:
  - localhost

  tasks:
    - pip:
        name: boto
    - name: Provision Krypton (kr)
      local_action: ec2
        key_name=kr
        instance_type=m4.4xlarge
        image=ami-c109e8aa
        wait=yes
        group=webserver
        count=3
        vpc_subnet_id="{{ aws_vpc }}"
        assign_public_ip=yes

์ด๊ฒƒ์€ OS X ์ปดํ“จํ„ฐ์—์„œ ๋ฐœ์ƒํ•˜๋ฉฐ boto๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์Œ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

Python 2.7.10 (default, Jul 13 2015, 12:05:58)
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import boto

ํ”Œ๋ ˆ์ด๋ถ ์ž์ฒด์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ๋Œ€์ƒ ์‹œ์Šคํ…œ์—์„œ boto๋„ ๊ฐ€์ ธ์˜ค๋ฉฐ local_action์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ec2 ๋ชจ๋“ˆ์„ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋ฉด ์—ฌ์ „ํžˆ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

which python
/usr/local/bin/python

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@stevenscg , ์—ฌ์ „ํžˆ ๋‚ด ์ธ๋ฒคํ† ๋ฆฌ ํŒŒ์ผ์—์„œ ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

[localhost]
localhost ansible_connection=local ansible_python_interpreter=python

๊ทธ๊ฒƒ์ด ๋‹น์‹ ์—๊ฒŒ ๋„์›€์ด๋œ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”!

๋ชจ๋“  32 ๋Œ“๊ธ€

๋ชฉ๋ก ์ •๋ณด

์•ˆ๋…•!

Ansible์— ๊ด€์‹ฌ์„ ๊ฐ€์ ธ์ฃผ์…”์„œ ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ง„์‹ฌ์œผ๋กœ ์šฐ๋ฆฌ์—๊ฒŒ ๋งŽ์€ ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์‚ฌ์šฉ์ž ์งˆ๋ฌธ์ธ ๊ฒƒ ๊ฐ™์œผ๋ฉฐ, ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ๊ฒƒ๋“ค์„ ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ๋‚˜ IRC ์ฑ„๋„๋กœ ๋ณด๋‚ด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๊ฑฐ๊ธฐ์— ๋“ค๋Ÿฌ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฒ„๊ทธ, pull ์š”์ฒญ, RFE ๋“ฑ์— ๋Œ€ํ•œ ๋ฌธ์ œ ์ถ”์ ๊ธฐ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ฐ์‚ฌ๋“œ๋ฆฌ๋ฉฐ ๋ชฉ๋ก์ด๋‚˜ IRC์—์„œ ๋ต™๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!

@bcoca ์นดํ”ผ์™€ ๊ณผ๊ฑฐ๋กœ ๋ฒ„๊ทธ๋ฅผ ๋‹ซ๋Š” ๊ฒƒ์€ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ชฉํ‘œ๋ฅผ ์„ธ์šฐ๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์œ ํšจํ•œ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•„๋‹™๋‹ˆ๋‹ค.

asible์ด python 2๊ฐ€ /usr/bin/python ์— ์„ค์น˜๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๋ฒ„๊ทธ์ด๋ฉฐ ๋งค์šฐ ์ค‘์š”ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@ssbarnea - ํ˜ธ์ŠคํŠธ ํŒŒ์ผ์— ๋ช…์‹œ์ ์œผ๋กœ localhost๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ œํ•œ ํŒจํ„ด์— ํฌํ•จ์‹œํ‚จ ์ดํ›„๋กœ ec2์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ๋„ ์ด ์„ฑ๊ฐ€์‹  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

https://www.zigg.com/2014/using-virtualenv-python-local-ansible.html ์—๋Š” hosts: localhost ํ•˜๊ฑฐ๋‚˜ local_action ํ˜ธ์ถœํ•˜๋Š” ์ž‘์—…์— ๋Œ€ํ•ด ๋ชจ๋‘ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋Š” ๊ดœ์ฐฎ์€ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค

@ssbarnea @pauricthelodger ์•„์ง๋„ ์ด๊ฒƒ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

ELB์— ์ธ์Šคํ„ด์Šค๋ฅผ ๋“ฑ๋กํ•˜๊ณ  ec2.py ์ธ๋ฒคํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ช‡ ๋‹ฌ(๋ช‡ ๋…„) ๋™์•ˆ ์ž‘๋™ํ•œ ํ”Œ๋ ˆ์ด๋ถ์ด local_action: ec2_elb ์—์„œ ์‹คํŒจํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

MacOS์—์„œ Ansible 2.0.0.2, 2.0.1, 2.1.0์„ ์‹คํ–‰ํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์•„์ง zigg ๊ธฐ์‚ฌ ์ถ”์ฒœ์„ ์‹œ๋„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

TASK [AWS - Register instances with the load balancer] *************************
fatal: [10.x.x.x -> localhost]: FAILED! => {"changed": false, "failed": true, "msg": "boto required for this module"}
$ which python
/usr/local/bin/python

$ pip list boto | grep boto
boto (2.38.0)
boto3 (1.1.4)
botocore (1.2.10)

$ ansible --version
ansible 2.0.0.2

$ python -V
Python 2.7.9

@stevenscg , ์—ฌ์ „ํžˆ ๋‚ด ์ธ๋ฒคํ† ๋ฆฌ ํŒŒ์ผ์—์„œ ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

[localhost]
localhost ansible_connection=local ansible_python_interpreter=python

๊ทธ๊ฒƒ์ด ๋‹น์‹ ์—๊ฒŒ ๋„์›€์ด๋œ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”!

@pauricthelodger ๋‚˜๋Š” ์ด๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ ๋ฒ„์ „ 2.0.0.2, 2.0.1 ๋ฐ 2.1.0์—์„œ ์ž‘๋™ํ–ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

ํ์‡„๋œ ์ด์œ ๊ฐ€ ์žˆ๋‚˜์š”? OS X(Sierra)์—์„œ๋Š” ์—ฌ์ „ํžˆ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

$ which python
/usr/local/bin/python

$ pip list boto | grep boto
boto (2.45.0)
botocore (1.5.1)

$ ansible --version
ansible 2.2.1.0

$ python -V
Python 2.7.12

์ธ๋ฒคํ† ๋ฆฌ ํŒŒ์ผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์ง€๋‚˜์ณค์ง€๋งŒ ์—ฌ์ „ํžˆ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

@rolette Ansible์€ ๊ธฐ๋ณธ /usr/bin/python ( /usr/local/bin/python ์™€ ๋™์ผํ•˜์ง€ ์•Š์Œ). ๋‚ด ์กฐ์–ธ - virtualenv ์‚ฌ์šฉ ( virtualenv .venv )

๋ฐ ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ ์ธ๋ฒคํ† ๋ฆฌ: inventory/localhost :

#!/bin/bash
ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )/.."
echo "{
  \"localhost\": {
    \"ansible_connection\": \"local\",
    \"ansible_python_interpreter\": \"${ROOT_DIR}/.venv/bin/python\"
  }
}"

@wojtek-oledzki ๋‹ค๋ฅธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ œ๊ฐ€ ์ฐพ๊ณ  ์žˆ๋Š” ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๋ชจ๋“  ์‚ฌ๋žŒ์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ถ”์ ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜๋„๋ก ์š”๊ตฌํ•˜๋Š” ๋Œ€์‹  OS X์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ˆ˜์ •์ž…๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์•„๋‹™๋‹ˆ๋‹ค. ํŒŒ์ด์ฌ์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์œ„์น˜ /usr/bin/python ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด Python ์‹คํ–‰ ํŒŒ์ผ์ด ์žˆ๋Š” ์œ„์น˜๋ฅผ Ansible์— ์•Œ๋ ค ์ฃผ๊ธฐ๋งŒ โ€‹โ€‹ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋ถ€์ •์ ์ธ ๊ณ ์ŠคํŠธ๋ผ์ด๋”... ์ด์ƒํ•˜๊ฒŒ๋„ ๋‹ค๋ฅธ ๋ชจ๋“  ํŒŒ์ด์ฌ ํ”„๋กœ๊ทธ๋žจ์€ virtualenv ์—†์ด๋„ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์‹คํ–‰ ํŒŒ์ผ์— ๋Œ€ํ•œ ํ•˜๋“œ ์ฝ”๋”ฉ ๊ฒฝ๋กœ๋Š” ๋งŽ์€ ํ™˜๊ฒฝ์—์„œ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด ํŠน์ • ๋ฒ„๊ทธ์™€ ๊ฐ™์€ ์ „์ฒด ํ”Œ๋žซํผ์€ ์•„๋‹™๋‹ˆ๋‹ค.

python์„ ํ˜ธ์ถœํ•˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์€ ํ•˜๋“œ์ฝ”๋”ฉ๋œ ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹ˆ๋ผ #!/usr/bin/env python ๋ฅผ ํ†ตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ทœ์น™์— ๋Œ€ํ•œ ํ•œ ๊ฐ€์ง€ ์˜ˆ์™ธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. virtualenvs์˜ ์…ธ ์Šคํฌ๋ฆฝํŠธ๋Š” env ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ์ „์ฒด ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

ENV๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๊นŒ ๊ธฐ๋ณธ ์‹œ์Šคํ…œ ํŒŒ์ด์ฌ ์‚ฌ์šฉํ•˜์—ฌ ๋งฅ OS์— /usr/bin/python ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ๋ณด๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€ ์•Š๋Š”๋‹ค /usr/bin/python ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ.

์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ํ•œ ๊ฐ€์ง€๋Š” ์…ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ฐ€๋Šฅํ•œ ๋ชจ๋“ˆ์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

@ssbarnea #!/usr/bin/env python ๊ฐ€ virtualenvs ๋‚ด์—์„œ ์˜ฌ๋ฐ”๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ๋™์˜ํ•˜๋ฏ€๋กœ ์—ฌ์ „ํžˆ ๊ฒฝ๋กœ๋ฅผ ํ•˜๋“œ์ฝ”๋”ฉํ•  ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

ansible์—์„œ ec2_tag ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•  ๋•Œ๋„ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

TASK [Retrieve all tags on an instance] ****************************************
fatal: [10_12_26_12]: FAILED! => {"changed": false, "failed": true, "msg": "boto required for this module"}

ํ”Œ๋ ˆ์ด๋ถ:

  - name: Get instance ec2 facts
    action: ec2_facts
    register: ec2_facts

  - name: Retrieve all tags on an instance
    ec2_tag:
      region: '{{ ansible_ec2_placement_region }}'
      resource: '{{ ansible_ec2_instance_id }}'
      state: list
    register: ec2_tags

๊ทธ๋Ÿฌ๋‚˜ local_action์œผ๋กœ ์ž‘์—…

  - name: Get instance ec2 facts
    action: ec2_facts
    register: ec2_facts

  - name: Get resource tags from ec2 facts
    #sudo: false
    local_action: ec2_tag resource={{ec2_facts.ansible_facts.ansible_ec2_instance_id}} region={{ec2_facts.ansible_facts.ansible_ec2_placement_region}} state=list
    register: ec2_tags

ec2_elb ํƒœ๊ทธ์™€ ๋™์ผํ•œ ์˜ค๋ฅ˜:

  pre_tasks:
    - name: Gathering ec2 facts
      action: ec2_facts
    - name: Trackor Instance de-register
      become: no
      local_action:
        module: ec2_elb
        region: "{{ ansible_ec2_placement_region }}"
        instance_id: "{{ ansible_ec2_instance_id }}"
        state: absent
        wait_timeout: 30
        ec2_elbs: '{{ trackor_elb_name }}'

์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋„๋ก Ansible 2.3์˜ ๊ฐœ๋ฐœ ๋ณ€๊ฒฝ ๋กœ๊ทธ ์—์„œ ๋‹ค์Œ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

'ํ˜„์žฌ python ์‹คํ–‰ ํŒŒ์ผ'์ด ํฌํ•จ๋œ 'ansible_playbook_python'์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Ansible์ด ํ‘œ์ค€ CLI(sys.executable ์ œํ•œ)๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋Š” ๋น„์–ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Mac์„ ์‚ฌ์šฉ ์ค‘์ด๊ณ  homebrew๋ฅผ ํ†ตํ•ด python์˜ ๋‹ค๋ฅธ ๋ณต์‚ฌ๋ณธ์„ ์„ค์น˜ํ–ˆ๋‹ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ boto๋ฅผ ์‹œ์Šคํ…œ python์— ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

sudo /usr/bin/python -m easy_install pip
sudo /usr/bin/python -m pip install boto

์ด๊ฒƒ์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!!

์ €๋Š” Arch Linux๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ธฐ๋ณธ๊ฐ’์€ python 3์ธ ๋ฐ˜๋ฉด Ansible์€ ๊ธฐ๋ณธ์ ์œผ๋กœ python 2๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ python ๋ฅผ ๋ช…์‹œ์ ์ธ python2 ๋ฐ”๊พธ๋ฉด @rsanchez ์˜ ์†”๋ฃจ์…˜์ด ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.
๊ฐ์‚ฌ ํ•ด์š”.

Mac์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒ์ด์ฌ ์‚ฌ๋ณธ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•œ @rsanchez ์˜ ์†”๋ฃจ์…˜ ์™ธ์—๋„, ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ "ansible_python_interpreter" ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•  ํŒŒ์ด์ฌ์„ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

/usr/bin/python ์˜ ๊ฒฝ๋กœ์— boto๊ฐ€ ์—†๊ณ  /usr/local/bin/python (homebrew๋ฅผ ํ†ตํ•ด ์„ค์น˜๋จ)์˜ python์— boto๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค(repl์— ์žˆ๋Š” ๋™์•ˆ "import boto" ์ž‘๋™). ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ธ๋ฒคํ† ๋ฆฌ ํŒŒ์ผ์—์„œ " /usr/local/bin/python "์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ " --extra-vars='ansible_python_interpreter=/usr/local/bin/python ' " ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…๋ น์ค„์—์„œ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด์™€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ netaddr .

Ansible์€ ๋‚ด ์ปดํ“จํ„ฐ์— ์„ค์น˜๋œ ์ ˆ๋Œ€์ ์œผ๋กœ ์ž„์˜์˜ python ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

ansible all -i ./.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory -m debug -a "var=ansible_playbook_python"
elastic0 | SUCCESS => {
    "ansible_playbook_python": "/usr/local/opt/python/bin/python2.7"
}

๊ทธ๋Ÿฐ ๋‹ค์Œ /usr/local/opt/python/bin/python2.7 -m pip install netaddr ํŠธ๋ฆญ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

PYTHON_HOME ๋ฐ PYTHON_PATH์™€ ๊ฐ™์€ python ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์ด ๋ฌธ์ œ์— ๋„์›€์ด ๋ ์ง€ ๊ถ๊ธˆํ•˜์ง€๋งŒ ์ด์— ๋Œ€ํ•ด ๋„ˆ๋ฌด ๋งŽ์ด ์•Œ์ง€๋Š” ๋ชปํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ˆœ์ง„ํ•˜๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ๊ฐ€๋Šฅํ•œ 2.3.1.0์„ ์œ„ํ•œ ๋„์ปค ๋นŒ๋“œ๋ฅผ ํ–ˆ์„ ๋•Œ

FROM python:2.17
RUN pip install --upgrade pip
RUN pip install boto3 botocore ansible>=2.3.1.0 awscli

์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค

fatal: [127.0.0.1]: FAILED! => {"changed": false, "failed": true, "msg": "boto3 and botocore are required for this module"}

ํฅ๋ฏธ๋กญ๊ตฐ. ๋ฌผ๋ก  ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋ฅผ ํ•˜๋“œ ์ฝ”๋”ฉ๋œ ๊ฒƒ์œผ๋กœ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด์ „์— ๋งํ–ˆ๋“ฏ์ด _๋‹ค๋ฅธ ํŒŒ์ด์ฌ ์•ฑ์—๋Š” ์ด ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค_. ๊ฐ€๋Šฅํ•œ ์ž‘์—…์„ ํ˜ธ์ŠคํŠธ๋กœ ๋งˆ์ƒฌ๋งํ•˜๋Š” ๋ฐฉ๋ฒ•( ssh ์—†๋Š” localhost )์€ ํŒŒ์ด์ฌ ์‹คํ–‰ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ํ•ด๋‹น ์‹คํ–‰ ํŒŒ์ผ์€ ํ™˜๊ฒฝ ์„ค์ •์„ ์กด์ค‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž ์‹œ ๋™์•ˆ ๋น„๋ˆ„ ์ƒ์ž์—์„œ ์ผ์–ด๋‚˜๊ธฐ ์œ„ํ•ด ํ‘œ์ค€ ๊ด€ํ–‰์— ๋Œ€ํ•œ ๋ฌด์ง€๋Š” ๋˜ํ’€์ด๋˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์„ธ์…˜ ํ† ํฐ(์—ญํ•  ์ˆ˜์ž„ ๋˜๋Š” mfa auth์šฉ)๊ณผ ํ•จ๊ป˜ AWS ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๋งŽ์€ ์–ด๋ ค์›€์„ ๊ฒช์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒƒ์— awscli ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด๋ฆฌ์„์€ ์ ์€ ๊ทธ๋“ค์ด ์ž๊ฒฉ ์ฆ๋ช…์„ ์ „๋‹ฌํ•˜๋Š” ์ž์ฒด 2/3 ์†”๋ฃจ์…˜์„ ์ฃผ์ž…ํ•˜๋Š” ๋Œ€์‹  boto๊ฐ€ ์ž๊ฒฉ ์ฆ๋ช… ํ™•์ธ์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ–ˆ๋‹ค๋ฉด ๋‘ ๊ฐ€์ง€ ์žฅ์ ์„ ๋ชจ๋‘ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋กœ์ปฌ ์ž๊ฒฉ ์ฆ๋ช…์€ ์›๊ฒฉ ํ˜ธ์ŠคํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์ง€๋งŒ 1) ์ž์ฒด ์ž๊ฒฉ ์ฆ๋ช…์ด ์—†์œผ๋ฉด ์–ด์จŒ๋“  ๊ณต์šฉ API์—๋งŒ ๋„๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์›๊ฒฉ์œผ๋กœ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ์š”์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋กœ์ปฌ์—์„œ ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 2) ๊ทธ๋“ค์ด ์ž์‹ ์˜ ์ž๊ฒฉ ์ฆ๋ช…์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ์•„๋งˆ๋„ ๊ทธ๊ฒƒ์„ ์„ ํƒํ•˜๊ณ  ์‹ถ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ด€๋ จ์ด ์—†์ง€๋งŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ  ๋”ฐ๋ผ์•ผ ํ•˜๋Š” ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ๋ชจ๋ฅด๊ณ  ์ง„ํ–‰ํ•˜๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ตฌํ˜„์ž์˜ ๋˜ ๋‹ค๋ฅธ ์˜ˆ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋งํ•˜๊ธฐ ์‰ฌ์šด, ๋‚˜๋Š” ๊ฐ€๋Šฅํ•œ ๊ตฌํ˜„ํ•˜๋ ค๊ณ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค : P

์ž„์‹œ ์ˆ˜์ •์œผ๋กœ ๋‚ด๊ฐ€ ํ•œ :

[local]
localhost              ansible_connection=local     ansible_python_interpreter=/usr/local/bin/python3

Mac OS ๊ธฐ๋ณธ๊ฐ’ /usr/bin/python ์•„๋‹Œ python3์— ํ†ตํ•ฉ๋œ pip, botocore ๋ฐ boto3์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ์ˆ˜์ •์œผ๋กœ ๋‚˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœsible_python_interpreter๋ฅผ ์„ค์ •ํ•˜๋ ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ์‡„๋œ ์ด์œ ๊ฐ€ ์žˆ๋‚˜์š”? 2.5 devel์—์„œ ์—ฌ์ „ํžˆ ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ํ•ต ์˜ต์…˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋งค๋ฒˆ ์ถ”๊ฐ€ ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด ์‚ฌ์ดํŠธ ํŒจํ‚ค์ง€์—์„œ ansible ์„ค์น˜๋ฅผ ํ•ดํ‚นํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์›€์ฐ”ํ•  ์ˆ˜ ์žˆ๊ณ , ๋‚˜์—๊ฒŒ ์†Œ๋ฆฌ์ง€๋ฅด์ง€ ์•Š๊ณ , ์Šค์Šค๋กœ ์œ„ํ—˜์„ ๊ฐ์ˆ˜ํ•˜๊ณ  ์ง„ํ–‰ํ•˜๋ฉฐ, ๋ช…์‹œ์ ์ด๊ฑฐ๋‚˜ ๋ฌต์‹œ์ ์ธ ๋ณด์ฆ์ด ์—†์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ์„ ์ฐพ์œผ๋ ค๋ฉด:

python -c "import ansible; print ansible.__path__"

๋ชจ๋“  python shebangs๋ฅผ ์ˆ˜์ •ํ•˜๋ ค๋ฉด:

 grep -lir "/usr/bin/python" /path/to/my/site-packages/ansible/* | xargs sed -i '' "s|/usr/bin/python|/usr/bin/env python|g"

๋‚˜๋Š” ์ด๊ฒƒ์„ํ•จ์œผ๋กœ์จ ์•ฝ๊ฐ„์˜ ์˜ค๋ฅ˜์— ์ง๋ฉดํ–ˆ๋‹ค
์น˜๋ช…์ : [localhost]: ์‹คํŒจ! => {"๋ณ€๊ฒฝ๋จ": false, "msg": "์ด ๋ชจ๋“ˆ์— boto๊ฐ€ ํ•„์š”ํ•จ"}
ํ•˜์ง€๋งŒ boto๋Š” ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค
๊ทธ๋ž˜์„œ ๋‚˜๋Š”์ด ๋ช…๋ น์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค (Mac์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—)
sudo /usr/bin/python -m pip ์„ค์น˜ boto
env/hosts์— ํ•œ ์ค„ ๋” ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
sible_pyhton_interpreter=/usr/bin/python
๊ทธ๋ž˜์„œ ๊ทธ ์ผ

๋ˆ„๊ตฌ๋‚˜ ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋ฅผ ์ œ์•ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ boto๋ฅผ ์„ค์น˜ํ•œ ๋‹ค์Œ ์ด ๋ช…๋ น์ด ํ•„์š”ํ•œ ์ด์œ ๋ฅผ ์ œ์•ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
sudo /usr/bin/python -m pip ์„ค์น˜ boto

@jawad486 , ์ €๋„ Mac์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ docker์—์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์—ฐ์Šตํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ชจ๋“ˆ์„ ์ฐพ๋Š” ๋ฌธ์ œ๋ฅผ ์™„์ „ํžˆ ํ”ผํ–ˆ์œผ๋ฉฐ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ฒ„์ „, ์ƒˆ ๋ฒ„์ „ ๋˜๋Š” ์ด์ „ ๋ฒ„์ „์„ ๋™์‹œ์— ์•ˆ์ •์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. brew, virtualenv ๋˜๋Š” ๋‚ด์žฅ Python์„ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋Š” ๋™์ผํ•˜๊ฒŒ ๋งํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ•„์š”์— ๋”ฐ๋ผ ~/.aws ๋ฐ ~/.ssh์— ๋งˆ์šดํŠธํ•ฉ๋‹ˆ๋‹ค.

@jawad846 ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ฒŒ์‹œ๋ฌผ์„ ๋‹ค์‹œ ์ฝ์œผ์‹ญ์‹œ์˜ค. ๋ฒ„๊ทธ์ž…๋‹ˆ๋‹ค. ํ™˜๊ฒฝ์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ๋Œ€์‹  python์— ๋Œ€ํ•œ ๊ฒฝ๋กœ๋ฅผ ์ž˜๋ชป ํ•˜๋“œ์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค.

ansible 2.5.1์—์„œ ์ด ๋ฌธ์ œ๋Š” ์—ฌ์ „ํžˆ ์ง€์†๋˜๋ฉฐ(๋ฆฌ๋ˆ…์Šค์—์„œ) ๋‹ค๋ฅธ ๋ชจ๋“ˆ์€ ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ ํŒŒ์ผ์˜ ansible_python_interpreter=python ์„ค์ •๊ณผ ํ•จ๊ป˜ @pauricthelodger ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉ {"changed": false, "msg": "boto is required for this module"} ์™€ ํ•จ๊ป˜ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“ˆ์€ ๋ชจ๋‘ ๊ฐ™์€ ์„ธํŠธ์˜ ์ผ๋ถ€์ด๊ณ  ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์ƒํ•˜๊ฒŒ ์›ƒ๊น๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ํŒŒ๊ณ ๋“ค๋ฉด ec2_vpc_net๊ณผ ec2_vpc_subnet์€ boto3๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ec2_vpc_igw๋Š” boto v2๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ virtualenv boto3 ๋ฐ boto2์— ๋ชจ๋‘ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ @benauthor s sed ์Šคํฌ๋ฆฝํŠธ์˜ ์ˆ˜์ •๋œ ๋ฒ„์ „์œผ๋กœ ๋ชจ๋“  shebang ํ—ค๋”๋ฅผ

grep -lir "/usr/bin/python" vp/local/lib/python2.7/site-packages/ansible/* | xargs sed -i "s@/usr/bin/python@/usr/bin/env python@g"

์—ฌ๊ธฐ์„œ vp๋Š” ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋กœ์ปฌ virtualenv ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.

2.5.2์—์„œ๋„ ์—ฌ์ „ํžˆ ๋ฌธ์ œ

@ timm088 ๋ฐฉ๊ธˆ ๋‚ด ๋งฅ๋ถ์—์„œ ๊ทธ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
"์–ด๋–ค ํŒŒ์ด์ฌ"์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค. ๊ฒฝ๋กœ๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ œ ๊ฒฝ์šฐ์—๋Š” "/usr/local/bin/python"์ด์—ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ ์ธ๋ฒคํ† ๋ฆฌ ํŒŒ์ผ๋กœ ์ด๋™ํ•˜์—ฌ ํ•ด๋‹น ๊ฒฝ๋กœ๋ฅผsible_python_interpreter์— ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค.
์ธ๋ฒคํ† ๋ฆฌ ํ˜ธ์ŠคํŠธ ํŒŒ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
[ํ˜„์ง€์˜]
๋กœ์ปฌ ํ˜ธ์ŠคํŠธ ansible_connection=๋กœ์ปฌ ansible_python_interpreter=/usr/local/bin/python/

์ง€๊ธˆ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Ansible ๊ฐœ๋ฐœ์ž๋Š” ์—ด๋ฆฐ ์ง€ 4์ผ ํ›„์— ์ž๋™์œผ๋กœ ๋‹ซํžˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง„ํ–‰ ์ค‘์ธ ํ† ๋ก ์„ ๋ณธ ์ ์ด ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์นจ๋‚ด ๋ฉ”์ผ๋ง ๋ฆฌ์ŠคํŠธ์— ์งˆ๋ฌธ์„ ๊ฒŒ์‹œํ•˜์—ฌ ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค.

https://groups.google.com/forum/#!topic/ansible -project/WCqmyKB46qQ

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰