ansible 命令格式
-a MODULE_ARGS 模块参数
-c, --check 检查语法
-f FORKS 并发
–list-hosts 列出主机列表
-m MODULE_NAME 模块名字
ssh认证方式
密钥
秘钥
ssh-keygen生成密钥对
ssh-copy-id复制公钥到远程主机
私钥加密,公钥解密
查看ansible生成的文件
rpm -ql ansible
/etc/ansible
/etc/ansible/ansible.cfg
/etc/ansible/hosts
/etc/ansible/roles
ansible第一条命令
ansible 192.168.12.26 -m ping #ping一台主机
ansible 192.168.12.26,192.168.12.28 -m ping #ping多台主机
ansible all -m ping #ping所有主机
hosts文件内容
www[001:006].example.com www001到www006.example.com
host-pattern格式
单个机器;
多个机器,逗号隔开
全部机器,all
可以写一个分组
可以写多个分组
并集
逗号隔开
冒号隔开
交集:&隔开
差集:!隔开
命令相关command
ansible web -a 'ls'
ansible web -a 'chdir=/tmp pwd' #先切换目录,在执行相应的命令,一般情况下在编译时使用
ansible web -a 'creates=/tmp pwd'#如果creates的文件存在,则不执行后面的操作
ansible web -a 'removes=/tmp pwd'#如果removes的文件存在,则执行后面的操作
ansible web -a ‘removes=/tmp mkdir /data’ # 会执行后面的mkdir命令
ansible web -a 'creates=/data2 mkdir /data2' #会执行后面的mkdir命令
shell
<> | ; & $ 这些特殊字符command不支持
ansible web -m shell -a ‘echo “1” | passwd --stdin smmc’ #设置smmc的密码
ansible web -m shell -a ‘/root/a.sh’ #执行shell脚本
script
ansible db -m script -a ‘/root/a.sh’ #执行管控机上的文件
copy
ansible db -m copy -a "dest=/tmp/a.sh src=/root/m.sh"#复制文件到远程主机
ansible db -m copy -a "dest=/tmp/a.sh src=/root/m.sh backup=yes" #复制文件并备份远程文件
ansible web -m copy -a "dest=/tmp/a.sh src=/root/m.sh owner=smmc mode=700"#修改复制后的文件的属主和权限
ansible web -m copy -a "src=/tmp/init.d dest=/tmp"#复制目录到远程主机
ansible web -m copy -a "src=/etc/init.d/ dest=/tmp"#复制目录里的文件到远程主机
ansible web -m copy -a "src=/etc/ansible dest=/tmp owner=smmc"#复制目录到远程主机,并修改目录的属主,并且里面文件的属主也被修改了
ansible web -m copy -a “content='唧唧复唧唧' dest=/tmp/b.txt”#直接将content里的内容添加到dest的文件里
file
ln -s 原文件地址 目标文件地址 创建软连接
ln 创建硬链接
ansible all -m file -a "path=/tmp/smmc state=diretory"#创建一个目录
ansible all -m file -a "path=/tmp/smmc.txt state=touch" #创建一个文件
ansible all -m file -a "path=/tmp/smmc state=link src=/etc/init.d"#创建软链接,path是目标文件 src是源文件
ansible all -m file -a "path=/tmp/t state=absent" #删除文件
fetch
fetch用来拉取被管控机的文件或目录,每个被管控机创建一个文件夹,并且保留原来的目录结构
ansible web -m fetch -a 'dest=/tmp src=/var/log/cron'
ansible web -m pip -a 'name=flask'#安装pip包
service
ansible web -m service -a 'name=nginx state=started'#启动服务
ansible web -m service -a 'name=nginx state=stopped'#停止服务
cron
day:天 hour:小时 job:执行的任务 minute:分钟 month:月 name:名字 weekday:周
ansible web -m cron -a 'minute=10 job="touch /tmp/a.txt" name=touchfile'#新建计划任务
ansible web -m cron -a 'minute=10 job="touch /tmp/a.txt" name=touchfile disabled=yes'#关闭计划任务
ansible web -m cron -a 'name=touchfile state=absent'#删除计划任务
setup
ansible_all_ipv4_addresses 所有ipv4的地址
ansible_date_time 系统的时间
ansible_default_ipv4默认的ipv4的值
group
ansible db -m group -a ‘name=smmc’ #创建一个普通组
ansible db -m group -a ‘name=smmc state=absent’ #删除组
playbook剧本
yaml
语法校验:
#ansible-playbook --syntax-check ceshi.yml
playbook:ceshi.yml #正常
单个playbook
- hosts: cache
remote_user: root
tasks:
- name: createuser
user: name=smmc
- name: creategroup
group: name=smmc
- name: installredis
yum: name=redis
若为多台机器 执行过程:所有的机器都执行玩第一个任务,再去执行第二个任务
roles
在管控机的原配置文件中修改:(被管控机中配置文件所需的ip)