ansible学习小记
2017-12-12 18:37
225 查看
明天游戏就要上线咯,由于之前的测试都是几台机器,纯手动部署就ok了,现在正式上线十多台机器,要是再一个个手动部署就gg了 ,所以需要一个自动化部署的工具,也就是使用ansbile. 话不多说,也就是看了几天,只能是略了解 ,重点是能把部署的工程自动化跑起来,至于方法好不好的问题,不在讨论范围了,毕竟也不是专业的运维人员
由于系统默认的python2.6是不行的,ansible需要python2.7以上的,所以先安装python 并且处理好yum的配置。
python2.7 下载
tar -zxvf Python-2.7.14.tgz
./configure
make all
make install
make clean
make distclean
建立软链接,使系统默认的python指向python2.7
mv /usr/bin/python /usr/bin/python2.6.6
ln -s /usr/local/bin/python2.7 /usr/bin/python
python -V – 这样就看到已经是python2.7了
因为yum是不兼容 Python 2.7的,所以yum不能正常工作,我们需要指定 yum 的Python版本
vim /usr/bin/yum
将头行指定的解释器 /usr/bin/python 修改为/usr/bin/python2.6.6
ansible安装有多种方式,在此是pip安装足够方便了(看到别人使用yum install epel-release -y
yum install ansible -y 不过我没试过哈)
安装pip 下载 可以直接右键网页另存为get-pip.py
安装
安装sshpass下载 这个是为了ssh直接不用密码确认登录的
到这一步就可以直接使用pip安装ansible啦 (看到别人也可以使用yum install epel-release -y
yum install ansible -y)
pip install ansible
这里ansible就安装完啦,是不是so easy~
然后在建立一个/etc/ansilbe/hosts文件进行测试咯 其实这是ansible默认读取的位置,后续可以加参数指定hosts文件的。
其中test_server为组,下面那些就是机器节点
组可以用多个
同一个机器节点,可以属于不同的组
根据以上配置,就可以开始测试啦
[root@localhost python]# ansible server -a ‘uptime’
192.168.0.231 | SUCCESS | rc=0 >>
18:54:26 up 2:51, 3 users, load average: 0.32, 0.26, 0.20
ansible all -m ping也有很多教程都是用这个测试的,all 就是代表所有组,在此可以换成test_server
ansible all -m command -a ‘uptime’:所有的机器执行uptime命令
ansible all -m command -a ‘chdir /data/ ls’:所有机器执行ls命令,ls的目录是/data
由于其是默认的模块,是以以上命令也可以简写成
ansible all -m shell -a ‘uptime’:所有的机器执行uptime命令
ansible all -m shell -a ‘ps -ef|grep nginx’:所有机器执行ps -ef|grep nginx命令
*
ansible all -m script -a /data/set.sh
ansible all -m ping
ansible all -m setup:获取所有机器的配置信息
ansible all -m setup –tree /path/to/save:获取机器的配置信息,并且写入到目录
ansible all -m yum -a ‘name=nc’:为所有机器yum一个nc
ansible all -m yum -a “name=nc state=present”:立刻为所有机器yum一个nc
调用此命令时候,不要yum中安装有ansilble机器(即ansible控制机),否则会报以下错误
192.168.0.231 | FAILED! => {
“changed”: false,
“msg”: “python2 bindings for rpm are needed for this module. python2 yum module is needed for this module”
}
原因估计ansible这样执行的,/usr/bin/python /usr/bin/yum XXXXX 所以只要是其他机器安装了ansible的,或者修改了/usr/bin/python的版本就会报上面这个错误
ansible all -m copy -a “src=/data/src.txt dest=/data/dest.txt”:将本地的
ansible all -m copy -a “src=/data/src.txt dest=/data”:将本地的
ansible all -m copy -a “src=/data/ dest=/data”:将本地的
调用此命令时候,不要将文件也copy到自己的机器(即ansible控制机),否则会报以下错误(尽管你已经安装了libselinux-python)
192.168.0.231 | FAILED! => {
“changed”: false,
“checksum”: “956f6c7150dcecba1103ecd14c42c5aab83bdd98”,
“msg”: “Aborting, target uses selinux but python bindings (libselinux-python) aren’t installed!”
}
* 运行指令
* 运行指令
* 运行指令
* hosts: 那些组的机器(即配置文件/etc/ansible/hosts里面的配置)
* remote_user:执行远程命令的用户
* tasks:任务,是一个列表
* name:任务名称
* yum:即模块名称,参考上面说的
* tags:标志,是一个列表,可配置多个
运行指令
运行指令
vars:定义变量
运行指令
通过在一个文件中定义变量,到处使用
vars_files:里面定义了两个变量zip_src_file,zip_dest_dir
由于ansible默认的gather_facts 收集主机信息是开的,当批量运行的时候会导致很慢,所以一般把它关掉,执行速度快些。
安装
首先安装,关于安装的问题提醒大家一般在网上搜的话,最好看下日期,一般选择比较接近现在的时间的文章参考比较好,我一开始就是按照某篇安装的ansible,步骤很多,现在知道那个全都是手动安装。结果是成功了,但是后来操作发现一个奇怪的错误,网上一堆也找不到解决,一番功夫发现有个人也遇到,结果他安装了2.0的版本发现就没有这个问题了!!!瞬间秒看了自己的安装的版本果然是1.7的老版本,于是怒删之,重新安装,话说有这一番折腾真是把人的耐心磨没了都,后来我是参考了公司另外一个人写的read_me才发现原来安装贼方便。。。由于系统默认的python2.6是不行的,ansible需要python2.7以上的,所以先安装python 并且处理好yum的配置。
python2.7 下载
tar -zxvf Python-2.7.14.tgz
./configure
make all
make install
make clean
make distclean
建立软链接,使系统默认的python指向python2.7
mv /usr/bin/python /usr/bin/python2.6.6
ln -s /usr/local/bin/python2.7 /usr/bin/python
python -V – 这样就看到已经是python2.7了
因为yum是不兼容 Python 2.7的,所以yum不能正常工作,我们需要指定 yum 的Python版本
vim /usr/bin/yum
将头行指定的解释器 /usr/bin/python 修改为/usr/bin/python2.6.6
ansible安装有多种方式,在此是pip安装足够方便了(看到别人使用yum install epel-release -y
yum install ansible -y 不过我没试过哈)
安装pip 下载 可以直接右键网页另存为get-pip.py
安装
python get-pip.py
安装sshpass下载 这个是为了ssh直接不用密码确认登录的
cd sshpass-1.06/
./configure
make && make install
到这一步就可以直接使用pip安装ansible啦 (看到别人也可以使用yum install epel-release -y
yum install ansible -y)
pip install ansible
这里ansible就安装完啦,是不是so easy~
然后在建立一个/etc/ansilbe/hosts文件进行测试咯 其实这是ansible默认读取的位置,后续可以加参数指定hosts文件的。
[test_server] 192.168.0.231 ansible_ssh_user=root ansible_ssh_pass=123456
其中test_server为组,下面那些就是机器节点
组可以用多个
同一个机器节点,可以属于不同的组
根据以上配置,就可以开始测试啦
[root@localhost python]# ansible server -a ‘uptime’
192.168.0.231 | SUCCESS | rc=0 >>
18:54:26 up 2:51, 3 users, load average: 0.32, 0.26, 0.20
ansible all -m ping也有很多教程都是用这个测试的,all 就是代表所有组,在此可以换成test_server
常用模块
command:执行某命令,不能用管道之类的东西,因为其不是用shell执行的,没有shell的那种特性
ansible all -m command -a ‘uptime’:所有的机器执行uptime命令
ansible all -m command -a ‘chdir /data/ ls’:所有机器执行ls命令,ls的目录是/data
由于其是默认的模块,是以以上命令也可以简写成
ansible all -a 'uptime'
shell:使用机器的shell执行
ansible all -m shell -a ‘uptime’:所有的机器执行uptime命令
ansible all -m shell -a ‘ps -ef|grep nginx’:所有机器执行ps -ef|grep nginx命令
*
script:到对象节点上执行本地脚本
ansible all -m script -a /data/set.sh
ping:看看机器能否ping通
ansible all -m ping
setup:获取机器的配置
ansible all -m setup:获取所有机器的配置信息
ansible all -m setup –tree /path/to/save:获取机器的配置信息,并且写入到目录
path/to/save中
yum:和机器的yum一样(不要给控制机也yum,否则会报错)
ansible all -m yum -a ‘name=nc’:为所有机器yum一个nc
ansible all -m yum -a “name=nc state=present”:立刻为所有机器yum一个nc
调用此命令时候,不要yum中安装有ansilble机器(即ansible控制机),否则会报以下错误
192.168.0.231 | FAILED! => {
“changed”: false,
“msg”: “python2 bindings for rpm are needed for this module. python2 yum module is needed for this module”
}
原因估计ansible这样执行的,/usr/bin/python /usr/bin/yum XXXXX 所以只要是其他机器安装了ansible的,或者修改了/usr/bin/python的版本就会报上面这个错误
copy:复制命令
ansible all -m copy -a “src=/data/src.txt dest=/data/dest.txt”:将本地的
/data/src.txt文件拷贝到所有机器的
/data/dest.txt文件中,此处,其会对比文件是否相同,若是相同,则比较文件是否有修改,若是没有修改,则不做事,若是修改,则覆盖之
ansible all -m copy -a “src=/data/src.txt dest=/data”:将本地的
/data/src.txt文件拷贝到所有机器的
/data/文件夹中
ansible all -m copy -a “src=/data/ dest=/data”:将本地的
/data/目录拷贝到所有机器的
/data/文件夹中(文件在路径/data/data/目录里面)
调用此命令时候,不要将文件也copy到自己的机器(即ansible控制机),否则会报以下错误(尽管你已经安装了libselinux-python)
192.168.0.231 | FAILED! => {
“changed”: false,
“checksum”: “956f6c7150dcecba1103ecd14c42c5aab83bdd98”,
“msg”: “Aborting, target uses selinux but python bindings (libselinux-python) aren’t installed!”
}
playbook
实例1
#dep.yml --- - name: dep hosts: all remote_user: root tasks: - name: install zip yum : name=zip tags: - tag1 - tag2 - name: install unzip yum : name=unzip - name: install nc yum : name=nc - name: install lrzsz yum : name=lrzsz
* 运行指令
ansible-playbook dep.yml:在所有的机器上面,执行所有tasks
* 运行指令
ansible-playbook dep.yml -i bitch.hosts:在所有的机器上面,执行所有tasks,其host文件不用默认的/etc/ansible/hosts,而是用bitch.hosts这个hosts文件
* 运行指令
ansible-playbook dep.yml --tags tag1,tag2:在所有的机器上面,执行带有tags标志为tag1或者tag2的tasks
* hosts: 那些组的机器(即配置文件/etc/ansible/hosts里面的配置)
* remote_user:执行远程命令的用户
* tasks:任务,是一个列表
* name:任务名称
* yum:即模块名称,参考上面说的
常用模块
* tags:标志,是一个列表,可配置多个
实例2
#include_example.yml --- - name: bitch hosts: all remote_user: root gather_facts: true tasks: - name: say hi tags: foo shell: echo "hi..." - include: dep.yml #此文件问实例1中的文件
运行指令
ansible-playbook include_example.yml:在所有的机器上面,执行所有tasks(包括dep.yml里面的)
实例3
#var_example.yml --- - name: copyfile hosts: server remote_user: root vars: - ddir: '/data/test_ansible' tasks: - name: depzip yum : name=zip - name: newdir file: path="{{ddir}}" state=directory
运行指令
ansible-playbook var_example.yml:在所有的机器上面,执行所有tasks
vars:定义变量
ddir,使用方法在
{{ddir}}
实例4
文件vars_files_conf.ymlzip_src_file: 'cn.zip' zip_dest_dir: '/data'
#scp_scheme.yml --- - name: scp_scheme hosts: all remote_user: root vars_files: - vars_files_conf.yml tasks: - name: scp scheme copy: src="{{zip_src_file}}" dest="{{dest_dir}}"
运行指令
ansible-playbook scp_scheme.yml:在所有的机器上面,执行所有tasks
通过在一个文件中定义变量,到处使用
vars_files:里面定义了两个变量zip_src_file,zip_dest_dir
由于ansible默认的gather_facts 收集主机信息是开的,当批量运行的时候会导致很慢,所以一般把它关掉,执行速度快些。
--- - name: dep_agent hosts: '{{host}}' user: root gather_facts: false vars_files: - var_conf.yml tasks: - name: tar unarchive: src={{agent_file}} dest={{dest_agent_dir}} - name: seq script: /data/ansible/set_host.sh {{host}} - name: start agent shell: "nohup /data/agent/bin/falcon-agent -c /data/agent/config/cfg.json > /dev/null 2>&1 &"
相关文章推荐
- ansible学习之--简单学习笔记1
- Shiro学习小记--身份验证得到principals
- 内存管理学习小记
- lua 学习小记 table下标
- Ansible学习之playbook(4)
- <模板><计算几何>半平面求交学习小记
- 网络流学习小记
- 火狐 poster学习小记
- Uiautomator 2.0之UiDevice新增API学习小记
- 实例学习ansible系列(4)常用模块之command/shell/raw
- ansible学习之--简单学习笔记3
- Android学习小记-----监听并保存传感器数据,让service后台运行(保持CPU运转
- 前端学习小记
- vuejs学习小记 单次插值
- java学习小记 输入输出 字符串 函数 高精度 进制转换
- LINUX下USB1.1设备学习小记(4)_uhci(2)
- ubuntu学习小记
- 学习小记(一)
- centos 零碎学习小记 1.
- PHP学习小记