Ansible Ⅰ 基础

Ansible


中文权威指南https://ansible-tran.readthedocs.io/en/latest/docs/modules.html

Ansible介绍

ansible特性
模块化:调用特定的模块,完成特定任务
有Paramiko,PyYAML,Jinja2(模板语言)三个关键模块
支持自定义模块
基于Python语言实现
部署简单,基于python和SSH(默认已安装),agentless
安全,基于OpenSSH
支持playbook编排任务
幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况
无需代理不依赖PKI(无需ssl)
可使用任何编程语言写模块
YAML格式,编排任务,支持丰富的数据结构
较强大的多层解决方案

Ansible主要组成部分

ANSIBLE PLAYBOOKS:任务剧本(任务集),编排定义Ansible任务集的配置
文件,由Ansible顺序依次执行,通常是JSON格式的YML文件
INVENTORY:Ansible管理主机的清单/etc/anaible/hosts
MODULES:Ansible执行命令的功能模块,多数为内置核心模块,也可自定义
PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插
件等,该功能不常用
API:供第三方程序调用的应用程序编程接口
ANSIBLE:组合INVENTORY、API、MODULES、PLUGINS的绿框,可以理解
为是ansible命令工具,其为核心执行工具

注意事项
执行ansible的主机一般称为主控端,中控,master或堡垒机
主控端Python版本需要2.6或以上
被控端Python版本小于2.4需要安装python-simplejson
被控端如开启SELinux需要安装libselinux-python
windows不能做为主控端

安装

1.rpm包安装: EPEL源
yum install ansible
2.编译安装:
yum -y install python-jinja2 PyYAML python-paramiko python-babel
python-crypto
tar xf ansible-1.5.4.tar.gz
cd ansible-1.5.4
python setup.py build
python setup.py install
mkdir /etc/ansible
cp -r examples/* /etc/ansible
3.Git方式:
git clone git://github.com/ansible/ansible.git --recursive
cd ./ansible
source ./hacking/env-setup
4.pip安装: pip是安装Python包的管理器,类似yum
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
5.确认安装:
ansible --version 查看版本信息

相关文件

配置文件
/etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性
[defaults]
#inventory = /etc/ansible/hosts # 主机列表配置文件
#library = /usr/share/my_modules/ # 库文件存放目录
#remote_tmp = $HOME/.ansible/tmp #临时py命令文件存放在远程主机目录
#local_tmp = $HOME/.ansible/tmp # 本机的临时命令执行目录
#forks = 5 # 默认并发数
#sudo_user = root # 默认sudo 用户
#ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码
#ask_pass = True
#remote_port = 22
#host_key_checking = False # 检查对应服务器的host_key,建议取消注释
#log_path=/var/log/ansible.log #日志文件
#module_name = command #默认模块

/etc/ansible/hosts 主机清单,格式如下,相当于添加管理的ip

[root@Centos7 data]#ansible all --list-hosts; 查看所有用户
[root@Centos7 data]#ansible web --list-hosts; 查看所在组用户
vim /etc/ansible/ansible.cfg
[apps]
192.168.41.102

[web]
192.168.41.102
192.168.41.103

[web1]
192.168.41.10[2:3] #等同于web

/etc/ansible/roles/ 存放角色的目录程序
/usr/bin/ansible 主程序,临时命令执行工具
/usr/bin/ansible-doc 查看配置文档,模块功能查看工具
/usr/bin/ansible-galaxy 下载/上传优秀代码或Roles模块的官网平台
/usr/bin/ansible-playbook 定制自动化任务,编排剧本工具
/usr/bin/ansible-pull 远程执行命令的工具
/usr/bin/ansible-vault 文件加密工具
/usr/bin/ansible-console 基于Console界面与用户交互的执行工具

命令用法

ansible [-m module_name] [-a args]
–version 显示版本
-m module 指定模块,默认为command
-v 详细过程 –vv -vvv更详细
–list-hosts 显示主机列表,可简写 --list
-k, --ask-pass 提示输入ssh连接密码,默认Key验证
-C, --check 检查,并不执行
-T, --timeout=TIMEOUT 执行命令的超时时间,默认10s
-u, --user=REMOTE_USER 执行远程执行的用户
-b, --become 代替旧版的sudo 切换
–become-user=USERNAME 指定sudo的runas用户,默认为root
-K, --ask-become-pass 提示输入sudo时的口令

支持方式
支持通配符
ansible “*” -m ping
或关系
ansible “websrvs:appsrvs” -m ping
逻辑与
ansible “websrvs:&dbsrvs” –m ping
在websrvs组并且在dbsrvs组中的主机
逻辑非
ansible ‘websrvs:!dbsrvs’ –m ping
正则表达式
ansible “websrvs:&dbsrvs” –m ping

ansible命令执行过程

  1. 加载自己的配置文件 默认/etc/ansible/ansible.cfg
  2. 加载自己对应的模块文件,如command
  3. 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服
    务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件
  4. 给文件+x执行
  5. 执行并返回结果
  6. 删除临时py文件,退出
    执行状态:
    绿色:执行成功并且不需要做改变的操作
    黄色:执行成功并且对目标主机做变更
    红色:执行失败

常用命令v

标准语法 ansible 用户/分组 -m 模块 -a 执行命令
基于key验证 ping 可以把密钥发给其余用户,这样以后就不用输入验证信息了。
182 ssh-keygen
183 ssh-copy-id 192.168.41.102
184 ssh-copy-id 192.168.41.103
185 ssh-copy-id 192.168.41.104
186 ansible all -m ping
ansible all -m ping -u root -k

ansible-doc -s command 查看命令帮助
command

[root@Centos7 ~]#ansible srvs -m command -a 'service httpd start'

shell
比command应用更广泛

[root@Centos7 ~]#ansible all -m  shell -a 'echo 1234|passwd --stdin wang'

script
执行ansible的脚本

[root@Centos7 ~]#ansible all -m script -a '/data/a.sh'

copy
从absible复制到被控制的机器

[root@Centos7 ~]#ansible all -m copy -a "src=/root/num.txt dest=/data/num.txt owner=wang mode=600 backup=yes"

fetch
从被控制主机复制文件到ansible主机上面,不支持目录

[root@Centos7 ~]#ansible all -m fetch -a 'src=/data/num.txt dest=/data/'

file
ansible-doc -s file 单独查看此帮助
修改文件属性/创建文件

[root@Centos7 ~]#ansible all -m file -a 'path=/data/num.txt mode=777'

创建文件

ansible all -m file -a "path=/data/testdir state=directory"

删除文件

[root@Centos7 data]#ansible all -m file -a 'path=/data/num.txt state=absent'

unarchive
解包解压缩
1、将ansible主机上的压缩包在本地解压缩后传到远程主机上,设置copy=yes.
2、将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no
常见参数:
copy:默认为yes,当copy=yes,拷贝的文件是从ansible主机复制到远程主机上,如
果设置为copy=no,会在远程主机上寻找src源文件
src:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程
主机上的路径,则需要设置copy=no
dest:远程主机上的目标路径
mode:设置解压缩后的文件权限
tar -Jcf -f num.tar.xz /data/num.txt
从ansible本地传到其余主机并解压

[root@Centos7 data]#ansible all -m unarchive -a 'src=/data/num.tar.xz dest=/data/'

把远程桌面上的文件解压缩。不会传到ansible 服务器

[root@Centos7 data]#ansible all -m unarchive -a 'src=/data/num.tar.gz  dest=/data copy=no'

archive
打包压缩

[root@Centos7 data]#ansible all  -m archive -a 'path=/data/num.txt dest=/data/num.txt.tar.gz format=gz owner=wang mode=777' 

hostname
修改远程主机名

[root@Centos7 data]#ansible apps -m hostname -a "name=websrv"

cron
计划任务
执行计划

[root@Centos7 data]#ansible all -m cron -a "minute=*/1 job='/usr/bin/touch a.txt' name=touchfile"

撤销计划

[root@Centos7 data]#ansible all -m cron -a "state=absent name=touchfile"

yum
安装

[root@Centos7 data]#ansible all -m yum -a "name=tree  state=present"


[root@Centos7 data]#ansible all -m yum -a "name=tree  state=absent"

Service
:管理服务

ansible srv -m service -a 'name=httpd state=stopped'
ansible srv -m service -a 'name=httpd state=started enabled=yes'
ansible srv -m service -a 'name=httpd state=reloaded’
ansible srv -m service -a 'name=httpd state=restarted'

User
:管理用户
增加

ansible srv -m user -a 'name=user1 comment=“test user” uid=2048 home=/app/user1 group=root‘ansible srv -m user -a 'name=sysuser1 system=yes home=/app/sysuser1 ’

删除用户及家目录等数据

ansible srv -m user -a 'name=user1 state=absent remove=yes'

Group
:管理组

ansible srv -m group -a "name=testgroup system=yes"
ansible srv -m group -a "name=testgroup state=absent"

setup

ansible all -m setup |grep cpu
ansible all -m setup |grep free

查看内存总大小 ansible all -m setup -a ‘filter=“mem”’

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值