最近在思考如何将团队里的所有的虚拟机都很好的管理并监控起来,但是由于我们的虚拟机的操作系统繁多,包括 Windows, Linux, AIX, HP-UX, Solaris SPARC 和 Solaris x86. 到底选择哪种方式来管理比较好呢?这需要结合具体场景来考虑。
Ansible 和其他工具的对比 这里有一个关于 Chef,Puppet,Ansible 和 Saltstack 的对比文章
https://www.edureka.co/blog/chef-vs-puppet-vs-ansible-vs-saltstack/
选择合适的工具 仅管理 Windows 和 Linux 如果你的虚拟机没有这么多平台,只是 Windows 和 Linux,假如你已经有了 VMware vSphere 来管理了,那么可以通过 VMware vSphere API 来查看这些机器的状态。
这里是 VMware 官方的 API Library 供使用:
管理多个操作系统 如果你和我的情况一下,想监控很多个操作操作系统,那么就只能通过 ssh 来登录到每一台机器上去查看,比如执行 uptime
等命令。可以写 shell 脚本来完成这些登录、检测等操作。
另外就是使用 Ansible 的 Playbook。Playbook 里描述了你要做的操作,这是一个权衡,学习 Ansible 的 Playbook 需要花些时间的。
如果想了解下 Ansible 那么可以试试 Ansible Playbook。以下是我使用 Ansible 做了一些练习。
Playbook结构 +- vars | +- vars.yml | +- ... +- hosts +- run.yml
Playbook具体代码
vars/vars.yml
--- ip: "{{ ansible_default_ipv4['address'] }} " host_name: "{{ ansible_hostname }} " os: "{{ ansible_distribution }} " version: "{{ ansible_distribution_version }} " total_mb: "{{ ansible_memtotal_mb }} " vcpus: "{{ ansible_processor_vcpus }} "
hosts
[unix-vm ] aix ansible_host=walbld01.dev.company.com ansible_user=test ansible_become_pass=test hp-ux ansible_host=walbld04.dev.company.com ansible_user=test ansible_become_pass=test linux ansible_host=walbld05.dev.company.com ansible_user=test ansible_become_pass=test [win-vm ] win-bld02 ansible_host=walbld02.dev.company.com ansible_user=Administrator ansible_password=admin ansible_port=5985 ansible_connection=winrm ansible_winrm_server_cert_validation=ignore [other-vm ] solaris ansible_host=walbld07.dev.company.com ansible_user=test ansible_become_pass=test win-udb03 ansible_host=walbld03.dev.company.com ansible_user=administrator ansible_become_pass=admin
run.yml
--- - name: "get unix build machine info" hosts: unix-vm gather_facts: True tasks: - name: get uname, hostname and uptime shell: "uname && hostname && uptime" register: output - debug: var=output['stdout_lines'] - name: "get windows build machine os info" hosts: win-vm gather_facts: True tasks: - debug: var=hostvars['win-bld02'].ansible_facts.hostname - debug: var=hostvars['win-bld02'].ansible_distribution
如何执行 首先需要安装了 ansible,然后执行
ansible-playbook -i hosts run.yml
注:上面的代码是脱敏过的,需要根据你的环境进行调整才能执行成功。
Ansible TroubleShotting "msg": "winrm or requests is not installed: No module named winrm"
Need install pywinrm
on your master server.
“msg”: “plaintext: auth method plaintext requires a password”
when I run ansible mywin -i hosts -m win_ping -vvv
, I notice the output used Python2.7, so I install pywinrm
with command sudo pip2 install pywinrm
, then my problem was resolved.
mywin | UNREACHABLE! => { "changed" : false , "msg" : "plaintext: auth method plaintext requires a password" , "unreachable" : true }
Result: You should be using ansible_password and not ansible_pass. link