Ansible

1.安装:
  生产环境根据需求修改网卡、firewalld、selinux、配置软件源、时间服务器:
  vi /etc/sysconfig/network-scripts/ifcfg-eth0
  systemctl restart network
  #测试网络
  ping www.baidu.com
  #修改hosts文件
  vi /etc/hosts
  hostnamectl set-hostname Ansible-master
  systemctl disable firewalld
  systemctl stop firewalld
  sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
  yum install ntpdate
  crontab -e
  */10 * * * * /usr/sbin/ntpdate time1.aliyun.com
  #安装基础软件:
  yum install -y wget yum-plugin-priorities
  #安装软件源:
  wget -O /etc/yum.repos.d/CentOS-Base-ali.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  #安装系统基础软件:
  yum groupinstall "Compatibility Libraries" "Console Internet Tools" "Development Tools" "Security Tools" "System Administration Tools" -y
  yum install -y vim lrzsz telnet curl net-tools tree bash-completion
  #禁止内核升级
  # vim /etc/yum.conf
  ...
  exclude=kernel*
  exclude=centos-release*
  
############配置完前面的基础配置,下面正式安装ansible软件############
1.这里使用rpm方式安装:
  yum install -y ansible
  查看ansible版本:
  ansible --version
  测试:
  ansible localhost -a "ifconfig eth0"
  

2.配置通信主机hosts:
  vi /etc/ansible/hosts
  语法:
  [web]
  192.168.1.20
  192.168.1.21
  ...
  
3.免密认证:
  master中生成密钥(实验环境不用设置密码):
  如果设置了密码,可以用一下命令重置密码:
  
  ssh-keygen -t rsa
  ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.20
  ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.21
  ......
  这里可以写个shell脚本执行:
  for i in 21 22 23
  do
  ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.$i
  done
  配置完测试连通性:
  ansible all -m ping
  ansible "*" -m ping
  ansible "192.168.1.*" -m ping
  

4. 常用模块
 4.1 日常模块:command、shell、script
  command: ansible的默认模块,可以运行远程权限所有的shell命令
  shell:command对于某些特殊的符号命令执行效果不好,专用的shell模块可以满足要求
  
  scripts:批量的系统命令可以写成一个脚本文件,然后基于scripts的方式来运行,类似scp+shell的功能
 4.2 系统模块:hostname、user、group、cron、setup
  hostname:用来修改主机名
  
  user:用户的增删改查
  group:用户组的增删改查
  cron:定制计划任务、禁用定时任务、启用定时任务、删除定时任务
  setup:常见场景就是:获取指定的主机属性、获取某些主机属性等
 4.3 文件模块: copy、fetch、file、stat
  copy:文件纯拷贝、拷贝时改属性、拷贝时备份、根据内容增加文件等,本地到目标主机;
  fetch:单文件拉取、多文件拉取等,它是从远程主机拉取文件到本地;
  file:文件创建、设置属性、文件删除等;
  stat:文件状态查看等;
 4.4 应用模块:yum、service、debug
  yum:检查软件、软件安装、软件卸载、安装本地软件、更新缓存等;
  
  service:开机自启动管理、启动服务、重启服务、重载服务、关闭服务等;
  debug:输出调试信息、测试变量等;
 4.5 系列命令:
  1 ansible-doc:一个专门用于查看模块信息的命令
  2 ansible-glaxy:列出ansible的第三方共享资源的专用命令
  语法:ansible-galaxy [delete|import|info|init|install|list|login|remove|search|setup] [--help] [options] ...
  3 ansible-playbook:执行.yaml 文件相当于自动化的执行了大量的ansible命令;
  yaml标记语言,这里playbook有三个属性:hosts、remote_user、tasks
  4 ansible-vault:采用安全加密的方式来操作相关文件
  5 ansible-console:可交互终端形式执行命令
  6 ansible-pull:ansible普通执行方式的另一种表现形式,
  7 ansible-inventory:ansible-inventory其实是获取主机清单一些的信息的专用命令
     

6.ansible参数:

  -a Arguments,--args= Arguments’命合行参数

  -m NAME,--module-name=NAME 执行模块的名字,默认使用cmmand模块,只执行单一命会可以不用-m参数

  -i PATH,--inventory=PATH 指定库存主机文件的路,默认为/etc/ansible/hosts.

  -u Username --user=Username 执行用户,使用这个远程用户名而不是当前用户

  -U--sud-user=SUDO User sudo到哪个用户,默认为 root

  -k--ask-pass 登录密码,提示输入SSH密码而不是假设基于密钥的验证

  -K--ask-sudo-pass 提示密码使用sudo

  -s --sudo sudo运行

  s--su用su命令

  -l --list 显示所支持的所有模块

  -s --snippet 指定模块显示剧本片段

  -f --forks=NUM 并行任务数。NUM被指定为一个整数,默认是5。#ansible testhosts -a"/sbin/reboot”-f 10 重启testhosts组的所有机器,每次重启10台

  --private-key=PRIVATE KEY FILE 私钥路径,使用这个文件来验证连接

  -v --verbose 详细信息

  al1 针对hosts定义的所有主机执行

  -M MODULE_PATH,--module-path=MODULE PATH 要执行的模块的路径默认为/usr/share/ansible

  --list-hosts 只打印有哪些主机会执行这个 playbook 文件,不是实际执行该playbook文件

  -o --one-line 压缩输出,摘要输出.尝试一切都在一行上输出。

  -t Directory --tree=Directory 将内容保存在该输出目录,结果保存在一个文件中在每台主机上。 .-B后台运行超时时间

  -P 调查后台程序时间

  -T Seconds,--timeout=Seconds 时间,单位秒s

  -P NUM,--poll=NUM 调查背景工作每隔数秒。需要 -b

  -c Connection,--connection=Connection 连接类型使用。可能的选项是paramiko(SSH),SSH和地方。当地主要是用于crontab或启动。

  --tags=TAGS 只执行指定标签的任务 例子:ansible-playbook test.yml --tags=copy 只执行标签为copy的那个任务

  --list-hosts 只打印有哪些主机会执行这个playbook文件,不是实际执行该playbook文件

  --list-tasks列出所有将被执行的任务

  -C --check 检查yaml是否能正常执行而不会真正执行

  -l SUBSET,--limit=SUBSET进一步限制所选主机/组模式 --limit=192.168.15.1只对这个ip执行

  -skip-tags=SKIP_TAGS 只运行戏剧和任务不匹配这些值的标签-skip-tags=copy_start

  -e EXTRA_VARS,--extra-vars=EXTRA_VARS 额外的变量设置为键=值或YAML /JSON

  参数参考至此地址