我创建了一个用于发布今天Ansible模块的推特机器人的故事

这篇文章是 Ansible 3 Advent Calendar 2019 第25天的文章。

我們這次創建了一個定期發推特的機器人,用於推送Ansible模塊的名稱,現在向您介紹一下。

Ansible模块介绍azure_rm_publicipaddress管理Azure公共IP地址支持的: 社区版本添加的: 2.1

Ansible模块介绍win_psmodule添加或删除Windows PowerShell模块支持社区版本添加:2.4https://t.co/Vc6w6j844n— matsumuratomonori (@ma2muratomonori) 2019年12月22日

Ansible模块介绍oneview_ethernet_network_info获取关于一个或多个OneView以太网网络的信息。supported_by: communityversion_added: 2.4https://t.co/5fJNdRZaaq — matsumuratomonori (@ma2muratomonori) December 22, 2019

Ansible模块介绍win_route 添加或删除静态路由 支持者:社区 版本添加:2.4

Ansible模块介绍script在将其传输至远程节点后,在远程节点上运行本地脚本supported_by: coreversion_added: 0.9https://t.co/TtWFWP07O0— matsumuratomonori (@ma2muratomonori) December 22, 2019

原型

今天的幸运Ansible模块 – 横地 (@akira6592) 2019年12月2日

今天非常想介绍一下模块的事情,还有愤怒的土豆@Ansible AWX 早日发布。(@angrypotato_jp) 2019年12月19日

代码库

GitHub上的python-tomo/twitter-ansible-bot

在这里已经包含了一个用于构建开发环境的Dockerfile,但实际的程序部分只有红框中的文件。

スクリーンショット 2019-12-24 21.11.40.png

用法

    1. 注册Twitter API并发行应用程序密钥

 

    1. 将CircleCI与存储库进行协作

 

    1. 将应用程序密钥注册到CircleCI

 

    在GitHub存储库中进行cron设置

1. 在Twitter API上注册并生成应用程序密钥。

请根据这个网站的信息参考注册步骤。

将CircleCI与代码仓库进行连接

スクリーンショット 2019-12-23 20.47.15.png

3. 在CircleCI上注册应用程序密钥。

スクリーンショット 2019-12-23 20.39.44.png
スクリーンショット 2019-12-23 20.36.27.png

在GitHub仓库中进行cron的配置。

在 `twitter-ansible-bot/.circleci/config.yml` 文件中配置 cron 设置。红框中的部分是分别存放 cron 设置和代码的分支。

只要初期设置是每小时的25分钟,脚本就会被执行并放置在测试分支中。

由于最开始的设置中只有一个主分支(master branch),因此可以使用以下命令在 GitHub 存储库中创建测试分支(test branch)。

一旦创建了测试分支,cron将会被启用。

cd twitter-ansible-bot
git branch test
Git checkout test
git push origin test
スクリーンショット 2019-12-24 22.25.52.png

只要在下面图像的红框部分进行的仓库push操作时,就会触发处理。如果在test分支上进行push操作时能立即执行推文,则说明设置成功。

スクリーンショット 2019-12-25 1.31.31.png

改进的地方

错误处理不严格。

我写了以下的代码来获取模块信息,但没有编写当无法获取模块信息时的错误处理。

ansible-doc -l | awk '{print $1}' > list.txt

# Get total number of modules
total_number=$(cat list.txt | wc -l)
echo ${total_number}

# Set module number
module_number=$(echo $(($RANDOM % ${total_number})))
echo ${module_number}

# Set module name by random number
module=$(sed -n ${module_number}p list.txt)
echo ${module}

# Get module name
ansible-doc ${module} -j | jq ".${module}.doc.module" > module.txt

# Get short_description
ansible-doc ${module} -j | jq ".${module}.doc.short_description" > short_description.txt

# Get supported_by 
ansible-doc ${module} -j | jq ".${module}.metadata.supported_by" > supported_by.txt

# Get version_added 
ansible-doc ${module} -j | jq ".${module}.doc.version_added" > version_added.txt

我想把bash部分改成Python3。

由于作者的Python能力不足,部分使用了bash。希望将这些部分替换为Python3。

希望未来能够用AWS Lambda来替代。

我希望将来能够将这个只能在具备bash处理能力的CircleCI上运行的Python脚本,转移到AWS Lambda上,以取代目前由Python能力较低的作者开发的版本。

以下为参考链接。

Twitter API的注册(账号申请方法)与获得批准的步骤概述 ※截至2019年8月的信息 | Qiita

广告
将在 10 秒后关闭
bannerAds