LoginSignup
8
10

More than 1 year has passed since last update.

Ansibleの仕組み | なぜ Ansible はリモートサーバーにも python を必要とするのか

Last updated at Posted at 2018-07-15

答え

リモートサーバーに実行プログラムを送り込む仕組みだから。
そのプログラム=モジュールが主にpythonで書かれているから。(*)

EFFICIENT ARCHITECTURE
Ansible works by connecting to your nodes and pushing out small programs, called "Ansible modules" to them.

How Ansible Works | Ansible.com

試してみよう

ansible コマンドを実行

$ ansible -i inventory.txt example -m 'shell' -a 'sleep 1 && ls -la' -vvvv
  • ここでは shell モジュールを使って、リモートサーバーで bash コマンドを実行してみる ( sleep 1 && ls -la )
  • 冗長な出力 -vvvv 指定をして中で何が起きているのかを見る
  • sleep 1 が終わる前に Command+C などで無理やり処理を中断させてみよう

ansible コマンドの実行結果

冗長 ( verbose ) な出力を見ると、リモートサーバーにpythonスクリプトが設置されているのが分かる。

echo /root/.ansible/tmp/ansible-tmp-1531625640.49-42645862347596/command.py ( 抜粋 )

ansible 2.6.1
  config file = /Users/yuma/.ansible.cfg
  configured module search path = [u'/Users/yuma/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/Cellar/ansible/2.6.1/libexec/lib/python2.7/site-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 2.7.15 (default, Jun 19 2018, 20:16:43) [GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.2)]
Using /Users/yuma/.ansible.cfg as config file
setting up inventory plugins
Set default localhost to localhost
Parsed /Users/yuma/projects/study/ansible/inventories/inventory.txt inventory source with ini plugin
Loading callback plugin minimal of type stdout, v2.0 from /usr/local/Cellar/ansible/2.6.1/libexec/lib/python2.7/site-packages/ansible/plugins/callback/minimal.pyc
META: ran handlers
<localhost> ESTABLISH SSH CONNECTION FOR USER: root
<localhost> SSH: EXEC sshpass -d46 ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o Port=2222 -o User=root -o ConnectTimeout=10 -o ControlPath=/Users/yuma/.ansible/cp/e8bf07bfa6 localhost '/bin/sh -c '"'"'echo ~root && sleep 0'"'"''
<localhost> (0, '/root\n', 'OpenSSH_7.6p1, LibreSSL 2.6.2\r\ndebug1: Reading configuration data /Users/yuma/.ssh/config\r\ndebug1: Reading configuration data /etc/ssh/ssh_config\r\ndebug1: /etc/ssh/ssh_config line 48: Applying options for *\r\ndebug1: auto-mux: Trying existing master\r\ndebug2: fd 3 setting O_NONBLOCK\r\ndebug2: mux_client_hello_exchange: master version 4\r\ndebug3: mux_client_forwards: request forwardings: 0 local, 0 remote\r\ndebug3: mux_client_request_session: entering\r\ndebug3: mux_client_request_alive: entering\r\ndebug3: mux_client_request_alive: done pid = 44111\r\ndebug3: mux_client_request_session: session request sent\r\ndebug1: mux_client_request_session: master session id: 2\r\ndebug3: mux_client_read_packet: read header failed: Broken pipe\r\ndebug2: Received exit status from master 0\r\n')
<localhost> ESTABLISH SSH CONNECTION FOR USER: root
<localhost> SSH: EXEC sshpass -d46 ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o Port=2222 -o User=root -o ConnectTimeout=10 -o ControlPath=/Users/yuma/.ansible/cp/e8bf07bfa6 localhost '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /root/.ansible/tmp/ansible-tmp-1531625640.
6 `" && echo ansible-tmp-1531625640.49-42645862347596="` echo /root/.ansible/tmp/ansible-tmp-1531625640.49-42645862347596 `" ) && sleep 0'"'"''
<localhost> (0, 'ansible-tmp-1531625640.49-42645862347596=/root/.ansible/tmp/ansible-tmp-1531625640.49-42645862347596\n', 'OpenSSH_7.6p1, LibreSSL 2.6.2\r\ndebug1: Reading configuration data /Users/yuma/.ssh/config\r\ndebug1: Reading configuration data /etc/ssh/ssh_config\r\ndebug1: /etc/ssh/ssh_config line 48: Applying options for *\r\ndebug1: auto-mux: Trying existing master\r\ndebug2: fd 3 setting O_NONBLOCK\r\ndebug2: mux_client_hello_exchange: master version 4\r\ndebug3: mux_client_forwards: request forwardings: 0 local, 0 remote\r\ndebug3: mux_client_request_session: entering\r\ndebug3: mux_client_request_alive: entering\r\ndebug3: mux_client_request_alive: done pid = 44111\r\ndebug3: mux_client_request_session: session request sent\r\ndebug1: mux_client_request_session: master session id: 2\r\ndebug3: mux_client_read_packet: read header failed: Broken pipe\r\ndebug2: Received exit status from master 0\r\n')
Using module file /usr/local/Cellar/ansible/2.6.1/libexec/lib/python2.7/site-packages/ansible/modules/commands/command.py
<localhost> PUT /Users/yuma/.ansible/tmp/ansible-local-44674REhnew/tmp9m61Sh TO /root/.ansible/tmp/ansible-tmp-1531625640.49-42645862347596/command.py
<localhost> SSH: EXEC sshpass -d46 sftp -o BatchMode=no -b - -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o Port=2222 -o User=root -o ConnectTimeout=10 -o ControlPath=/Users/yuma/.ansible/cp/e8bf07bfa6 '[localhost]'
<localhost> (0, 'sftp> put /Users/yuma/.ansible/tmp/ansible-local-44674REhnew/tmp9m61Sh /root/.ansible/tmp/ansible-tmp-1531625640.49-42645862347596/command.py\n', 'OpenSSH_7.6p1, LibreSSL 2.6.2\r\ndebug1: Reading configuration data /Users/yuma/.ssh/config\r\ndebug1: Reading configuration data /etc/ssh/ssh_config\r\ndebug1: /etc/ssh/ssh_config line 48: Applying options for *\r\ndebug1: auto-mux: Trying existing master\r\ndebug2: fd 3 setting O_NONBLOCK\r\ndebug2: mux_client_hello_exchange: master version 4\r\ndebug3: mux_client_forwards: request forwardings: 0 local, 0 remote\r\ndebug3: mux_client_request_session: entering\r\ndebug3: mux_client_request_alive: entering\r\ndebug3: mux_client_request_alive: done pid = 44111\r\ndebug3: mux_client_request_session: session request sent\r\ndebug1: mux_client_request_session: master session id: 2\r\ndebug2: Remote version: 3\r\ndebug2: Server supports extension "posix-rename@openssh.com" revision 1\r\ndebug2: Server supports extension "statvfs@openssh.com" revision 2\r\ndebug2: Server supports extension "fstatvfs@openssh.com" revision 2\r\ndebug2: Server supports extension "hardlink@openssh.com" revision 1\r\ndebug2: Server supports extension "fsync@openssh.com" revision 1\r\ndebug3: Sent message fd 34 T:16 I:1\r\ndebug3: SSH_FXP_REALPATH . -> /root size 0\r\ndebug3: Looking up /Users/yuma/.ansible/tmp/ansible-local-44674REhnew/tmp9m61Sh\r\ndebug3: Sent message fd 34 T:17 I:2\r\ndebug3: Received stat reply T:101 I:2\r\ndebug1: Couldn\'t stat remote file: No such file or directory\r\ndebug3: Sent message SSH2_FXP_OPEN I:3 P:/root/.ansible/tmp/ansible-tmp-1531625640.49-42645862347596/command.py\r\ndebug3: Sent message SSH2_FXP_WRITE I:4 O:0 S:32768\r\ndebug3: SSH2_FXP_STATUS 0\r\ndebug3: In write loop, ack for 4 32768 bytes at 0\r\ndebug3: Sent message SSH2_FXP_WRITE I:5 O:32768 S:32768\r\ndebug3: Sent message SSH2_FXP_WRITE I:6 O:65536 S:3360\r\ndebug3: SSH2_FXP_STATUS 0\r\ndebug3: In write loop, ack for 5 32768 bytes at 32768\r\ndebug3: SSH2_FXP_STATUS 0\r\ndebug3: In write loop, ack for 6 3360 bytes at 65536\r\ndebug3: Sent message SSH2_FXP_CLOSE I:4\r\ndebug3: SSH2_FXP_STATUS 0\r\ndebug3: mux_client_read_packet: read header failed: Broken pipe\r\ndebug2: Received exit status from master 0\r\n')
<localhost> ESTABLISH SSH CONNECTION FOR USER: root
<localhost> SSH: EXEC sshpass -d46 ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o Port=2222 -o User=root -o ConnectTimeout=10 -o ControlPath=/Users/yuma/.ansible/cp/e8bf07bfa6 localhost '/bin/sh -c '"'"'chmod u+x /root/.ansible/tmp/ansible-tmp-1531625640.49-42645862347596/ /root/.ansible/tmp/ansible-tmp-1531625640.49-42645862347596/command.py && sleep 0'"'"''
<localhost> (0, '', 'OpenSSH_7.6p1, LibreSSL 2.6.2\r\ndebug1: Reading configuration data /Users/yuma/.ssh/config\r\ndebug1: Reading configuration data /etc/ssh/ssh_config\r\ndebug1: /etc/ssh/ssh_config line 48: Applying options for *\r\ndebug1: auto-mux: Trying existing master\r\ndebug2: fd 3 setting O_NONBLOCK\r\ndebug2: mux_client_hello_exchange: master version 4\r\ndebug3: mux_client_forwards: request forwardings: 0 local, 0 remote\r\ndebug3: mux_client_request_session: entering\r\ndebug3: mux_client_request_alive: entering\r\ndebug3: mux_client_request_alive: done pid = 44111\r\ndebug3: mux_client_request_session: session request sent\r\ndebug1: mux_client_request_session: master session id: 2\r\ndebug3: mux_client_read_packet: read header failed: Broken pipe\r\ndebug2: Received exit status from master 0\r\n')
<localhost> ESTABLISH SSH CONNECTION FOR USER: root
<localhost> SSH: EXEC sshpass -d46 ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o Port=2222 -o User=root -o ConnectTimeout=10 -o ControlPath=/Users/yuma/.ansible/cp/e8bf07bfa6 -tt localhost '/bin/sh -c '"'"'/usr/bin/python /root/.ansible/tmp/ansible-tmp-1531625640.49-42645862347596/command.py && sleep 0'"'"''
^C [ERROR]: User interrupted execution

リモートサーバーでpythonスクリプトの中身を見てみる

root@539a7ca22f48:~# cat .ansible/tmp/ansible-tmp-1531625640.49-42645862347596/command.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
ANSIBALLZ_WRAPPER = True # For test-module script to tell this is a ANSIBALLZ_WRAPPER
import os
import os.path
import sys
import __main__
scriptdir = None
try:
    scriptdir = os.path.dirname(os.path.realpath(__main__.__file__))
except (AttributeError, OSError):
    pass
if scriptdir is not None:
    sys.path = [p for p in sys.path if p != scriptdir]
import base64
import shutil
import zipfile
import tempfile
import subprocess
if sys.version_info < (3,):
    bytes = str
    PY3 = False
else:
    unicode = str
    PY3 = True
try:
    from io import BytesIO as IOStream
except ImportError:
    from StringIO import StringIO as IOStream
ZIPDATA = """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"""
def invoke_module(module, modlib_path, json_params):
    pythonpath = os.environ.get('PYTHONPATH')
    if pythonpath:
        os.environ['PYTHONPATH'] = ':'.join((modlib_path, pythonpath))
    else:
        os.environ['PYTHONPATH'] = modlib_path
    p = subprocess.Popen(['/usr/bin/python', module], env=os.environ, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
    (stdout, stderr) = p.communicate(json_params)
    if not isinstance(stderr, (bytes, unicode)):
        stderr = stderr.read()
    if not isinstance(stdout, (bytes, unicode)):
        stdout = stdout.read()
    if PY3:
        sys.stderr.buffer.write(stderr)
        sys.stdout.buffer.write(stdout)
    else:
        sys.stderr.write(stderr)
        sys.stdout.write(stdout)
    return p.returncode
def debug(command, zipped_mod, json_params):
    basedir = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'debug_dir')
    args_path = os.path.join(basedir, 'args')
    script_path = os.path.join(basedir, 'ansible_module_command.py')
    if command == 'explode':
        z = zipfile.ZipFile(zipped_mod)
        for filename in z.namelist():
            if filename.startswith('/'):
                raise Exception('Something wrong with this module zip file: should not contain absolute paths')
            dest_filename = os.path.join(basedir, filename)
            if dest_filename.endswith(os.path.sep) and not os.path.exists(dest_filename):
                os.makedirs(dest_filename)
            else:
                directory = os.path.dirname(dest_filename)
                if not os.path.exists(directory):
                    os.makedirs(directory)
                f = open(dest_filename, 'wb')
                f.write(z.read(filename))
                f.close()
        f = open(args_path, 'wb')
        f.write(json_params)
        f.close()
        print('Module expanded into:')
        print('%s' % basedir)
        exitcode = 0
    elif command == 'execute':
        pythonpath = os.environ.get('PYTHONPATH')
        if pythonpath:
            os.environ['PYTHONPATH'] = ':'.join((basedir, pythonpath))
        else:
            os.environ['PYTHONPATH'] = basedir
        p = subprocess.Popen(['/usr/bin/python', script_path, args_path],
                env=os.environ, shell=False, stdout=subprocess.PIPE,
                stderr=subprocess.PIPE, stdin=subprocess.PIPE)
        (stdout, stderr) = p.communicate()
        if not isinstance(stderr, (bytes, unicode)):
            stderr = stderr.read()
        if not isinstance(stdout, (bytes, unicode)):
            stdout = stdout.read()
        if PY3:
            sys.stderr.buffer.write(stderr)
            sys.stdout.buffer.write(stdout)
        else:
            sys.stderr.write(stderr)
            sys.stdout.write(stdout)
        return p.returncode
    elif command == 'excommunicate':
        sys.argv = ['command', args_path]
        sys.path.insert(0, basedir)
        from ansible_module_command import main
        main()
        print('WARNING: Module returned to wrapper instead of exiting')
        sys.exit(1)
    else:
        print('WARNING: Unknown debug command.  Doing nothing.')
        exitcode = 0
    return exitcode
if __name__ == '__main__':
    ANSIBALLZ_PARAMS = '{"ANSIBLE_MODULE_ARGS": {"_ansible_version": "2.6.1", "_ansible_socket": null, "_ansible_remote_tmp": "~/.ansible/tmp", "_uses_shell": true, "_ansible_no_log": false, "_ansible_module_name": "command", "_raw_params": "sleep 2 && ls -la", "_ansible_verbosity": 4, "_ansible_keep_remote_files": false, "_ansible_syslog_facility": "LOG_USER", "warn": true, "_ansible_selinux_special_fs": ["fuse", "nfs", "vboxsf", "ramfs", "9p"], "_ansible_diff": false, "_ansible_debug": false, "_ansible_shell_executable": "/bin/sh", "_ansible_check_mode": false, "_ansible_tmpdir": "/root/.ansible/tmp/ansible-tmp-1531625640.49-42645862347596/"}}'
    if PY3:
        ANSIBALLZ_PARAMS = ANSIBALLZ_PARAMS.encode('utf-8')
    try:
        temp_path = tempfile.mkdtemp(prefix='ansible_')
        zipped_mod = os.path.join(temp_path, 'ansible_modlib.zip')
        modlib = open(zipped_mod, 'wb')
        modlib.write(base64.b64decode(ZIPDATA))
        modlib.close()
        if len(sys.argv) == 2:
            exitcode = debug(sys.argv[1], zipped_mod, ANSIBALLZ_PARAMS)
        else:
            z = zipfile.ZipFile(zipped_mod, mode='r')
            module = os.path.join(temp_path, 'ansible_module_command.py')
            f = open(module, 'wb')
            f.write(z.read('ansible_module_command.py'))
            f.close()
            z = zipfile.ZipFile(zipped_mod, mode='a')
            sitecustomize = u'import sys\nsys.path.insert(0,"%s")\n' %  zipped_mod
            sitecustomize = sitecustomize.encode('utf-8')
            zinfo = zipfile.ZipInfo()
            zinfo.filename = 'sitecustomize.py'
            zinfo.date_time = ( 2018, 7, 15, 3, 34, 0)
            z.writestr(zinfo, sitecustomize)
            z.close()
            exitcode = invoke_module(module, zipped_mod, ANSIBALLZ_PARAMS)
    finally:
        try:
            shutil.rmtree(temp_path)
        except (NameError, OSError):
            pass
    sys.exit(exitcode)

リモートサーバーでpythonスクリプトを直接叩いてみる

普通に動作してJSONが返ってくる。

( ansible モジュールに期待されるのは JSON の結果なので、ただしい動作 )

root@539a7ca22f48:~# python .ansible/tmp/ansible-tmp-1531625640.49-42645862347596/command.py

{"changed": true, "end": "2018-07-15 03:41:12.761425", "stdout": "total 32\ndrwx------ 1 root root 4096 Jul 15 03:30 .\ndrwxr-xr-x 1 root root 4096 Jul 15 02:55 ..\ndrwx------ 3 root root 4096 Jul 15 03:10 .ansible\nrw------- 1 root root  125 Jul 15 02:58 .bash_history\n-rw-r--r-- 1 root root 3106 Oct 22  2015 .bashrc\ndrwx------ 2 root root 4096 Jul 15 02:56 .cache\n-rw-r--r-- 1 root root  148 Aug 17  2015 .profile", "cmd": "sleep 2 && ls -la", "rc": 0, "start": "2018-07-15 03:41:10.751784", "stderr": "", "delta": "0:00:02.009641", "invocation": {"module_args": {"warn": true, "executable": null, "_uses_shell": true, "_raw_params": "sleep 2 && ls -la", "removes": null, "argv": null, "creates": null, "chdir": null, "stdin": null}}}
root@539a7ca22f48:~# python .ansible/tmp/ansible-tmp-1531625640.49-42645862347596/command.py

{"changed": true, "end": "2018-07-15 03:41:15.970431", "stdout": "total 32\ndrwx------ 1 root root 4096 Jul 15 03:30 .\ndrwxr-xr-x 1 root root 4096 Jul 15 02:55 ..\ndrwx------ 3 root root 4096 Jul 15 03:10 .ansible\n-rw------- 1 root root  125 Jul 15 02:58 .bash_history\n-rw-r--r-- 1 root root 3106 Oct 22  2015 .bashrc\ndrwx------ 2 root root 4096 Jul 15 02:56 .cache\n-rw-r--r-- 1 root root  148 Aug 17  2015 .profile", "cmd": "sleep 2 && ls -la", "rc": 0, "start": "2018-07-15 03:41:13.958058", "stderr": "", "delta": "0:00:02.012373", "invocation": {"module_args": {"warn": true, "executable": null, "_uses_shell": true, "_raw_params": "sleep 2 && ls -la", "removes": null, "argv": null, "creates": null, "chdir": null, "stdin": null}}}

JSON の結果に ls -la コマンドの結果が含まれているのが分かる

total 32
drwx------ 1 root root 4096 Jul 15 03:30 .
drwxr-xr-x 1 root root 4096 Jul 15 02:55 ..
drwx------ 3 root root 4096 Jul 15 03:10 .ansible
-rw------- 1 root root  125 Jul 15 02:58 .bash_history
-rw-r--r-- 1 root root 3106 Oct 22  2015 .bashrc
drwx------ 2 root root 4096 Jul 15 02:56 .cache
-rw-r--r-- 1 root root  148 Aug 17  2015 .profile

bash コマンドはどこに消えた?

リモートサーバーに実行させようとした bash コマンド ( sleep 1 && ls -la ) は python スクリプトには見つからない。

どうやらZIPデータ ZIPDATA として固められている模様。(詳しくは未調査)

注釈

*ただし実行プログラムを送り込まない形式のモジュールも存在する。

Executes a low-down and dirty SSH command, not going through the module subsystem.

raw - Executes a low-down and dirty SSH command — Ansible Documentation

参照: Ansible 「で」 python 「を」 リモートーサーバーにインストールする方法 - Qiita

*確かにpythonで書かれているモジュールが多いが、特に言語は問わない模様。

EXTEND ANSIBLE: MODULES, PLUGINS AND API
Should you want to write your own, Ansible modules can be written in any language that can return JSON (Ruby, Python, bash, etc).

環境

  • ansible 2.6.1

リンク

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

Twitter

8
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10