跳过正文
  1. Posts/

Ansible 实践

·724 字·2 分钟· ·
沈显鹏
作者
沈显鹏
目录

最近在思考如何将团队里的所有的虚拟机都很好的管理并监控起来,但是由于我们的虚拟机的操作系统繁多,包括 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               # save all hosts you want to monitor
+- run.yml             # ansible executable file

Playbook具体代码
#

vars/vars.yml

---
# system
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

---
# this playbook is simple test
- 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,然后执行

# run with playbook
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

相关文章

写给那些想使用 JFrog Artifactory 管理制品的人
·2825 字·6 分钟
本文介绍了 JFrog Artifactory 的概念、优势、工作原理以及最佳实践,帮助读者了解如何使用 Artifactory 管理软件制品。
程序员自我修养之Git提交信息和分支创建规范
·2408 字·5 分钟
本文介绍了如何制定和实施 Git 提交信息和分支创建规范,以提高代码质量和团队协作效率。
在 GitHub 上发布一个 Python 项目需要注意哪些
·1458 字·3 分钟
本文介绍个人或企业在 GitHub 上发布一个 Python 项目需要了解和注意的内容,包括项目结构、依赖管理、版本控制等方面的建议。
关于 Python pip install 与版本管理
·718 字·2 分钟
解释 pip install 在不同版本号场景下的行为,包括如何处理 beta 版本,以及在指定版本号时使用 --upgrade 的影响。
使用 REST API 更新 Jira Server 账号头像
·215 字·1 分钟
介绍如何通过 Jira REST API 更新 Jira Server 账号的头像,并提供 Python 和 Postman 示例。
解决 “Remote session was disconnected because there are no Remote Desktop client access licenses available”
·262 字·1 分钟
修复 Windows Server 2012 R2 上的 RDP 连接问题,错误提示为没有可用的远程桌面客户端访问许可证。