自动化支持操作(StackStorm第三次调优)
首先
在第二次尝试中,我们试图启动Docker版的StackStorm,但由于字符编码问题而遇到了困难。
背景和目的
背景
在之前的尝试中,我使用Docker版StackStorm来使用Ansible Pack,但文件路径中包含了日语,所以遇到了错误而被拒绝。
这一次,我将避免这个问题,通过StackStorm来运行Ansible Playbook。
目前阶段的问题
-
- Docker版StackStormの文字コード問題
-
- Docker版StackStormでのAnsible Pack動作確認
- DockerコンテナからのAnsible実行
中文的翻译是什么?
我们将通过使用StackStorm作为前端,省去登录和创建配置文件的麻烦,并能够通过图形用户界面进行操作。
这次要做的事情
-
- 文字コード問題の回避(力技、運用で回避)
-
- Docker版StackStormでAnsible Packを動作させるために必要なパッケージのインストール
- コンテナからのAnsible実行に必要な設定の追加
这次不做的事情
-
- 独自Dockerイメージの作成
- 文字コード問題の根本解決(根が深い…)
步骤
避免文字编码问题(使用技巧)。
来自呼叫中心共享的日志文件夹路径格式如下:
\服务器名称\共享\客户收集日志<产品种类><客户名称><案件ID>\yyyymmdd
在本次操作中,“客户收集日志”和“<产品种类>”中包含了日语。
幸运的是,客户名称已经统一以字母方式表达。
我們將彻底排除日文文件夾名(用强力手段)。
1. 改变输入参数
在第一次的Ansible Playbook中,将来自呼叫中心的文件夹路径作为所有的输入参数,
并进行本地路径的替换。
现在将其改为将客户名称及其以下的文件夹与本地挂载点进行结合的方法。
replace_path: '{{ base_path | regex_replace("\\","/") }}'
samba_path: '{{ replace_path | replace("//IPアドレス/share/お客様取得ログフォルダ","/mnt/logs") }}'
replace_path: '{{ base_path | regex_replace("\\","/") }}'
samba_path: "/mnt/logs/{{ replace_path }}"
安装在Docker上运行Ansible Pack所需的StackStorm版本所需的软件包。
当进行Ansible Pack的操作确认时,会出现缺少cryptography的错误提示。由于StackStorm的Ansible位于/opt/stackstorm/virtualenvs/ansible目录下,因此需要在virtualenv中安装cryptography。
1. 添加包裹的方法
docker-compose exec stackstorm /opt/stackstorm/virtualenvs/ansible/bin/pip install cryptography==2.2.2
请参考以下链接来了解关于ST2、Ansible和Pip的内容:https://tekunabe.hatenablog.jp/entry/2018/05/19/st2_ansible_pip
现在Ansible Pack可以正常运行了。
只需要一个选项就足够了:
添加从容器执行Ansible所需的配置。
在与运行Ansible Playbook的主机相同的主机上运行Docker版本的StackStorm。然而,在Ansible中,它们被视为不同的主机。需要调整第一次创建的Playbook的库存配置。
1. 库存设置
原来的代码很懒惰,指定了本地地址。
这样无法访问容器外的主机,所以需要进行修正。
因此,由于IP地址指定未包含主机,将其视为无主机处理,因此我们将正确设置库存配置。
我们将在Docker版的StackStorm中添加以下配置。
[dockerhost]
<ローカルホストのIPアドレス>
-
- 设置Keypair
-
- 由于使用SSH进行连接,因此需要进行Keypair设置。
-
- 从本地主机到Docker版StackStorm进行Keypair设置。
- 在此过程中,还会自动复制公钥并添加到Known_hosts中。
docker-compose exec stackstorm ssh-keygen -q -t rsa -f /root/.ssh/id_rsa -N ""
docker-compose exec stackstorm cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
docker-compose exec stackstorm sh -c "ssh-keyscan -H <ローカルホストのIPアドレス> >> /root/.ssh/
known_hosts"
如果已经完成到这一步,那么在启动Docker版StackStorm之后,将脚本添加到执行脚本中。
#! /bin/sh
docker-compose exec stackstorm apt-get install libkrb5-dev -y
docker-compose exec stackstorm st2 login st2admin -p 6IrPJtM9 --write-password
docker-compose exec stackstorm st2 pack install ansible
docker-compose exec stackstorm ln -s /root/rcpsupport /opt/stackstorm/packs/rcps
upport
docker-compose exec stackstorm st2ctl reload
docker-compose exec stackstorm /opt/stackstorm/virtualenvs/ansible/bin/pip insta
ll cryptography==2.2.2
docker-compose exec stackstorm ssh-keygen -q -t rsa -f /root/.ssh/id_rsa -N ""
docker-compose exec stackstorm cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorize
d_keys
docker-compose exec stackstorm sh -c "ssh-keyscan -H <ローカルホストのIPアドレス> >> /root/.ssh/
known_hosts"
docker-compose exec stackstorm mkdir /etc/ansible
docker-compose exec stackstorm sh -c 'echo "[dockerhost]" >> /etc/ansible/hosts'
docker-compose exec stackstorm sh -c 'echo "<ローカルホストのIPアドレス>" >> /etc/ansible/hosts'
现在StackStorm和Ansible Playbook已经准备好了。
自此以后,任何人(只要知道参数)都可以通过图形界面启动数据库容器。
未完成的问题
由于无法通过日语的字符编码,这个问题将来可能在某个地方会遇到困难,所以我希望能改正它… 另外,写到这里我才意识到我忘记写下工作流程的细节了。
总结/下次预告
我正在等待我以为已经结束的Kanno-san,但等待我的只是未完成的事前准备工作。缺席的Workflow详细信息催促下一篇文章的发布。
下一篇是关于”Workflow”。我也被迫介绍删除处理。