admin 管理员组

文章数量: 887016

Ansible在windows的使用

1.linux离线安装ansible

参考博客: ansible离线安装

相关的安装包:

链接:https://pan.baidu/s/1vqUSk3B_XKLAvzFGAr0HIw
提取码:3844

使用相关的命令进行安装:

# 安装包解压
tar -xzvf ansible-2.4-rpms.el7.tar.gz
# 进入安装包
cd ansible-2.4-rpms.el7
# 安装ansible依赖内容
rpm -ivh PyYAML*rpm libyaml*rpm python-babel*rpm python-backports*rpm python-backports-ssl_match_hostname*rpm python-cffi*rpm python-enum34*rpm python-httplib2*rpm python-idna*rpm python-ipaddress*rpm python-jinja2*rpm python-markupsafe*rpm python-paramiko*rpm python-passlib*rpm python-ply*rpm python-pycparser*rpm python-setuptools*rpm python-six*rpm python2-cryptography*rpm python2-jmespath*rpm python2-pyasn1*rpm sshpass*rpm --nodeps --force
# 安装ansible
rpm -ivh ansible-2.4.2.0-2.el7.noarch.rpm

安装完成后查看ansible的版本信息:

另外一种ansible的安装方式时使用 包装好 一个yum源进行安装,未尝试。

2.Linux安装第三方库

当前的python环境版本为2.7.5

下载第三方库,网址为: https://pypi/

离线安装的第三方库有:

pywinrm-0.4.2

ntlm-auth-1.1.0.tar.gz

requests_ntlm-1.1.0.tar.gz

xmltodict-0.12.0-py2.py3-none-any.whl

相关的版本信息如下:

3.配置windows系统

1.改powerShell的策略为remotesigned,否则运行不了powerShell脚本文件。

PS C:\Users\huangp> get-executionpolicy
Restricted
PS C:\Users\huangp> set-executionpolicy remotesigned
PS C:\Users\huangp> get-executionpolicy
RemoteSigned

2.如果Powshell版本不对,执行如下命令更新powshell的版本

目前我是用的是 powershell版本为 5.1.14393

# 查看windows的PowerShell的版本的方法
PS C:\Users\ywwei> host

所以我的版本不需要更新。

下面是更新版本信息命令。

#更新PowerShell 2.0到3.0的脚本:
#https://github/ansible/ansible/blob/devel/examples/scripts/upgrade_to_ps3.ps1
#调用的命令可以如下
PS C:\Users\huangp> & "E:/temp/upgrade_ps3.ps1"
#或者
PS C:\> powershell.exe -ExecutionPolicy RemoteSigned   -file "C:\p test.ps1"

3.配置远程控制

下载并运行https://github/ansible/ansible/blob/devel/examples/scripts/ConfigureRemotingForAnsible.ps1

如果嫌弃Github下载速度太慢:我上传了到了自己的阿里云盘 链接:https://www.aliyundrive/s/opYkwmSnQk5

# 进入我我自己的桌面
PS C:\Users\ywwei> cd C:\Users\ywwei\Desktop
# 执行下载后的powershell脚本
PS C:\Users\ywwei\Desktop> .\ConfigureRemotingForAnsible.ps1

4.在PowerShell中执行:

# 启动winrm
winrm qc
# 设置相关的配置
winrm set winrm/config/service '@{AllowUnencrypted="true"}'
winrm set winrm/config/service/auth '@{Basic="true"}'

5.查看winrm配置信息

# 查看winrm配置信息
winrm get winrm/config

4.配置Linux主机

4.1配置Linux主机清单

修改主机清单内容

# 添加以下内容
$ sudo vim /etc/ansible/hosts

Linux的主机清单如下所示:

# 个人电脑
[windows]
# ywwei的电脑
192.168.56.101 ansible_ssh_user="LG\ywwei" ansible_ssh_pass="Hitrend@0701" ansible_ssh_port=5985 ansible_connection="winrm" ansible_winrm_server_cert_validation=ignore ansible_winrm_transport=ntlm

# 大表架
[largeWatchStand]
# 表架6
192.168.41.29  ansible_ssh_user="admin" ansible_ssh_pass="dddddddd" ansible_ssh_port=5985 ansible_connection="winrm" ansible_winrm_server_cert_validation=ignore ansible_winrm_transport=ntlm
# 表架7
192.168.41.47  ansible_ssh_user="admin" ansible_ssh_pass="dddddddd" ansible_ssh_port=5985 ansible_connection="winrm" ansible_winrm_server_cert_validation=ignore ansible_winrm_transport=ntlm

# 点对点表架
[PointToPointMeterRack]
# 包含的测试用例有	浙江、山东、黑龙江、南网深化应用、QMD
192.168.91.62  ansible_ssh_user="user" ansible_ssh_pass="dddddddd" ansible_ssh_port=5985 ansible_connection="winrm" ansible_winrm_server_cert_validation=ignore ansible_winrm_transport=ntlm

查看主机清单内容

# 查看主机清单
$ sudo cat /etc/ansible/hosts

检查是否能够连通

# 查看是否ping通
$ ansible all -m win_ping

如果不能够连通,请检查,或者请查看我的踩坑记录是否有踩过坑。

4.2执行Ansible脚本

完成准备后,可以写个小例子进行测试验证

执行测试脚本

# 测试windows组是否连同
ansible windows -m win_ping
# 查看所有主机是否都可以连通
ansible all -m win_ping

连接成功:

4.3使用常用模块

4.3.1创建文件夹
ansible windows -m win_file -a 'dest=C:/test state=directory'
4.3.2远程执行cmd 命令
# 远程执行cmd 命令
ansible windows  -m win_shell -a 'ipconfig'

目前我的桌面上存在两个文件夹,A文件夹下面存放了 demo.txt 文件:

# 复制文件
ansible windows  -m win_shell -a 'copy D:\Users\ywwei\Desktop\A\demo.txt  D:\Users\ywwei\Desktop\B'
# 移动文件
ansible windows  -m win_shell -a 'move D:\Users\ywwei\Desktop\A\demo.txt  D:\Users\ywwei\Desktop\B'
# 修改文件名称
ansible windows  -m win_shell -a 'ren  D:\Users\ywwei\Desktop\A\demo.txt demo1.txt'
# 删除文件
ansible windows  -m win_file -a 'path=D:\Users\ywwei\Desktop\A\demo2.txt state=absent'
# 修改文件名称
ansible windows  -m win_shell -a 'ren  D:\Users\ywwei\Desktop\A\demo.txt demo1.txt'

# 使用cmd cllone代码
# clone command
git clone http://192.168.91.237:8929/test/python.git D:\Users\ywwei\Desktop\python
ansible windows  -m win_shell -a 'git clone http://192.168.91.237:8929/test/python.git D:\Users\ywwei\Desktop\python'
4.3.3文件目录操作
# 删除文件
ansible windows  -m win_file -a 'dest=c:\test\hosts.txt state=absent'
# 删除目录
ansible windows  -m win_file -a 'dest=c:\test state=absent'
# 传输文件到windows
ansible windows -m win_copy -a 'src=/etc/hosts dest=c:\test\hosts.txt'
4.3.4重启
# 重启 
ansible windows  -m win_reboot
ansible windows  -m win_shell -a 'shutdown -r -t 0'
4.3.5创建用户
# 创建用户
ansible 192.168.11.149 -m win_user -a "name=user1 passwd=123456"

4.4编写playbook

ansible-windows模块介绍:

Windows modules — Ansible Documentation

github示例网址:

https://github/ansible-collections/ansible.windows

创建一个目录名称为 playbook

# playbook语法检查
ansible-playbook --syntax-check hello.yml 
# 会尝试运行,然后进行语法检查
ansible-playbook -C hello.yml

# 执行playbook
ansible-playbook  hello.yml
4.4.1检查是否连接成功

创建一个main.yaml文件

# 测试windows组是否连同
ansible windows -m win_ping

# 这位写是不能够执行的
ansible windows -m ansible.windows.win_ping
- hosts: windows
  tasks:
    - name: Ensure connectivity
      win_ping:
4.4.2创建一个文件

创建一个createDirectoryStructure.yaml

- name: test win_file module
  hosts: windows
  tasks:
    - name: Create directory structure
      ansible.windows.win_file:
        path: C:\Temp\folder\subfolder
        state: directory
4.2.3更新文件

updateFileVersion.yaml

- name: Update burner version 
  hosts: windows
  vars:
    - burner_version: HiTrend_Flash_Programmer_int_v2.72.exe
  tasks:
    - name: Delete old burner
      win_file:
        path: D:\Jenkins\HFP.exe
        state: absent
        
    - name: Copy new burner
      win_copy:
        src: /home/user/work/ansible/burner/{{burner_version}}
        dest: D:\Jenkins\HFP.exe

检查文件语法是否合理:

ansible-playbook -C updateFileVersion.yaml

# 执行playbook
ansible-playbook updateFileVersion.yaml
4.2.4部署代码

主要功能:实现自动化部署python代码的playbook

- name: Deployment code
  hosts: windows
  vars:
    - burner_version: HiTrend_Flash_Programmer_int_v2.72.exe
  tasks:
    - name: Delete old burner
       :
        path: D:\Jenkins\HFP.exe
        state: absent
        
    - name: Copy new burner
      win_copy:
        src: /home/user/work/ansible/burner/{{burner_version}}
        dest: D:\Jenkins\HFP.exe

5.踩坑记录

5.1离线安装python winrm模块

有网络的情况下安装命令: pip install pywinrm

下载第三方库,网址为: https://pypi/

离线安装的第三方库有:

pywinrm-0.4.2

ntlm-auth-1.5.0.tar.gz \ ntlm_auth-1.0.1-py2.py3-none-any.whl (建议使用)

requests_ntlm-1.1.0.tar.gz

xmltodict-0.12.0-py2.py3-none-any.whl

安装第三方库时候出现的坑:

1.Error in ntlm-auth setup command: Invalid environment marker: python_versions"2.7"

解决方案:

使用下载的 ntlm_auth-1.0.1-py2.py3-none-any.whl 方式进行安装,这是因为我使用的是ntlm_auth-1.0.1-py2.py3-none-any.whl安装方式进行安装的。使用另外一种方式安装后,成功。

2.but you’ ll have requests 2.6.0 which is incompatible

在安装的过程中出现这些提示信息,需要使用相应的安装包版本进行安装,版本太低或者太高都不行。

3.Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None))

WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError (' spip._vendor. ur11ib3. connection. HTTPSConnection object at 0x7f024a55c590x: Failed to establish a new connection: [ Errno 101] Network is unreachable',)': /simple/six/E

这个原因是因为在内网进行的安装,不能够连接到外部网络,所以会出现这个错误,所以可以进行使用 ntlm-auth-1.5.0.tar.gz 的方式安装第三方库,然后进行查看具体的信息,需要依赖于其他的什么的第三方库。

4.提示信息:不能找到相应的文件目录

尝试使用以下命令进行设置:

添加相应的 --target 信息

5.2以太网设置

Error: 由于此计算机上的网络连接类型之一设置为公用,因此 WinRM 防火墙例外将不运行。 将网络连接类型更改为域或专用,然后再次尝试。

打开以太网设置后

将网络设置为专用后就可以了,重新执行相关命令。

5.3连接不上被管理机器

1.“msg”: “plaintext: the specified credentials were rejected by the server”,

# 编辑主机的配置文件,添加以下字段
ansible_winrm_transport=ntlm

2.'msg‘: "ssl: the specified credentials were rejected by the server"

这个是因为在主机清单中缺少 ansible_ssh_port=5985 ,请仔细检查主机清单中的配置信息

3.连接超时

这个可能用户名或者密码写错了。

5.4在cmd中可以运行windos命令,而playbook报错

在cmd中运行的命令,并不能保证在powershell中可以运行。

本文标签: ansible Windows