相关专业术语
1 | IaaS 基础设施即服务 |
安装ansible
需要使用epel源安装
1 | [root@ansible ~]#yum -y install ansible |
ansible特性
1 | 模块化:调用特定的模块,完成特定的内容 |
Ansible主要组成部分
INVENTORY(主机清单)
存放在/etc/ansible/hosts
查看主机清单中的主机数
1 | [root@ansible ~]#ansible all --list-hosts |
查看主机清单中某个分组的主机数
1 | [root@ansible ~]#ansible groupname --list-hosts |
查看即在A组又在B组中的主机数
1 | [root@ansible ~]#ansible "A:&B" --list-hosts |
查看A组合B租中的所有有主机数
1 | [root@ansible ~]#ansible "A:B" --list-hosts |
查看在A组中却不在B组中的主机数
1 | [root@ansible ~]#ansible 'A:!B' --list-hosts |
有叹号只能用单引号
ansible配置文件修改以提高工作效率
ansible配置文件中的默认值说明
1 | [defaults] |
启用ansible日志功能
1 | [root@ansible ~]#sed -i -r '/log_path/s/#(.*)/\1/' /etc/ansible/ansible.cfg |
禁用ssh_key检查
1 | [root@ansible ~]#sed -i -r '/ssh_key_checking/s/#(.*)/\1/' /etc/ansible/ansible.cfg |
ansible命令的执行过程
1 | 加载自己的配置文件,默认为/etc/ansible/ansible.cfg |
命令执行状态
1 | 绿色:执行成功并且不需要做改变的操作 |
ansible系列命令
ansible-vault 给敏感文件加密或解密
1 | Usage: ansible-vault [create|decrypt|edit|encrypt|encrypt_string|rekey|view] [options] [vaultfile.yml] |
ansible-console
可交互执行命令
ansible-galaxy
连接https://galaxy.ansible.com 下载响应的roles
列出所有已经安装的Galaxy
ansible-galaxy list
安装Galaxy
ansible-galaxy install roles-name
ansible常见模块介绍
修改默认模块
1 | [root@ansible ~]#sed -i -r '/module_name/s/.*/module_name = shell/' /etc/ansible/ansible.cfg |
command模块
在远程主机执行linux命令
shell模块
script模块
调用脚本在远程主机执行
使用方法
1 | [root@ansible ~]#ansible all -m script -a "脚本的绝对路径" |
copy模块
将服务器文件复制到客户端
使用案例:将本机/root/playbook/install_nginx.yml文件拷贝到websrvs组各主机的/data目录下,并制定权限和属主,如果木变主机存在同名文件,则先备份后复制。
1 | [root@ansible ~]#ansible websrvs -m copy -a "src=/root/playbook/install_nginx.yml dest=/data/ mode=644 owner=msq backup=yes" |
fetch模块
从客户端呢拉取文件至服务器,与copy模块功能相反,目录可先打包tar
使用案例,将websrvs组中的主机上/data目录中的install_nginx.yml文件拉取到本机的/data目录下
1 | [root@ansible ~]#ansible websrvs -m fetch -a 'src=/data/install_nginx.yml dest=/data/' |
此时/data目录结构是这样的
1 | [root@ansible ~]#tree /data/ |
说明:从目标主机拉取文件,会放到指定dest下以目标主机ip为名字的文件夹下
file模块
设置文件属性
使用案例1:将websrvs组中的主机的/data/install_nginx.yml文件的属主改为msq,权限设为600.
开始其属性如下:
1 | [root@ansible ~]#ansible websrvs -a 'ls -l /data/install_nginx.yml' |
更改属性:
1 | [root@ansible ~]#ansible websrvs -m file -a 'path=/data/install_nginx.yml owner=msq mode=600' |
之后在查看:
1 | [root@ansible ~]#ansible websrvs -a 'ls -l /data/install_nginx.yml' |
使用案例2:为websrvs组的各主机上的/data/install_nginx.yml文件创建软连接
创建测试文件
1 | [root@ansible ~]#ansible websrvs -m file -a 'dest=/data/f1 state=touch' |
创建软连接
1 | [root@ansible ~]#ansible websrvs -m file -a 'src=/data/f1 dest=/data/f1.link state=link' |
cron模块
管理计划任务
使用案例:为主机列表中的额所有主机设置定时任务
1 | [root@ansible ~]#ansible all -m cron -a 'name=synctime minute=*/5 job="ntpdate 192.168.34.103 &> /dev/null"' |
临时禁用上一步设置的定时任务
1 | [root@ansible ~]#ansible all -m cron -a 'name=synctime minute=*/5 job="ntpdate 192.168.34.103 &> /dev/null" disabled=yes' |
再启用刚才禁用的计划任务
1 | [root@ansible ~]#ansible all -m cron -a 'name=synctime minute=*/5 job="ntpdate 192.168.34.103 &> /dev/null" disabled=false' |
禁用的时候,不能只加name,需要加计划任务的内容
永久删除该计划任务
1 | [root@ansible ~]#ansible all -m cron -a 'name=synctime minute=*/5 job="ntpdate 192.168.34.103 &> /dev/null" state=absent' |
删除的时候可以只加name
yum模块
利用yum管理安装包
使用案例1:安装NGINX
1 | [root@ansible ~]#ansible all -m yum -a 'name=nginx' |
使用案例2:删除NGINX,连带删除安装NGINX是安装的依赖包
1 | [root@ansible ~]#ansible all -m yum -a 'name=nginx autoremove=yes' |
service模块
管理服务
开启服务,并加入开机自启动
1 | [root@ansible ~]#ansiblde websrvs -m service -a 'name=httpd state=started enabled=yes' |
除此之外,state还有restarted reload stop 等各种状态。
user模块
管理用户
创建用户test,并指定uid,主组,从组,家目录,shell,描述,
1 | [root@ansible ~]#ansible websrvs -m user -a 'name=test uid=1024 group=root groups=msq shell=/bin/csh comment="this is a test" ' |
删除用户连带删除家目录
1 | [root@ansible ~]#ansible websrvs -m user -a 'name=test state=absent remove=yes' |