ansible是一个可以在远程主机上批量执行命令或者脚本的一个工具python
Ad-Hoc是ansible的一种模式linux
yum install -y ansiblenginx
ansible <host-pattern> [options]web
主机组的配置文件在/etc/ansible/hostsredis
- 单个的的ip地址shell
- 多个ip地址, 用逗号分割django
- 单个组flask
- 多个组centos
- 并集: web, db 或 "web: db"数组
- 交集: "web: &db"
- 差集: "web: !db"
- 所有: all
-m modulename # 使用的模块名 -a args # 模块的参数 -f fork # 并发的线程数, 默认5个 -C # 干跑
- 管控主机, 生成密钥
ssh-keygen
- 复制到被管控主机
ssh-copy-id username@ip
ansible-doc -s modulename 查看模块的参数
在远程主机上执行命令, 不支持 <>|&$; 一些特殊符号
1. 参数 chdir 切换目录 creates 存在就不执行后面命令, 反之则执行 removes 存在就执行后面命令, 反之则不执行 2. 实例 ansible web -m command -a "pwd" # 执行pwd命令 ansible web -m command -a "chdir=/tmp pwd" # chdir参数是切换目录 ansible web -m command -a "creates=/tmp pwd" # creates=/tmp 有这个文件就是false,后面的不执行,没有就是true,后面执行 ansible web -m command -a "removes=/tmp pwd" # 有就是true,没有就是false
和comman模块同样, 可是能够识别特殊符号
1. linux补充 echo "password" | passwd --stdin username # 一行命令直接修改密码 2. 参数 chdir 切换目录 creates 和command模块同样 removes 和command模块同样 3. 实例 ansible web -m shell -a "echo "password" | passwd --stdin username" # 识别|符号 ansible web -m shell -a "/tmp/a.sh" # 执行a.sh脚本 要有可执行权限 ansible web -m shell -a "bash /tmp/a.sh" # 执行脚本, 不须要有可执行权限
在远程主机上运行本地脚本
1. 参数 chdir 切换目录 creates 和command模块同样 removes 和commadn模块同样 2. 实例 ansible db -m script -a "/root/a.sh" #执行本地的文件,管控机的文件 ansible db -m script -a "creates=/root/a.sh /root/a.sh" # 判断被控机上的文件是否存在,若是不存在,就执行,若是存在,就跳过 ansible db -m script -a "creates=/tmp /root/a.sh" #判断被控机上的文件
复制本地主机的文件到远程主机上
1. 参数 src 源地址, 一/结尾就是复制文件夹内全部文件 dest 目标地址 backup yes的时候就备份 mode 指定文件权限 group 指定数组 owner 指定属主 content 覆盖写入 2. 实例 ansible web -m copy -a "src=/etc/fstab dest=/tmp/f" #复制本地文件到远程主机,并修改文件名,屡次执行不会改变,由于checksum值是同样的 ansible web -m copy -a "src=a.sh dest=/tmp/a.sh backup=yes" #复制本地文件,并备份 ansible web -m copy -a "src=a.sh dest=/tmp/a.sh backup=yes group=alex mode=755"# 复制本地文件到远程主机,并指定属组和权限 ansible web -m copy -a "src=/etc/init.d dest=/tmp backup=yes group=alex mode=755" #复制本地的目录到远程主机,修改目录权限,则目录里面的文件也会跟着变动 ansible web -m copy -a "src=/etc/init.d/ dest=/tmp backup=yes group=alex mode=755" #复制本地目录下的全部文件, ansible web -m copy -a "content='大弦嘈嘈如急雨,小弦切切如私语,嘈嘈切切错 杂弹,大珠小珠落玉盘' dest=/tmp/b" #直接往文件里面写内容,覆盖写,慎用
对远程主机文件的操做
1. linux补充 软链接 快捷方式 ln -s 源文件修改软链接修改 源文件删除软链接失效 能够跨分区 硬连接 硬盘的位置 ln 源文件修改硬连接修改 源文件删除硬连接不变 不能够跨分区 复制 开辟新空间 cp 源文件修改cp的不变 源文件删除不变 能够跨分区 2. 参数 path 文件路径 mode 指定权限 group 指定属组 owner 指定属主 state 操做的类型 directory 目录 touch 空文件 absent 删除 link 软链接 hard 硬连接 src 源文件, state=link或hard时用 3. 实例 ansible web -m file -a "path=/alex5 state=directory owner=alex" #建立目录,并制定属主 ansible web -m file -a "path=/tmp/wusir.txt state=touch mode=777" #建立文件,并指定权限 ansible web -m file -a "path=/tmp/cron src=/var/log/cron state=link" #建立软连接,连接的是本身的文件 ansible web -m file -a "path=/tmp/cron state=absent" # 删除软链接 ansible web -m file -a "path=/alex5 state=absent" #删除文件夹
在远程主机上拉取文件, 以主机名或ip建立目录并保存原有目录结构
1. linux补充 scp -rq 文件 地址 # 两台linux之间传输文件 scp -r root@ip:/tmp/text /tmp 2. 参数 src 源地址, 远程主机上的文件, 不能是文件夹 dest 目标地址, 拉取到本地主机的地址 3. 实例 # 拉取被控主机上的/var/log/cron文件到/tmp目录下 ansible web -m fetch -a "src=/var/log/cron dest=/tmp"
在远程主机上进行yum安装
1. linux的补充 - yum跟rpm有什么关系,有什么区别 rpm redhat package manager yum 基于rpm进行优化的软件管理包, 能够解决依赖关系 - yum源怎么配置 ############################################### [epel] #名称 name=Extra Packages for Enterprise Linux 7 - $basearch #全名或者描述信息 baseurl=http://mirrors.aliyun.com/epel/7/$basearch # 源url地址 failovermethod=priority enabled=1 #是否启用,1启用,0不启用 gpgcheck=0 #是否检验key文件,0不校验 1校验 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 ################################################ - yum怎么安装包组 yum grouplist #查包组信息 yum groupinstall xxx 2. 参数 name 要下载的包名 disablerepo 禁用某个源 enablerepo 启用某个源 state 进行的操做 install 安装 remove 卸载 3. 实例 # 给被控主机配置epel源 ansible web -m copy -a "src=/etc/yum.repos.d/epel.repo dest=/etc/yum.repos.d" # 给被控主机安装redis ansible web -m yum -a "name=redis" #安装多个包 ansible web -m yum -a "name=python2-pip,redis" #安装包组 ansible web -m yum -a "name='@Development Tools'" #卸载 ansible web -m yum -a "name=nginx state=absent"
在远程主机上进行pip安装
1. linux补充 pip freeze > requirement.txt 将本地环境全部的包都导出 pip install -r requirement.txt 安装全部的包 pip uninstall flask 卸载包 python setup.py build python setup.py install 2. 参数 name 安装的包名 requirement 安装文件中全部的包 virtualenv 虚拟环境 3. 实例 # 给被控主机pip一个flask包 ansible web -m pip -a "name=flask" # 给被控主机pip一个1.11.14的django包 ansible web -m pip -a "name=django==1.11.14"
在远程主机上启停服务
1. linux补充 - centos 7 systemctl start redis 开启服务 systemctl enable redis 设置开机自启 - centos 6 service redis start 开启服务 chkconfig redis on 设置开机自启 2. 参数 name 服务名 state 进行的操做 started 启动服务 restarted 重启服务 reloaded 平滑重启服务 stopped 中止服务 enable 设置开机自启 3. 实例 # 在被控主机上开启redis服务 ansible web -m service -a "name=redis state=started" # 关闭被控主机上的redis服务 ansible web -m service -a "name=redis state=stopped" # 在被控主机上开启redis服务而且开机自启 ansible web -m service -a "name=redis state=started enabled=yes"
在远程主机上设置定时任务
1. linux补充 crontab -e 编辑定时任务 crontab -l 查看定时任务 crontab -r 删除定时任务 * * * * * 绝对路径的命令 2. 参数 name 定时任务的名字, 默认为None, 不能重复 job 任务 minute 分 hour 时 day 日 month 月 weekday 周 state 进行的操做 create 建立任务, 默认 absent 删除任务 disable 禁用任务, 就是把任务注释掉 user 指定指定的用户 3. 实例 # 给被控主机设置一个定时任务:每分钟都建立/tmp/1文件夹 ansible web -m cron -a "job='/usr/bin/mkdir /tmp/1' name=makedirectory" # 清除上面的定时任务 ansible web -m cron -a "name=makedirectory state=absent" # 注释定时任务 ansible web -m cron -a "minute=12 name=touchfile2 job='touch /tmp/xiaoqiang.txt' disabled=yes"
对远程主机的用户的操做
1. linux补充 - 查看本机的用户 vi /etc/passwd vi /etc/shadow id root - 添加用户 useradd -d 设置新用户的家目录 -g 设置新用户的属组 -G 设置新用户的附加组 -u 设置新用户的id -s 设置新用户登录后的shell -r 设置系统帐户,没有家目录 - 删除用户 userdel -r 删除用户,而且删除用户家目录 - 用户分类 超级管理员 root 0 普通用户 系统用户 启动一些服务或者进程,不能登陆 1-999 centos7 1-499 centos6 从大到小 登陆用户 能够登陆的用户 1000-65535 centos7 500-65535 centos6 从小到大 2. 参数 group 属组 groups 附加属组 home 家目录 uid 用户id name 账号 shell 登录后的shell system 系统用户 remove 删除用户,而且删除用户家目录 state=absent配合这个参数使用 3. 实例 # 在远程主机上建立用户 ansible web -m user -a "name=username home=/tmp/username" # 删除上面的用户 ansible web -m user -a "name=username remove-yes"
对远程主机的用户组的操做
1. linux补充 - 建立分组 groupadd -g 设置分组id -r 设置系统组 - 组分类 超级管理员组 root 0 普通组 系统组 1-999 centos7 1-499 centos6 从大到小 登陆用户组 1000-65535 centos7 500-65535 centos6 从小到大 - 查看组 cat /etc/group 2. 参数 gid 分组id name 分组名称 system 系统分组 3. 实例 # 在远程主机上建立分组 ansible web -m group -a "name=hh " # 在远程主机上建立系统分组 ansible web -m group -a "name=hh system=yes"
获取远程主机的信息
1. 参数 filter 过滤出想要的信息 2. 实例 # 查看本机的信息,并过滤出用户的组id ansible localhost -m setup -a "filter=ansible_user_gid" 3. 主要信息 ansible_all_ipv4_addresses #全部的ipv4地址 ansible_all_ipv6_addresses #全部的ipv6地址 ansible_architecture #系统的架构 ansible_date_time #系统时间 ansible_default_ipv4 #默认的ipv4地址 address ip地址 alias 网卡名称 broadcast 广播地址 gateway 网关 netmask 子网掩码 network 网段 ansible_default_ipv6 #默认的ipv6地址 ansible_device_links #系统的磁盘信息 ansible_distribution #系统名称 ansible_distribution_file_variety #系统的基于公司 ansible_distribution_major_version #系统的主版本 ansible_distribution_version #系统的所有版本 ansible_dns #系统的dns 默认udp 端口53 ansible_domain #系统的域 ldap ipv4 #ipv4地址 ansible_env #系统的环境 ansible_fqdn #系统的完整主机名 ansible_hostname #系统的简写主机名 ansible_kernel #系统的内核版本 ansible_machine #系统的架构 ansible_memtotal_mb #系统的内存 ansible_memory_mb #系统的内存使用状况 ansible_mounts #系统的挂载信息 ansible_os_family #系统家族 ansible_pkg_mgr #系统的包管理工具 ansible_processor #系统的cpu ansible_processor_cores #每颗cpu的核数 ansible_processor_count #cpu的颗数 ansible_processor_vcpus #cpu的个数=cpu的颗数*每颗cpu的核数 ansible_python #系统python信息 ansible_python_version #系统python的版本 ansible_system #系统名字