运维编排系列场景-----快速生成模版shell命令

本文涉及的产品
系统运维管理,不限时长
简介: 应用场景 当通过模版的方式在一台机器上运行shell文件时,需要在模版中把当前的所有shell命令都需要手动操作写进模版中,并添加需要写入的shell文件,尤其是遇到一些需要转译的特殊字符时,还需要手改,操作较为浪费时间。

应用场景

当通过模版的方式在一台机器上运行shell文件时,需要在模版中把当前的所有shell命令都需要手动操作写进模版中,并添加需要写入的shell文件,尤其是遇到一些需要转译的特殊字符时,还需要手改,操作较为浪费时间。

解决方案

把当前需要修改的shell命令写入一个本地shell文件,通过python脚本的方式来实现把此文件内的所有命令转化为某一种特定的形式,及解决转化后的脚本特殊字符写进模版中转译的问题,转化的脚本可以直接输入到模版中运行,并保留格式。

一、转化shell脚本
下面为用python实现的转化脚本,并将脚本命名为:oos_convert

import re
import sys

commands = sys.argv
# 要翻译的shell 脚本
file_path = '' or commands[1]


def translate():
    with open(file_path, 'r+', encoding='utf-8') as f:
        lines = f.readlines()
        for index, line in enumerate(lines):
            
            if index == 0:
                continue
                # print()
            new_line = repr(line).replace('\\t', '    ').replace('\\n', '').strip("'")
            if new_line.startswith('"'):
                print(new_line + ',')
            else:
                rep_line = new_line.replace('"', '\\"')
                print('"' + rep_line + '",')


translate()

Python脚本的运行方式:
运行命令:python oos_convert.py xxx.sh (例如:python oos_convert.py ~/command.sh)或者在pycharm等编辑工具中直接运行,在编辑工具中需要将file_path根据实际需求来补充。

如下所示为一个shell文件内的命令
1567761411992_ea00a2c9_4dcc_4b34_bec9_f876f1676f55

将以上python代码写入到一个自定义命名的py的文件中,在命令行中用python运行此文件,其运行结果如下所示,并将运行出来的结果复制到JSON格式的模版中。
1567761411992_ea00a2c9_4dcc_4b34_bec9_f876f1676f55

二、打开控制台,找到运维编排
1565003706926_e0d50d39_3648_406f_9d6f_97dd05fa5e4c

三、创建模版

1567761700289_99ff4a15_c204_4227_8561_a8f1f53307f0

按如下所示编辑模版,并将python脚本转化的内容,复制到下面的模版中。注意:此脚本转化的内容仅支持JSON格式。

{
    "FormatVersion": "OOS-2019-06-01",
    "Description": "Creates a cloud assistant command and triggers it on one ECS instance.",
    "Parameters": {
        "instanceId": {
            "Description": "The ID of ECS instance that will invoke command.",
            "Type": "String",
            "AllowedPattern": "i-[A-Za-z0-9]*",
            "MinLength": 1,
            "MaxLength": 30
        },
        "regionId": {
            "Type": "String"
        },
        "OOSAssumeRole": {
            "Description": "The RAM role to be assumed by OOS.",
            "Type": "String",
            "Default": "OOSServiceRole"
        }
    },
    "RamRole": "{{ OOSAssumeRole }}",
    "Tasks": [
        {
            "Name": "createCommand",
            "Action": "ACS::ExecuteAPI",
            "Description": "Creates a cloud assistant command.",
            "Properties": {
                "Service": "ECS",
                "API": "CreateCommand",
                "Parameters": {
                    "CommandContent": {
                        "Fn::Base64Encode": {
                            "Fn::Join": [
                                "\n",
                                [
                                    "echo hello world",
                                    "echo hello world",
                                    "",
                                    "echo \\$hello,this is aliyun",
                                    "echo $hello,this is aliyun",
                                    "",
                                    "if [[ \"a\" == \"a\" ]]; then",
                                    "  echo hello",
                                    "else",
                                    "  echo word",
                                    "fi",
                                    "",
                                    "echo 'hi judy'"
                                ]
                            ]
                        }
                    },
                    "RegionId": "{{ regionId }}",
                    "Name": "{{ ACS::ExecutionId }}",
                    "Type": "RunShellScript",
                    "WorkingDir": "/root",
                    "Timeout": 30
                }
            },
            "Outputs": {
                "CommandId": {
                    "Type": "String",
                    "ValueSelector": "CommandId"
                }
            }
        },
        {
            "Name": "invokeCommand",
            "Action": "ACS::ExecuteAPI",
            "Description": "Triggers a cloud assistant command on one ECS instances.",
            "Properties": {
                "Service": "ECS",
                "API": "InvokeCommand",
                "Parameters": {
                    "CommandId": "{{ createCommand.CommandId }}",
                    "InstanceIds": [
                        "{{ instanceId }}"
                    ],
                    "RegionId": "{{regionId}}"
                }
            },
            "Outputs": {
                "InvokeId": {
                    "Type": "String",
                    "ValueSelector": "InvokeId"
                }
            }
        },
        {
            "Name": "untilInvocationReady",
            "Action": "ACS::WaitFor",
            "Description": "Waits for the command to be completed.",
            "Delay": 20,
            "Retries": 30,
            "DelayType": "Constant",
            "Properties": {
                "Service": "ECS",
                "API": "DescribeInvocations",
                "Parameters": {
                    "RegionId": "{{regionId}}",
                    "InvokeId": "{{ invokeCommand.InvokeId }}"
                },
                "DesiredValues": [
                    "Finished"
                ],
                "StopRetryValues": [
                    "Failed"
                ],
                "PropertySelector": "Invocations.Invocation[].InvokeStatus"
            },
            "OnError": "deleteCommand"
        },
        {
            "Name": "describeInvocationResults",
            "Action": "ACS::ExecuteAPI",
            "Description": "Views the command output of a cloud assistant command in the specified ECS instance.",
            "Properties": {
                "Service": "ECS",
                "API": "DescribeInvocationResults",
                "Parameters": {
                    "RegionId": "{{regionId}}",
                    "InvokeId": "{{ invokeCommand.InvokeId }}"
                }
            },
            "Outputs": {
                "InvocationResult": {
                    "Type": "String",
                    "ValueSelector": "Invocation.InvocationResults.InvocationResult[].Output"
                }
            }
        },
        {
            "Name": "checkInvocationResult",
            "Action": "ACS::CheckFor",
            "Description": "Views the command output of a cloud assistant command in the specified ECS instance.",
            "Properties": {
                "Service": "ECS",
                "API": "DescribeInvocationResults",
                "Parameters": {
                    "RegionId": "{{regionId}}",
                    "InvokeId": "{{ invokeCommand.InvokeId }}"
                },
                "PropertySelector": "Invocation.InvocationResults.InvocationResult[].ExitCode",
                "DesiredValues": [
                    0
                ]
            }
        },
        {
            "Name": "deleteCommand",
            "Action": "ACS::ExecuteAPI",
            "Description": "Deletes a cloud assistant command.",
            "Properties": {
                "Service": "ECS",
                "API": "DeleteCommand",
                "Parameters": {
                    "RegionId": "{{ regionId}}",
                    "CommandId": "{{ createCommand.CommandId }}"
                }
            }
        }
    ],
    "Outputs": {
        "InvocationOutput": {
            "Type": "String",
            "Value": {
                "Fn::Base64Decode": "{{ describeInvocationResults.InvocationResult }}"
            }
        }
    }
}

四、校验模版,并格式化模版
脚本转化完的模版格式如下所示,转化的脚本,如果格式没有对齐,点击鼠标右键,选择Format Doucument,来使模版格式化。注意:需要手动删除脚本最后一句的逗号。
1567762425180_16cf9583_91f8_42d1_ad15_1e07f53785d3

五、创建执行
找到创建好的模版,点击创建执行
1567762987071_283a5bbd_f713_4bba_a813_c87cd04c7ed8

六、点击创建执行
1567077112647_d89f9f3c_fc42_4346_981a_f7afe1c94b41

模版开始正式执行,在输入的实例上执行想要运行的shell命令。

总结

由以上举例可见,此脚本的作用为手动操作节省了时间,并把在模版中解决了特殊字符转译的问题。此脚本还有很多不完善的地方,欢迎提出意见。

欢迎使用OOS

OOS客户支持钉钉群:23330931
OOS管理控制台的链接
OOS帮助文档的链接

相关文章
|
1月前
|
人工智能 Shell iOS开发
AI Shell:在命令行里“对话” AI ,微软推出将 AI 助手引入命令行的 CLI 工具,打造对话式交互命令行
AI Shell 是一款强大的 CLI 工具,将人工智能直接集成到命令行中,帮助用户提高生产力。AI Shell 支持多种 AI 模型和助手,通过多代理框架提供丰富的功能和灵活的使用模式。
138 7
|
1月前
|
运维 监控 网络协议
运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面
本文介绍了运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面,旨在帮助读者提高工作效率。从基本的文件查看与编辑,到高级的网络配置与安全管理,这些命令是运维工作中的必备工具。
135 3
|
2月前
|
运维 监控 网络协议
|
1月前
|
Java Shell Windows
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
46 1
|
1月前
|
缓存 运维 监控
【运维必备知识】Linux系统平均负载与top、uptime命令详解
系统平均负载是衡量Linux服务器性能的关键指标之一。通过使用 `top`和 `uptime`命令,可以实时监控系统的负载情况,帮助运维人员及时发现并解决潜在问题。理解这些工具的输出和意义是确保系统稳定运行的基础。希望本文对Linux系统平均负载及相关命令的详细解析能帮助您更好地进行系统运维和性能优化。
57 3
|
2月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
80 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
2月前
|
运维 自然语言处理 开发者
作为一名运维人员,使用通义灵码个人版处理日常工作中的代码相关任务,极大地提升了我的工作效率。以下是我使用通义灵码的具体实践场景、效果和心得,以及相应的截图。
作为一名运维人员,我使用通义灵码处理日常工作中的代码任务,效率提升了30%。通义灵码帮助我快速理解复杂代码、生成准确的代码注释,并能从自然语言生成代码示例,大幅减少了代码编写和理解的时间。
80 3
|
2月前
|
Shell 知识图谱
Shell printf 命令
10月更文挑战第3天
26 1
|
3月前
|
机器学习/深度学习 人工智能 运维
|
2月前
|
Unix Shell Linux
常见的shell命令
shell常用命令
61 11