博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自动化运维之Ansible的安装与简单入门命令
阅读量:6897 次
发布时间:2019-06-27

本文共 3050 字,大约阅读时间需要 10 分钟。

早就听说ansible简单方便,但是一直没有去认真了解过,想要了解ansible的冲动是因为需要在100多台服务器上分发一个脚本,实在不想一台一台登陆上去操作。简单翻了一下文档,发现ansible上手挺容易的。最心水的还是所有的操作和配置都可以在管理结点完成,不需要在被管理结点安装agent,唯一的要求可能就是python版本了。管理结点的python要是2.6及以上,被管理结点的python版本如果是2.4需要安装simplejson包。

先从安装说起吧,如果不嫌弃linux系统自带ansible包版本低的话,可以直接安装:

yum install ansible -y

也可以在github上clone一个新版本来安装,步骤如下

git clone git://github.com/ansible/ansible.git --recursive

cd ./ansible

source ./hacking/env-setup

easy_install pip

pip install paramiko PyYAML Jinja2 httplib2 six

echo "127.0.0.1" > ~/ansible_hosts

export ANSIBLE_INVENTORY=~/ansible_hosts

执行你的第一条命令

在ansible_hosts在再加入一个被管理结点:

cat ansible_hosts 

127.0.0.1

10.32.1.206

ansible all -m ping --ask-pass

SSH password: 

127.0.0.1 | SUCCESS => {

    "changed": false, 

    "ping": "pong"

}

10.32.1.206 | SUCCESS => {

    "changed": false, 

    "ping": "pong"

}

可以通过将管理节点的公钥添加到被管理结点的authorized_keys中,就不需要--ask-pass来输入密码了。

先介绍几个简单常用的ad-hoc命令吧,什么是ad-hoc呢?其实这是相对于ansible playbook来说的,ad-hoc就相当于在命令行敲shell命令,ansible playbook就相当于你执行一个shell脚本。总之简单的任务交给ad-hoc,复杂的任务交给playbook.

ansible的几个常用参数:

-u username          #指定ssh连接的用户名,即执行后面命令的用户,默认是当前用户

-i inventory_file    #指定所使用的inventory文件的位置,默认为/etc/ansible/hosts,此处测试了/root/ansible_hosts

-m module            #指定使用的模块,默认为command

-f 10                #指定并发数,并发量大的时候,提高该值

--sudo [-k]          #当需要root权限执行的化,-k参数用来输入root密码

1,查看被管理结点的负载

# ansible all -m command -a 'uptime' 

all表示/root/ansible_hosts文件中的所有结点,可以在文件中分组,[group1],group1表示组名,上面的命令如果只想在group1中的结点执行则为:ansible group1 -m command -a 'uptime' --ask-pass

2,在被管理结点执行shell脚本

先来一个最简单的脚本:

# cat t1.sh 

#!/bin/bash

ls -l /root/

# ansible all -m script -a '/root/t1.sh' 

当然你可以编写可以实现复杂功能的脚本,这也就是为什么网上有人不同意复杂的任务用playbook来做,用shell写个脚本多简单呀,YAML都可以不用学了。

3,拷贝文件和目录

拷贝目录和文件的命令都是一样的。可以自行指定文件和目录的权限和属主

拷贝文件:

# ansible all -m copy -a "src=/root/test_dir dest=/tmp/ mode=777 owner=root" 

拷贝文件:

ansible all -m copy -a "src=/etc/fstab dest=/tmp/ mode=444 owner=root" 

4,删除文件和目录

拷贝目录和文件的命令都是一样的,指定要删除的文件的路径就可以了,如果路径是目录的话,会将该目录下面所有的文件都删除掉

ansible all -m file -a "path='/tmp/fstab' state=absent" 

ansible all -m file -a "path='/tmp/test_dir' state=absent" 

5,软件包管理

# ansible all -m yum -a "name=tree state=present"   

这条命令的意思是如果tree这个包没有安装,则安装。

安装完后我们可以测试一下命令是否可用

# tree test_dir/

test_dir/

└── t.txt

0 directories, 1 file

# ansible all -m yum -a "name=tree state=absent" --ask-pass

这个命令的意思是确认系统没有安装tree,如果有则卸载,我们执行完命令后再敲tree就报错了。

[root@centos ~]# tree

-bash: /usr/bin/tree: No such file or directory

5,创建用户和用户组

# ansible all -m user -a "name=ansible_test groups=root,zabbix append=yes state=present" 

创建ansible_test用户,并将其加入root,zabbix组

# id ansible_test

uid=503(ansible_test) gid=504(ansible_test) groups=504(ansible_test),0(root),503(zabbix)

6,管理服务

# ansible all -m service -a "name=mysqld state=stopped" 

停mysqld服务

# ansible all -m service -a "name=mysqld state=started" 

启mysqld服务

# ansible all -m service -a "name=mysqld state=restarted" 

重启mysqld服务

ansible参考资料:

ansible-doc

模块索引  http://docs.ansible.com/ansible/list_of_all_modules.html

角色仓库  https://galaxy.ansible.com

谷歌论坛  https://groups.google.com/forum/#!forum/ansible-project

本文转自 emma_cql 51CTO博客,原文链接:http://blog.51cto.com/chenql/1889184

转载地址:http://dxcdl.baihongyu.com/

你可能感兴趣的文章
LAMP_apache结合php_4
查看>>
Linux+Nginx+Apache+Atlas+Mysql+Php+Redis 分部式部署详细版
查看>>
js form 表单的提交
查看>>
linux笔记基础
查看>>
Linux 高可用(HA)集群基本概念
查看>>
linux下搭建HTTP网站服务器和网站日志分析工具AWStats的使用
查看>>
mysql(设置/更改mysql密码,连接MySQL,MySQL常用命令,MySQL两种引擎区别)
查看>>
Out of memory: Kill process 解决
查看>>
网络数据包收发流程(一):从驱动到协议栈
查看>>
linux运维相关的论坛
查看>>
解决-bash: fork: retry: Resource temporarily unavailable错误
查看>>
Linux rsync数据同步命令解析
查看>>
算法学习之路|MOOC期终成绩
查看>>
阿里云ET城市大脑永久入驻国家博物馆,再获“人工智能国家队”认可
查看>>
搭建nginx服务器及文件的配置
查看>>
RHEL7.1配置本地yum源
查看>>
设计模式之代理模式之读写分离!!!
查看>>
Windows server 2003 SSL 配置
查看>>
发布最新C#3.5开发的ReSharper4.0 for VS2005/2008 注册机
查看>>
web service简介
查看>>