python 用于管理github存储库的Ansible模块
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 用于管理github存储库的Ansible模块相关的知识,希望对你有一定的参考价值。
#!/usr/bin/python
DOCUMENTATION = '''
---
module: github_repo
short_description: Manage your repos on Github
'''
EXAMPLES = '''
- name: Create a github Repo
github_repo:
github_auth_key: "..."
name: "Hello-World"
description: "This is your first repository"
private: yes
has_issues: no
has_wiki: no
has_downloads: no
register: result
- name: Delete that repo
github_repo:
github_auth_key: "..."
name: "Hello-World"
state: absent
register: result
'''
from ansible.module_utils.basic import *
import requests
api_url = "https://api.github.com"
def github_repo_present(data):
api_key = data['github_auth_key']
del data['state']
del data['github_auth_key']
headers = {
"Authorization": "token {}" . format(api_key)
}
url = "{}{}" . format(api_url, '/user/repos')
result = requests.post(url, json.dumps(data), headers=headers)
if result.status_code == 201:
return False, True, result.json()
if result.status_code == 422:
return False, False, result.json()
# default: something went wrong
meta = {"status": result.status_code, 'response': result.json()}
return True, False, meta
def github_repo_absent(data=None):
headers = {
"Authorization": "token {}" . format(data['github_auth_key'])
}
url = "{}/repos/{}/{}" . format(api_url, "toast38coza", data['name'])
result = requests.delete(url, headers=headers)
if result.status_code == 204:
return False, True, {"status": "SUCCESS"}
if result.status_code == 404:
result = {"status": result.status_code, "data": result.json()}
return False, False, result
else:
result = {"status": result.status_code, "data": result.json()}
return True, False, result
def main():
fields = {
"github_auth_key": {"required": True, "type": "str"},
"name": {"required": True, "type": "str"},
"description": {"required": False, "type": "str"},
"private": {"default": False, "type": "bool"},
"has_issues": {"default": True, "type": "bool"},
"has_wiki": {"default": True, "type": "bool"},
"has_downloads": {"default": True, "type": "bool"},
"state": {
"default": "present",
"choices": ['present', 'absent'],
"type": 'str'
},
}
choice_map = {
"present": github_repo_present,
"absent": github_repo_absent,
}
module = AnsibleModule(argument_spec=fields)
is_error, has_changed, result = choice_map.get(
module.params['state'])(module.params)
if not is_error:
module.exit_json(changed=has_changed, meta=result)
else:
module.fail_json(msg="Error deleting repo", meta=result)
if __name__ == '__main__':
main()
以上是关于python 用于管理github存储库的Ansible模块的主要内容,如果未能解决你的问题,请参考以下文章
sh 用于备份组织的所有GitHub存储库的Shell脚本
Github 操作无法从 Github 包存储库下载工件
github存储库的本地缓存?
如何获得GitHub存储库的贡献者总数?
来自私人 github 存储库的 Pip install wheel
在 Python 中从克隆的 GitHub 存储库创建 Zip 存档