ansible那点事——ansible基础Ad-Hoc


前言

自动化运维工具ansible


一、ansible介绍

  ansible是一个基于python开发的轻量级自动化运维管理工具,集合了众多运维工具(saltstack、chef、puppet)的优点,可以用来批量执行命令,安装程序,支持playbook编排。它通过ssh协议来连接主机,去中心化。ansible只是提供一种框架,其基于模块工作的,本身没有批量部署。

模块:

ansible:主程序

Core Modules:ansible自带的模块

Custom Modules:扩展模块(Python)

Plugins:插件来实现记录日志,发送邮件或其他功能

Playbooks:剧本

Connectior Plugins:ansible连接主机的插件,默认为ssh

Host Inventory:主机清单,记录ansible可管理的主机列表,默认为/etc/ansible/hosts

在这里插入图片描述

二、ansible特性

  • 部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
  • 默认使用SSH协议对设备进行管理;
  • 有大量常规运维操作模块,可实现日常绝大部分操作;
  • 配置简单、功能强大、扩展性强;
  • 支持API及自定义模块,可通过Python轻松扩展;
  • 通过Playbooks来定制强大的配置、状态管理;
  • 轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;

三、ansible使用

1、安装

1)yum安装
yum -y install epel-release

yum -y install ansible
2)pip安装
yum install python-pip python-devel

yum install gcc glibc-devel zibl-devel rpm-bulid openssl-devel

pip install  --upgrade pip

pip install ansible--upgrade
3)git安装
git clone git://github.com/ansible/ansible.git --recursive

cd ./ansible

source ./hacking/env-setup

2、基础知识

1)主配置
/etc/ansible/ansible.cfg   
主要设置一些ansible初始化的信息,比如日志存放路径、模块、插件等配置信息
2)主机清单文件
/etc/ansible/hosts
定义所管理的主机组及主机,可以在主配置文件中指定清单文件位置和名称

vim /etc/ansible/hosts        # 存放ansible管理的所有主机
node-1      # 单独指定主机,需要/etc/hosts解析
node-2
+------------------------------------
[node-one]    # 指定主机组 可包含多个主机
node-[2:3]    # node-2 node-3  ===>   node-[2:3]
[node-two]    # 添加主机信息时可以配置user、password  也可以通过ssh-keygen做免密
node-4 ansible_ssh_user='root' ansible_ssh_pass='xx' #ansible_ssh_port='2233'  

[node-one:vars]    # 为一个组指定变量,组内每个主机都可以使用该变量
ansible_ssh_user='root'
ansible_ssh_pass='xx'

[NODE:children]    # 创建一个组 可以包含多个组
node-one
node-two
3)模块功能查看
/usr/bin/ansible-doc

/usr/bin/ansible-doc -l    获取全部模块信息

/usr/bin/ansible-doc -s MOD_NAME    获取指定模块使用方法
4)ansible使用(免密)
1.修改/etc/sshd/ssh_config   
StrictHostKeyChecking no # ssh登录取消yes/no验证
  
2.安装sshpass进行免密
ssh-keygen -P "" -f ~/.ssh/id_rsa # 生成秘钥
sshpass -p'' ssh-copy-id [ip] # 与目标主机做免密

3、常用Ad-Hoc

ping—探测模块
ansible node-2 -m ping # 测试主机连通性

ansible node-2 -m ping -o     # -o为简洁输出

ansible node-2 -m ping -u root -k -o     # 手动输入密码,进行连通测试
shell—命令模块
ansible node-2 -m shell -a'uptime' -o # 可使用任何shell命令
copy—拷贝模块
ansible node-2 -m copy -a'src=/root/testfile dest=/tmp/testfile  owner=root group=root mode=711 backup=yes'

backup=yes   表示被控制节点上如果有文件,则会先备份再拷贝
file—文件/目录操作模块
ansible node-2 -m file -a'path=/tmp/99.txt mode=666 state=touch'

ansible node-2 -m file -a'path=/tmp/99 mode=777 state=directory'

ansible node-2 -m file -a'path=/tmp/99.txt state=absent'

mode:文件/目录权限
state:创建/删除等操作
script—脚本模块
ansible node-2 -m script -a'/root/ansible/test.sh' # 在node-2主机执行test.sh脚本,无须将脚本拷贝的目标主机,相当于 ssh node-2 "./test.sh"

ansible node-2 -m script -a "creates=/tmp/testfile /tmp/testscript.sh" # 若文件存在,则脚本不会执行  若node-2主机存在/tmp/testfile,则执行ansible主机的/tmp/testscript.sh

ansible node-2 -m script -a "removes=/tmp/testfile /tmp/testscript.sh" # 若文件不存在,则执行脚本  若node-2主机不存在/tmp/testfile,则执行ansible主机的/tmp/testscript.sh
yum—软件包管理模块
ansible node-2 -m yum  -a 'name=httpd state=latest' # 安装httpd,yum -y install httpd

ansible node-2 -m yum  -a 'name=httpd state=removed' # 卸载httpd,yum -y remove httpd
user—用户管理模块
ansible node-2 -m user -a 'name=liang state=present' # 创建liang用户 useradd liang

ansible node-2 -m user -a 'name=liang state=absent' # 删除liang用户 userdel -r liang

echo '777777' | openssl passwd -1 -stdin  # 生成密码
ansible node-2 -m user -a 'name=liang password="$1$XVzsJMDr$5wI4oUaQ.emxap6s.N272."' # 设置密码
service—服务管理模块
ansible node-2 -m service -a 'name=httpd state=started enabled=yes' # 启动httpd,并设置开启自启动 systemctl start httpd && systemctl enable httpd

ansible node-2 -m service -a 'name=httpd state=stopped enabled=no' # 停止httpd,并关闭开启自启动 systemctl stop httpd && systemctl disable httpd

setup—主机信息收集模块
ansible node-2 -m setup # 获取node-2主机所有信息,在playbook中可作为内置变量设置成参数

ansible node-2 -m setup -a'filter=ansible_hostname' # 只获取ansible_hostname的值,filter用于过滤,类似grep

常用信息:
      ansible_all_ipv4_addresses:仅显示ipv4的信息。
      ansible_devices:仅显示磁盘设备信息。
      ansible_distribution:显示是什么系统,例:centos,suse等。
      ansible_distribution_major_version:显示是系统主版本。
      ansible_distribution_version:仅显示系统版本。
      ansible_machine:显示系统类型,例:32位,还是64位。
      ansible_eth0:仅显示eth0的信息。
      ansible_hostname:仅显示主机名。
      ansible_kernel:仅显示内核版本。
      ansible_lvm:显示lvm相关信息。
      ansible_memtotal_mb:显示系统总内存。
      ansible_memfree_mb:显示可用系统内存。
      ansible_memory_mb:详细显示内存情况。
      ansible_swaptotal_mb:显示总的swap内存。
      ansible_swapfree_mb:显示swap内存的可用内存。
      ansible_mounts:显示系统磁盘挂载情况。
      ansible_processor:显示cpu个数(具体显示每个cpu的型号)
      ansible_processor_vcpus:显示cpu个数(只显示总的个数)

replace—替换模块
ansible node-2 -m replace -a'path=/testdir/test regexp="ABC" replace=abc backup=yes' # 对node-2主机/testdir/test文件进行备份,并将文件中"ABC"替换为"abc"
lineinfile—文本修改模块
# 确保文本存在文件中。若存在,不做任何操作,若不存在,则在末尾插入line内容
ansible node-2 -m lineinfile -a 'path=/testdir/test line="test lineinfile"'

# 匹配并替换文件中某行文本,若匹配出多行,则只有最后一个被匹配到才被替换成line的内容,若无匹配行,则在文件末尾添加line内容
ansible node-2 -m lineinfile -a 'path=/testdir/test regexp="^line" line="test lineinfile"'

# 匹配并替换文件中某行文本,若匹配出多行,则只有最后一个被匹配到才被替换成line的内容,若无匹配行,则无任何处理
ansible node-2 -m lineinfile -a 'path=/testdir/test regexp="^line" line="test lineinfile" backrefs=yes'

# 根据正则表达式删除对应行,如果有多行都满足正则表达式,那么所有匹配的行都会被删除
ansible node-2 -m lineinfile -a 'path=/testdir/test regexp="^test" state=absent'
cron—定时任务模块
ansible node-2 -m cron -a'user=linag name="crontabtest" minute=*/1 job="echo xxx"'
# 如果定时任务已经存在,删除定时任务并备份,相当于 * */1 * * * echo "xxx"
unarchive—解压模块
ansible node-2 -m unarchive -a'src=foo.tgz dest=/var/lib/foo copy=yes mode=755' # 当copy=yes,从ansible主机拷贝压缩包到node-2的/var/lib/foo下,权限为755。当copy=no,是从node-2主机的压缩包解压到/var/lib/foo下,权限为755

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偷学技术的梁胖胖yo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值