ansible基本使用

一、ansible入门


(一)、简述

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。

(二)、特点

部署简单
轻量级,不需要安装agent
默认使用ssh协议
有大量的模块使用
支持api,易扩展
通过playbooks管理配置和状态

(三)、执行过程

  1. 加载配置文件,默认/etc/ansible/ansible.cfg
  2. 查找主机列表清单,默认/etc/ansible/hosts
  3. 加载对应模块
  4. 通过ansible将模块和命令生成对应的临时py文件,并且将文件传输到远程服务器上的执行用户目录的py脚本(如:root/.ansible/tmp/xx/xx.py)
  5. 给文件+x执行权限
  6. 执行并返回结果
  7. 删除临时py文件

(四)、安装

  1. pip安装
yum install python-pip -y
pip install ansible
  1. yum安装
yum install epel-release -y
yum install ansible –y

(五)、常用命令

# ad-hoc临时执行命令
ansible
# playbook 定制剧本的管理工具
ansible-playbook
# playbook开源库管理工具
ansible-galaxy

二、ansible配置文件


(一)、主机列表

  1. inventory描述
# 主机清单列表
# 默认地址/etc/ansible/hosts
[webservers]
x.x.x.1
x.x.x.2
  1. 主机和组
#[webservers]
[组名]
主机可以同时属于多个组
  1. 主机变量
[webservers]
test ansible_ssh_host=x.x.x.1 ansible_ssh_user=root ansible_ssh_pass=password
  1. 组变量
# 所有组的变量
[all:vars]
ansible_ssh_user=root
ansible_ssh_pass=password
  1. 把一个组作为另一个组的变量
[group1]
x.x.x.1 node_name=g1-node01
x.x.x.2 node_name=g1-node02
[group2]
x.x.x.1 node_name=g2-node01
x.x.x.2 node_name=g2-node02

[gs:children]
group1
group2

[gs:vars]
ansible_ssh_user=root
ansible_ssh_pass=password
  1. 参数说明
# 远程主机地址
ansible_ssh_host
# 主机端口
ansible_ssh_port
# 主机用户
ansible_ssh_user
# 密码
# 注意:明文不安全,建议使用 --ask-pass 或 SSH 密钥
ansible_ssh_pass
# sudo 密码
ansible_sudo_pass

(二)、ansible.cfg配置

  1. 示例
[defaults]
inventory      = hosts
forks          = 5
become      = root
remote_port    = 22
host_key_checking = False
timeout = 10
log_path = /var/log/ansible.log
private_key_file = /root/.ssh/id_rsa
  1. 参数说明
# 管理主机列表hosts文件路径,默认/etc/ansible/hosts
inventory=/etc/ansible/hosts
# 执行并发数,默认5
forks=5
# 执行playbook时的远程认证用户,默认root
remote_port=root
# ansible第1次连接客户端是否检查ssh密钥
host_key_checking=false
# ssh超时时间,默认10s
timeout=10
# 日志目录
log_path = /var/log/ansible.log
# 免密登录
private_key_file = /root/.ssh/id_rsa

三、 ansible命令行ad-hoc


(一)、基础

  1. 简述
ad-hoc命令可以输入内容,快速执行某个操作,但不希望留存记录。
ad-hoc命令是理解Ansible和在学习playbooks之前需要掌握的基础知识。
一般来说,Ansible的真正能力在于剧本。
  1. 命令格式
ansible <host-pattern> [-f forks] [-m module_name] [-a args]
  1. 参数说明
选项 描述
-u (remote-user) ssh连接用户
-k,--ask-pass ssh连接用户密码
-a 参数
-m 默认command模块
  1. 私钥配置
#生成私钥
ssh-keygen
# 复制私钥到远程主机
ssh-copy-id root@x.x.x.1

(二)、示例

  1. ping
# ping,测试主机连通性
ansible all -m ping -uroot -k
  1. 默认模块
# 使用默认模块,command
ansible all -a 'uname -a' -uroot -k
  1. 批量修改用户密码
# 批量修改user01用户密码
ansible -i hosts all -m shell -a "echo 'password' | passwd --stdin user01" -uroot -k

四、 ansible常用模块


(一)、shell

  1. 简述

    在目标主机上执行shell命令

  2. 示例

ansible 组  -u root -k -m shell -a 'hostname'

(二)、copy

  1. 简述

    文件拷贝,将管理主机的文件拷贝到目标主机上

  2. 示例

ansible 组 -m copy -a "src=/testdir/copytest dest=/testdir/"
  1. 常用参数说明
参数 描述
src 指定管理主机需要copy的文件或者目录
dest 指定目标主机拷贝到的目录
mode 拷贝到目标主机后文件或者目录的权限(如:0644)
backup 同名文件时,是否备份(值:yes no)

(三)、file

  1. 简述

    管理主机的文件和文件属性

  2. 示例

# 创建目录
ansible 组 -m file -a "path=/tmp/test state=directory"
# 删除目录
ansible 组 -m file -a "path=/tmp/test state=absent"
  1. 常用参数说明
参数 描述
path 需要操作的文件
state 操作状态,创建,删除(directory、absent、touch)
mode 指定文件或者目录的权限(如:0644)
recurse 指定目录时,可以递归修改目录下文件的熟悉(yes、no)

(四)、yum

  1. 简述

    软件包管理工具

  2. 示例

# 安装vim
ansible 组 -m yum -a "name=vim state=present"
# 最新vim
ansible 组 -m yum -a "name=vim state=latest"
# 卸载
ansible 组 -m yum -a "name=vim state=absent"
# 指定源安装
ansible 组 -m yum -a "name=http://www.rpmfind.net/linux/epel/7/x86_64/Packages/n/nginx-1.16.1-3.el7.x86_64.rpm state=present"
  1. 参数说明
参数 描述
name 软件名称
state 安装(present、installed),卸载(absent 、removed),安装最新latest
enablerepo 指定repo源

(五)、service/systemd

  1. 简述

    ​ 服务管理

  2. 示例

# 启动nginx+开机自启动
ansible 组 -m service -a "name=nginx state=started enabled=yes"
  1. 参数说明
参数 描述
name 服务名称
state started/stopped/restarted/reloaded
enabled 是否开机启动(yes/no)

(六)、unarchive

  1. 简述

    文件解压

  2. 示例

ansible 组 -m unarchive -a "src=/tmp/test.tar.gz dest=/tmp mode=0755"
  1. 参数说明
参数 描述
src 源文件路径
dest 远程主机文件路径
mode 解压后文件权限
copy 管理主机(yes)或者远程主机(no)找源文件

(七)、其他模块

  1. 其他模块

    user

    group

    mysql

    debug

  2. 示例

# debug
ansible 组 -m  debug -a "var=inventory_hostname"
posted @ 2020-12-30 14:07  qms19  阅读(233)  评论(0编辑  收藏  举报