Linux-ansible

目的

ansible官方文档

项目:代码发布系统

实现功能: 发布代码

前戏

  • ansible
  • openpyxl
  • 项目的开发

ansible

python开发的一款开源工具

批量到执行远程主机命令

安装

yum install ansible -y

查看ansible生成的文件

rpm -ql ansible

查看ansible生成的命令

ansible  # 用来执行ansible的一些命令
ansible-doc #用来查看ansible的模块的帮助信息
ansible-playbook #用来执行playbook
ansible-galaxy #用来下载第三方的playbook

操作都是幂等的

ansible 命令格式

ansible <host-pattern> [options]
-a MODULE_ARGS #模块的参数
-C, --check #测试,干跑
-f FORKS #指定并发数
--list-hosts #列出host-pattern主机
--syntax-check  #语法检查
-m MODULE_NAME, #指定模块


生成公钥私钥

ssh-keygen

复制公钥到远程主机

ssh-copy-id 192.168.19.9

ping 命令走icmp协议

ansible 第一个命令

ansible all -m ping #跟系统自带的ping不一样

host-pattern 格式

  • [web]
    192.168.19.9
    192.168.19.26
    [db]
    192.168.19.26
    192.168.19.37
    [cache]
    192.168.19.37
  • www[001:006].example.com
  • 指定所有 all
  • 指定单台机器(指定多个机器)
  • 指定分组(多个分组)
  • 指定分组并集 # ansible 'web:db' -m ping
  • 指定分组的交集 # ansible 'web:&db' -m ping
  • 指定分组的差集 #ansible 'web:!db' -m ping

命令相关

command

ansible web -m command -a 'pwd'
ansible web -a 'chdir=/tmp pwd' #切换到/tmp并执行pwd
ansible web -a 'creates=/etc/  mkdir /data2' #判断creates是否存在,真就忽略后面的操作
ansible web -a 'removes=/tmp/data  mkdir /tmp/data2' #判断removes是否存在,假就忽略后面的操作

补充

tail -1 /etc/shadow 查看最后一个用户
echo 'test1'|passwd --stdin test1 设置用户密码,不需要二次确认

ansible-doc

Usage: ansible-doc [-l|-F|-s] [options] [-t <plugin type> ] [plugin]
-a #列出所有的模块
-l #列出ansible的模块
-s #片段式显示模块的信息
# 列出模块的详细信息

shell

ansible web -m shell -a 'echo "test1"|passwd --stdin test1' #修改密码
ansible 192.168.19.9 -m shell -a '/root/a.sh' #指定远程主机上的shell脚本
ansible 192.168.19.9 -m shell -a '/root/a.py' #指定远程主机上的python文件

sctipt

ansible all -m script -a '/root/a.sh'  #执行管控机上的shell脚本

文件相关的 命令

copy 复制管控机文件到被管控机

ansible web -m copy -a 'src=/etc/fstab dest=/data/fst' #src指定源文件 dest指定目标文件
 ansible web -m copy -a 'src=/etc/fstab dest=/data/fst backup=yes' #backup备份
 ansible web -m copy -a 'src=/etc/init.d dest=/data/' #复制目录和目录下的文件到远程主机,远程主机也是一个文件夹
 ansible web -m copy -a 'src=/etc/init.d/ dest=/data/' #复制目录下的文件
 ansible web -m copy -a 'src=/etc/fstab dest=/data/fst backup=yes  mode=600' #mode 指定权限,owner指定文件的属主,group用来指定属组

file

ansible db -m  file -a 'path=/data10 state=directory' #path指定地址,state=directory表示创建文件夹
ansible db -m  file -a 'path=/data10/test1 state=touch' #state=touch 表示创建新文件
ansible db -m  file -a 'path=/data10/test10 src=/data10/test1 state=link' #src表示源文件,path是不是目标,state=link是不是创建一个软连接
ansible db -m  file -a 'path=/data10/test1 state=absent' #state=absent 代表删除

补充

ln 创建硬链接 链接文件变更,源文件不变
ln -s 创建软连接 链接文件变更,源文件变

fetch

ansible db -m fetch -a 'src=/etc/fstab dest=/tmp' #src源地址(在被控机器上),dest目标地址(管控机上的地址)每个管控机的文件都生成了一个目录,会保持文件的原来目录结构

软件相关

补充

[name]   #分组
name=CentOS-$releasever - Base - mirrors.aliyun.com  #这个分组的名字
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/ #分组的url,叫baseurl
        http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=0 # gpgcheck=1需要验证key文件,gpgcheck=0不验证key
enabled=1 #enabled=1 表示分组可用,enabled=0表示分组是不可用的
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7 #key文件

yum

ansible web -m yum -a 'name=nginx state=installed' # 安装nginx
ansible web -m shell -a 'rpm -qa|grep nginx' #查看nginx是不是安装成功
ansible web -m yum -a 'name=nginx state=absent'  #卸载nginx

pip

ansible web -m pip -a 'name=Django==1.11.15' # 安装django

补充

pip freeze  > file #给当前的python模块做快照
pip install [options] -r <requirements file>  安装
pip list #查看当前python安装的所有模块
原文地址:https://www.cnblogs.com/sunxiuwen/p/10243594.html