ansible部署使用小结

ansible官方介绍定义为简单、免代理、强大的开源IT自动化工具。本人理解强大在于可实现批量系统配置、批量程序部署、批量命令运行等功能,而说简单则是仅仅需要在管理机上安装,只需要能够ssh被管理主机即可轻松实现管理,而且入门使用也是非常快捷方便。

官方文档地址:http://docs.ansible.com/
1 ansible源码安装
系统环境:ubuntu 14.04
ansible是基于python的框架,如果是使用源码包安装需要先安装好依赖包。
1、 python2.7

apt-get install python2.7

2、setuptools模块安装
如果没有wget,先“`apt-get install wget“`


wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-1.4.2.tar.gz
tar zxvf setuptools-1.4.2.tar.gz
cd setuptools-1.4.2;python setup.py install;easy_install --version

3、pycrypto模块安装

wget https://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.6.1.tar.gz

4、PyYAML模块安装
PyYAML是python下的YAML解析器,先安装YAML


wget http://pyyaml.org/download/libyaml/yaml-0.1.7.tar.gz
tar zxvf yaml-0.1.7.tar.gz
cd yaml-0.1.7
./configure
make&&make install
wget http://pyyaml.org/download/pyyaml/PyYAML-3.12.tar.gz
tar zxvf PyYAML-3.12.tar.gz
cd PyYAML-3.12
python setup.py install

5、Jinja2模块安装
首先安装MarkupSafe(是实现统一编码字符串的python库)


wget https://pypi.python.org/packages/c0/41/bae1254e0396c0cc8cf1751cb7d9afc90a602353695af5952530482c963f/MarkupSafe-0.23.tar.gz#md5=f5ab3deee4c37cd6a922fb81e730da6e
tar zxvf MarkupSafe-0.23.tar.gz
cd MarkupSafe-0.23
python setup.py install
pip installJinja2

若没有安装pip,请先更新系统,再安装pip


apt-get update
apt-get upgrade
apt-get install python-pip

6、安装paramiko


pip install paramiko

7、安装simplejson


wget https://pypi.python.org/packages/40/ad/52c1f3a562df3b210e8f165e1aa243a178c454ead65476a39fa3ce1847b6/simplejson-3.10.0.tar.gz#md5=426a9631d22851a7a970b1a677368b15
tar zxvf simplejson-3.10.0.tar.gz
cd simplejson-3.10.0
python setup.py install

8、安装ansible


pip install ansible

9、安装ansible源码包

apt-get安装
在ubuntu及其衍生版中,可以通过增加ppa源进行apt-get安装,具体如下:


$ sudo apt-get install software-properties-common
$ sudo apt-add-repository ppa:ansible/ansible
$ sudo apt-get update
$ sudo apt-get install ansible

2 SSH免密钥登录设置
在管理机生成公钥/私钥


# ssh-keygen -t rsa -P ''
## 写入信任文件(将/root/.ssh/id_rsa_storm1.pub分发到其他需要管理的服务器,并在所有服务器上执行如下指令):
# cat /root/.ssh/id_rsa_storm1.pub >> /root/.ssh/authorized_keys
# chmod 600 /root/.ssh/authorized_keys

3 测试
配置被管理主机,修改主机文件/etc/ansible/hosts


[test]
Ansible-c1 ansible_ssh_user=root
Ansible-c1可直接用ip地址。

root@Ansible-M:/etc/ansible# ansible test -a 'uptime'
Ansible-c1 | SUCCESS | rc=0 >>
11:59:31 up 20 min, 2 users, load average: 0.00, 0.01, 0.04

root@Ansible-M:/etc/ansible# ansible test -m ping
Ansible-c1 | SUCCESS => {
"changed": false,
"ping": "pong"
}

ansible基本命令


ansible -m -a
all或者*代表所有在/etc/ansible/hosts中定义的主机名
:冒号代表or
webservers:!phoenix代表在webservers中不在phoenix中
webservers:&staging表示交集

4 使用中一些问题
4.1 在使用copy模块时遇到编解码问题

在写入磁盘文件或通过套接字发送前,通常需要将Unicode数据转换为特定的编码;从磁盘文件读取或从套接字接收的字节序列,应转换为Unicode数据后再处理。
这些工作可以手工完成。例如:使用内置的open()方法打开文件后,将read()读取的str数据,按照文件编码格式进行decode();write()写入前,将Unicode数据按照文件编码格式进行encode(),或将其他编码格式的str数据先按该str的编码decode()转换为Unicode数据,再按照文件编码格式encode()。若直接将Unicode数据传入write()方法,Python将按照源代码文件声明的字符编码进行encode()后再写入。
解决方法:
可以先打包成压缩包然后再解压的方式规避。
4.2 文件权限问题


root@Ansible-M:~# ansible test -m shell -a 'ln -s /opt/nsfocus/lib/python/nsfocus /usr/lib/python2.7/dist-packages/nsfocus owner=root'
Ansible-c1 | UNREACHABLE! => {
"changed": false,
"msg": "Authentication or permission failure. In some cases, you may have been able to authenticate and did not have permissions on the remote directory. Consider changing the remote temp path in ansible.cfg to a path rooted in \"/tmp\". Failed command was: ( umask 77 && mkdir -p \"` echo $HOME/.ansible/tmp/ansible-tmp-1478760277.31-277614988932303 `\" && echo ansible-tmp-1478760277.31-277614988932303=\"` echo $HOME/.ansible/tmp/ansible-tmp-1478760277.31-277614988932303 `\" ), exited with result 1",
"unreachable": true
}

解决方法:修改ansible主机的ansible.cfg配置文件,如下:
[root@361way.com ~]# vim /etc/ansible/ansible.cfg
找到如下行:


remote_tmp = $HOME/.ansible/tmp

修改为


remote_tmp = /tmp/.ansible/tmp

4.3 执行.sh文件是出错
/bin/bash: /tmp/env.sh: /bin/bash^M: bad interpreter: No such file or directory
这是由于在windows下编辑的脚本,文本的默认格式是doc,需要转换为unix的格式。
解决方法:在vi编辑器中使用:set ff=unix,然后再使用:set ff查看。
或者直接使用doc2unix工具进行文件格式转换,ubuntu默认是没有安装这个工具的。
(1)安装tofrodos


sudo apt-get install tofrodos

实际上它安装了两个工具:todos(相当于unix2dos),和fromdos(相当于dos2unix)
安装完即可,现在你已经可以进行文本格式的转换啦。
比如:
todos Hello.txt (即unix2dos Hello.txt)
fromdos Hello.txt (即dos2unix Hello.txt)
(2)做一些优化
由于习惯了unix2dos和dos2unix的命令,可以把上面安装的两个工具链接成unix2dos 和dos2unix,或者仅仅是起个别名,并放在启动脚本里。
步骤:


ln -s /usr/bin/todos /usr/bin/unix2dos
ln -s /usr/bin/fromdos /usr/bin/dos2unix

或者在 ~/.bashrc里起个别名
vi ~/.bashrc
添加


alias unix2dos=todos alias dos2unix=fromdos

Spread the word. Share this post!

Meet The Author

Leave Comment