Java教程

ansible 与windows连通和配置文件

本文主要是介绍ansible 与windows连通和配置文件,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

最近公司在做一个自动化压力测试的产品,需要从一个master控制节点自动化地控制各节点,master是centOS,node是windows

ansible官网介绍:

Ansible 是一种安装在控制节点上的无代理自动化工具。Ansible 从控制节点远程管理机器和其他设备(默认情况下,通过 SSH 协议)。

要安装 Ansible 以在命令行中使用,只需在一台机器上安装 Ansible 包(很容易就是一台笔记本电脑)。您不需要安装数据库或运行任何守护程序。Ansible 可以从一个控制节点管理一整套远程机器。

 

ansible基于python的一些运维工具开发,现在属于RedHat公司管理。

目前要实现的功能是master用ansible从节点中读取一些文件的内容并把内容返回,但是光ping通就花了我一下午。

为了测试ansible我先创建了两个云主机,一个master一个node

安装应该挺简单,因为我们云主机的镜像自带了ansible我就没自己安装。

首先要测试连接吧,我直接ansible all -m ping 

结果当然是失败了

 

然后发现ping的是镜像里面的节点,不是我的另一个云主机,然后我就找到了hosts文件改了ip地址,hosts文件位置在 /etc/ansible/hosts

 hosts文件可以是ini格式和YAML格式,还可以分组、设置变量、循环,很复杂的我也没看懂,反正最简单的就是把node节点的地址放上去就完了,具体hosts文件说明:https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#intro-inventory 

我只换了一个,还是ping不通,报错如下:

[WARNING]: No python interpreters found for host 192.168.173.48 (tried ['/usr/bin
'python3.6', 'python3.5', 'python2.7', 'python2.6', '/usr/libexec/platform-python
'python'])
192.168.173.48 | FAILED! => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "module_stderr": "Exception calling \"Create\" with \"1\" argument(s): \"At lsiballz_main():\r\n+                     ~\r\nAn expression was expected after '(\n+     except (AttributeError, OSError):\r\n+                           ~\r\nMis list.\r\nAt line:15 char:7\r\n+     if scriptdir is not None:\r\n+       ~\r\nMi statement.\r\nAt line:22 char:7\r\n+     if sys.version_info < (3,):\r\n+       ' in if statement.\r\nAt line:22 char:30\r\n+     if sys.version_info < (3,):\r\n     ~\r\nMissing expression after ','.\r\nAt line:22 char:25\r\n+     if sys.ver                     ~\r\nThe '<' operator is reserved for future use.\r\nAt linenvoke_module(modlib_path, temp_path, json_params):\r\n+                          ent in parameter list.\r\nAt line:28 char:40\r\n+         z = zipfile.ZipFile(mod                                      ~\r\nMissing argument in parameter list.\r\       zinfo = zipfile.ZipInfo()\r\n+                                 ~\r\nAn exp '('.\r\nAt line:34 char:25\r\n+         z.writestr(zinfo, sitecustomize)\r\n+   nMissing argument in parameter list.\r\nNot all parse errors were reported.  Corrd try again.\"\r\nAt line:6 char:1\r\n+ $exec_wrapper = [ScriptBlock]::Create($sp~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n    + CategoryInfo          : odInvocationException\r\n    + FullyQualifiedErrorId : ParseException\r\n \r\nThe pipeline element produced an object that was not valid. It must result in a commck, or a CommandInfo object.\r\nAt line:7 char:2\r\n+ &$exec_wrapper\r\n+  ~~~~~~nfo          : InvalidOperation: (:) [], RuntimeException\r\n    + FullyQualifiedn ", 
    "module_stdout": "", 
    "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", 
    "rc": 1
}

 

windows节点上是肯定安了python的,机智的我立马看出来是没检测到python文件,然后百度和Google双管齐下,最后信了某些论坛的鬼话,自己加了个配置文件,指定windows节点系统的python路径:

vi /root/.ansible.cfg

在里面加了一条:

ansible_python_interpreter=c : iProgram Files\Python36

然后继续

ansible all -m ping

 期间我还进行了更新python版本、检查path路径等操作,都是不行,最后我发现,ansible他娘的根本不支持windows的python用法!

 

 

 

https://docs.ansible.com/ansible/latest/user_guide/windows_faq.html

也就是说,只有列出来的几个命令行可以用,刚才使用的是不能用到windows上面的。

想pingwindows的话,要用

 ansible all -i hosts -m win_ping

但是,又出现了问题:

[WARNING]: Unable to parse /root/hosts as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that t
does not match 'all'

没有读取到hosts文件。

又搞了好久才发现是我刚才用vi /root/.ansible.cfg创建的配置文件,覆盖了原来的配置文件,而新的配置文件并没有指明hosts的路径,导致ansible找不到hosts列表了

附配置文件优先级列表:

 

 ansible从上往下扫描,先扫描到哪个就用哪个,默认的地方是最低优先级。

最后终于ping通啦,hello ansible!

 

 总结一下,就是本来只是命令输错了,结果以为配置文件有问题,把配置文件改了,后来用正确的命令也出错了,把配置文件改回来才弄好。

其实啥也没干,但是浪费了一下午。。

 

这篇关于ansible 与windows连通和配置文件的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!