安装Ansible并创建目录
首先
在Mac上安装Ansible并使用Ansible创建在Ansible最佳实践中所述的目录。
前提 (Native Chinese)
OS X EL Capitan (版本 10.11.4)
Python 2.7.10
确认前提
确认Mac的版本
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.11.4
BuildVersion: 15E65
检查Python的版本
$ python --version
Python 2.7.10
安装Ansible
更改文件描述符的上限值
$ sudo launchctl limit maxfiles 1024 unlimited
Password:
$ sudo launchctl limit maxfiles
Password:
maxfiles 1024 10240
安装软件包管理软件
$ sudo easy_install pip
Searching for pip
Reading https://pypi.python.org/simple/pip/
Best match: pip 8.1.1
Downloading https://pypi.python.org/packages/source/p/pip/pip-8.1.1.tar.gz#md5=6b86f11841e89c8241d689956ba99ed7
Processing pip-8.1.1.tar.gz
Writing /tmp/easy_install-dxgLnF/pip-8.1.1/setup.cfg
Running pip-8.1.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-dxgLnF/pip-8.1.1/egg-dist-tmp-oBGMUE
warning: no previously-included files found matching '.coveragerc'
warning: no previously-included files found matching '.mailmap'
warning: no previously-included files found matching '.travis.yml'
warning: no previously-included files found matching '.landscape.yml'
warning: no previously-included files found matching 'pip/_vendor/Makefile'
warning: no previously-included files found matching 'tox.ini'
warning: no previously-included files found matching 'dev-requirements.txt'
warning: no previously-included files found matching 'appveyor.yml'
no previously-included directories found matching '.github'
no previously-included directories found matching '.travis'
no previously-included directories found matching 'docs/_build'
no previously-included directories found matching 'contrib'
no previously-included directories found matching 'tasks'
no previously-included directories found matching 'tests'
Adding pip 8.1.1 to easy-install.pth file
Installing pip script to /usr/local/bin
Installing pip2.7 script to /usr/local/bin
Installing pip2 script to /usr/local/bin
Installed /Library/Python/2.7/site-packages/pip-8.1.1-py2.7.egg
Processing dependencies for pip
Finished processing dependencies for pip
在中国安装Ansible
$ sudo pip install ansible
Collecting ansible
Downloading ansible-2.0.1.0.tar.gz (1.5MB)
100% |████████████████████████████████| 1.5MB 373kB/s
Collecting paramiko (from ansible)
Downloading paramiko-1.16.0-py2.py3-none-any.whl (169kB)
100% |████████████████████████████████| 174kB 430kB/s
Collecting jinja2 (from ansible)
Downloading Jinja2-2.8-py2.py3-none-any.whl (263kB)
100% |████████████████████████████████| 266kB 621kB/s
Collecting PyYAML (from ansible)
Downloading PyYAML-3.11.tar.gz (248kB)
100% |████████████████████████████████| 256kB 2.5MB/s
Requirement already satisfied (use --upgrade to upgrade): setuptools in /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python (from ansible)
Collecting pycrypto>=2.6 (from ansible)
Downloading pycrypto-2.6.1.tar.gz (446kB)
100% |████████████████████████████████| 450kB 1.4MB/s
Collecting ecdsa>=0.11 (from paramiko->ansible)
Downloading ecdsa-0.13-py2.py3-none-any.whl (86kB)
100% |████████████████████████████████| 92kB 3.2MB/s
Collecting MarkupSafe (from jinja2->ansible)
Downloading MarkupSafe-0.23.tar.gz
Installing collected packages: ecdsa, pycrypto, paramiko, MarkupSafe, jinja2, PyYAML, ansible
Running setup.py install for pycrypto ... done
Running setup.py install for MarkupSafe ... done
Running setup.py install for PyYAML ... done
Running setup.py install for ansible ... done
Successfully installed MarkupSafe-0.23 PyYAML-3.11 ansible-2.0.1.0 ecdsa-0.13 jinja2-2.8 paramiko-1.16.0 pycrypto-2.6.1
检查 Ansible 的版本
$ ansible --version
ansible 2.0.1.0
config file =
configured module search path = Default w/o overrides
在本地创建一个目录
根据最佳实践,在ansible中创建一个本地目录`with_items`,并进行记录。
在一个合适的目录中创建init_setup.yml。
- hosts: localhost
connection: local
tasks:
- name: "Create Directory"
file:
path={{item.path}}
state=directory
with_items:
- path: production
- path: staging
- path: group_vars/group1
- path: host_vars/group1
- path: library/
- path: filter_plugins/
- path: roles/common/tasks/
- path: roles/common/handlers/
- path: roles/common/templates/
- path: roles/common/files/
- path: roles/common/vars/
- path: roles/common/defaults/
- path: roles/common/meta/
使用File模块创建目录。
将state选项指定为directory。
将path选项指定为{{item.path}},并将要创建的目录名指定为变量path的with_items之后的值。
通过这样的编写方式,可以使用file模块对with_items中指定的变量path的值进行重复处理。
使用ansible-playbook命令创建目录。
$ ansible-playbook init_setup.yml
[WARNING]: provided hosts list is empty, only localhost is available
PLAY ***************************************************************************
TASK [setup] *******************************************************************
ok: [localhost]
TASK [Create Directory] ********************************************************
changed: [localhost] => (item={u'path': u'production'})
changed: [localhost] => (item={u'path': u'staging'})
changed: [localhost] => (item={u'path': u'group_vars/group1'})
changed: [localhost] => (item={u'path': u'host_vars/group1'})
changed: [localhost] => (item={u'path': u'library/'})
changed: [localhost] => (item={u'path': u'filter_plugins/'})
changed: [localhost] => (item={u'path': u'roles/common/tasks/'})
changed: [localhost] => (item={u'path': u'roles/common/handlers/'})
changed: [localhost] => (item={u'path': u'roles/common/templates/'})
changed: [localhost] => (item={u'path': u'roles/common/files/'})
changed: [localhost] => (item={u'path': u'roles/common/vars/'})
changed: [localhost] => (item={u'path': u'roles/common/defaults/'})
changed: [localhost] => (item={u'path': u'roles/common/meta/'})
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0
一般情况下,文字会变成绿色。
有更改的部分将变成黄色文字。
如果出现错误,将会变成红色。
在”PLAY RECAP”中,每个任务都会显示是否有变更。
如果再次运行ansible-playbook命令,结果将变为”changed=0″。
总结
这样一来,我们就准备好了在ansible中玩耍的前提条件。接下来,我想要编写创建EC2实例的代码。