Ansible 1.9升级2.4版本git模块bug修复方案
Posted 运维部落
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible 1.9升级2.4版本git模块bug修复方案相关的知识,希望对你有一定的参考价值。
目录
Ansible 1.9升级2.4版本git模块bug修复方案
一、问题
二、环境信息
三、场景还原
四、思路还原
五、1.9版本长级2.4版本还是要多做测试,目前遇到的2大问题
六、BUG ISSUE
一、问题
表向问题:使用ansible-playbook无法git pull git版本仓库分支版本
实际问题:使用Ansible-playbook无法从git版本库更新版本
二、环境信息
系统信息
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.8 (Final)
Release: 6.8
Codename: Final
Ansible版本信息
ansible 2.4.2.0
config file = /etc/ansible/ansible.cfg
三、场景还原
业务的config一直由运维维护,近期在做机房迁移涉及到两套config并行维护。因此在git上切换出cloud分支,使用git在新环境上部署cloud分支版本,发现一直是旧配置无法更新。起初还原Ansible无法拉取分支版本(表向问题),后经多次测试验证发现是配置无法拉取(实际问题)。
四、思路还原
发现问题
使用ansible-playbook发布config发面版本无法拉取
因拉的是分支版本,怀疑ansible不支持分支版本拉取
经google发现 version 支持分支、hash、tags等功能,经验证功能可行
怀疑git server异常,手动删除config目录,在console使用git pull手动拉取代码,并checkout发现均正常
怀疑ansible-playbook异常,使用ansible在console终端还原ansible-playbook命令发现均正常使用
ansible localhost -u root -m git -a 'repo=git-address.com dest=./ version=40bitsha1hash'
怀疑ansible-playbook yml异常,分拆 git 代码拉取的代码到 tmp.yml测试,替换所有的变量为实际参数,发现正常,拉取代码
注释原有的yml文件git pull代码段,替换为tmp.yml文件内容, 测试正常
tip:
这个时候已经非常怀疑ansible版本升级后的问题,但changelog看不出来有什么异常,暂无法下手和思路
想到ansible经常出现的引号问题尝试修改git pull代码的引号
旧代码
- name: Git pull php config
git: repo="{{ repository_php_config }}" dest="{{ configstore }}"config version="{{ git_commit }}"
新代码
- name: Git pull php config
git: repo="{{ repository_php_config }} dest={{ configstore }}config version={{ git_commit }}"
TIP
不出意外的报格式错
到这里的时候已经有点无解了,google也无法找到合适的信息。仔细对比两次的输出结果会发现,两次执行过程中 git 去比较的时候会有一个 before 和 after 输出,这两个输出,如果写的是变量格式 ,则before 和 after hash一致,因此不做变更,而直接写参数则内容不一致,会执行内容。
-vvvv 参数排查输出结果
返回成功但不执行(异常)
ok: [localhost] => {
"after": "9edab81f1c36d9b1ed207d987000a1265bb8cda5",
"before": "9edab81f1c36d9b1ed207d987000a1265bb8cda5",
"changed": false,
"invocation": {
"module_args": {
"accept_hostkey": false,
"archive": null,
"bare": false,
"clone": true,
"depth": null,
"dest": "/data/sa/AutomaticTool/files/config",
"executable": null,
"force": false,
"key_file": null,
"recursive": true,
"reference": null,
"refspec": null,
"remote": "origin",
"repo": "git@git.kingifa.com:OPS/php-config.git",
"ssh_opts": null,
"track_submodules": false,
"umask": null,
"update": true,
"verify_commit": false,
"version": "9edab81f1c36d9b1ed207d987000a1265bb8cda5"
}
},
"remote_url_changed": false
}
返回成功且正常执行(正常)
changed: [localhost] => {
"after": "9edab81f1c36d9b1ed207d987000a1265bb8cda5",
"before": null,
"changed": true,
"invocation": {
"module_args": {
"accept_hostkey": false,
"archive": null,
"bare": false,
"clone": true,
"depth": null,
"dest": "/data/sa/AutomaticTool/files/config",
"executable": null,
"force": false,
"key_file": null,
"recursive": true,
"reference": null,
"refspec": null,
"remote": "origin",
"repo": "git@git.kingifa.com:OPS/php-config.git",
"ssh_opts": null,
"track_submodules": false,
"umask": null,
"update": true,
"verify_commit": false,
"version": "9edab81f1c36d9b1ed207d987000a1265bb8cda5"
}
}
}
大家主要关注 before 和 after 两个参数的结果
实在没有办法,这里只能一点点试了,估计是1.9版本升级2.4版本兼容性问题的可能性大! 奇迹来了!!
然后问题就解决了。。。!! 所以升级 2.4版本后,playbook格式的书写最好缩进的方式书写,虽然现在只遇到git 模块。
五、1.9版本长级2.4版本还是要多做测试,目前遇到的2大问题
git pull模块变量使用方式,如上文内容
shell模块环境变量(非常繁杂,升级后遇到各类诡异问题)
解决方案:在要执行的shell模块中,事先声明环境变量 source /etc/profile
六、BUG ISSUE
*********千人系列群**********
以太python小范围沟通群:662769442
Ansible中文权威主群(3):372011984
AWK&SED企业实战(3): 260039357
Docker企业架构实践2群: 491533668ELK企业架构(2): 378216203
以上是关于Ansible 1.9升级2.4版本git模块bug修复方案的主要内容,如果未能解决你的问题,请参考以下文章