ansible管理模式:
特性:
Ansible执行过程
Ansible主要操作对象:
注意事项
相关文件
程序
ansible 命令使用
ansible all -list 主机清单列表,列出所有的
- ansible chen -list 列出单个的
–version 显示版本
-m 显示模块
-u 执行远程执行的用户
-k 提示输入ssh密码
-a 特有的参数 例如#ansible all -a ‘ls’
下载所需服务
hoc命令行
ansible-doc-c yum 查看支持的模块
1.进入/etc/ansible/hosts编辑,生成一个管理组
2.生成密钥 ssh -keygen
cd .ssh
3#cd .ssh 这是在当前目录下
#ls
id_rsa.pub 公钥
id_rsa 私钥
cd .ssh
将公钥拷进管理用户
#scp id_rsa.pub [email protected]:/root/ .ssh/authorized_keys
或者
#ssh-copy-id -i id_rsa.pub [email protected]
拷贝时产生此原因:
解决方案
vim ~/.ssh/known_hosts,将里面多余的删除
产生此原因报错Agent admitted failure to sign using the key.
解决方法:
#ssh-add
以上两种原因都是在之前拷贝过公钥后,在主机群里更改了ip地址,准备再来一次时发生的错误
4.命令使用
#ansible chen -m copy -a 'src=/root/qiu dest=/root/' 将文件qiu拷贝到其它虚拟机中
#ansible 192.168.1.12 -a '/root/1.sh'
不支持特殊符号>$|,需要用到shell模块
#ansible chen -m shell -a 'echo $HOSTNAME'
如何在所有主机上运行脚本 此处用到script script:运行脚本
先在管理主机上写好脚本,例如显示主机名,之后给予执行权限chmod +x test.sh
#ansible chen -m script -a '/root/test.sh'
复制移动文件时 在后面加backup=yes是指对文件进行备份
playbook
主要功能在于将事先归并为一组的主机装扮为事先通过ansible中的task定义好的角色。所谓task就是调用ansible的一个模块module。playbook采用YAML语言编写。
运行playbook
运行方式
ansible-playbook filename.yml options
常见选项
Ansible-vault命令
管理加密解密yml文件
ansible-playbook -C 检查yml文件写的是否正确
如果命令执行错误,则后续的命令不执行,如果需要执行,则我们可以在命令后加上 || /bin/true
vim test.yml
hosts #命令生效的组
remote_user #以root用户去执行
tasks: #任务
-name #任务名字
对更改httpd端口进行测试
- hosts: chen
remote_user: root
tasks:
- name: create new file
file: name=/root/newfile state=touch
- name: create new user
user: name=qiuchen
- name: start service
service: name=httpd state=started enabled=yes
- name: copy file
copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf backup=yes
notify: restart service #触发器,
handlers: #当copy file文件发生修改时,才会触发notify,执行handlers
- name: restart service
service: name=httpd state=restarted
迭代嵌套
roles
通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,并可以便捷地include它们的一种机制。角色一般用于基于主机构建服务的场景中,但也可以用于构建守护进程等场景中。
复杂场景:建议用roles,代码复用度高
变更指定主机或主机组
某些功能需多个playbook,通过includes可实现
建议保存地址为 /etc/ansible
- name: create user
user: name=nginx group=nginx system=yes shell=/sbin/nologin
# system=yes 代表系统用户
创建role
创建以roles命名的目录
在roles目录中分别建立以各角色名称命名的目录,如webservers等在roles目录中分别建立以各角色名称命名的目录,如webservers等
在每个角色命令的目录中分别创建files、handlers、meta、tasks、templates和vars目录;在每个角色命令的目录中分别创建files、handlers、meta、tasks、templates和vars目录,用不到目录可以不创建或者为空目录
在创建一个main.yml,指定文件顺序在创建一个main.yml,指定文件顺序
之后返回ansible目录下,建立main.yml文件,编辑调用roles,
- hosts: chen
remote_user: root
roles:
- httpd