运维编排系列场景-----快速生成模版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帮助文档的链接

相关文章
|
3月前
|
人工智能 运维 Kubernetes
别再手动敲命令了!运维自动化才是打工人的“自救之道”
别再手动敲命令了!运维自动化才是打工人的“自救之道”
91 8
|
7月前
|
弹性计算 人工智能 运维
摆脱繁琐命令-让运维更加流畅-阿里云ECS操作系统控制台运维篇
阿里云操作系统控制台提供了便捷的服务器监控与管理功能,简化了运维工作。通过将多台服务器纳入统一监控平台,用户可以快速查看CPU、内存、磁盘和网络等关键资源的使用情况,避免了逐一远程连接查询的繁琐操作。此外,该工具支持自动化数据汇总,极大地方便了日报、周报和月报的编写。测试过程中,系统展示了良好的稳定性和响应速度,尤其在网络抖动和大文件健康状态测试中表现出色。整体体验流畅,显著提升了运维效率。 操作系统控制台地址:[点击访问](https://alinux.console.aliyun.com/)
190 26
摆脱繁琐命令-让运维更加流畅-阿里云ECS操作系统控制台运维篇
|
7月前
|
运维 监控 前端开发
Zabbix告警分析新革命:DeepSeek四大创新场景助力智能运维
面对日益复杂的IT环境,高效分析监控数据并快速响应成为运维的关键挑战。本文深入探讨了DeepSeek与Zabbix结合的创新应用,包括一键式智能告警分析、Zabbix文档知识库助手及钉钉告警增强功能。通过部署指南和实用脚本,展示了如何提升故障排查效率,为运维工程师提供高效解决方案。
632 5
|
9月前
|
运维
阿里云服务器批量执行命令(系统运维管理oos)
阿里云【系统运维管理oos】批量执行详情
183 5
|
12月前
|
运维 监控 网络协议
|
11月前
|
运维 监控 网络协议
运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面
本文介绍了运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面,旨在帮助读者提高工作效率。从基本的文件查看与编辑,到高级的网络配置与安全管理,这些命令是运维工作中的必备工具。
806 3
|
11月前
|
缓存 运维 监控
【运维必备知识】Linux系统平均负载与top、uptime命令详解
系统平均负载是衡量Linux服务器性能的关键指标之一。通过使用 `top`和 `uptime`命令,可以实时监控系统的负载情况,帮助运维人员及时发现并解决潜在问题。理解这些工具的输出和意义是确保系统稳定运行的基础。希望本文对Linux系统平均负载及相关命令的详细解析能帮助您更好地进行系统运维和性能优化。
720 3
|
12月前
|
运维 自然语言处理 开发者
作为一名运维人员,使用通义灵码个人版处理日常工作中的代码相关任务,极大地提升了我的工作效率。以下是我使用通义灵码的具体实践场景、效果和心得,以及相应的截图。
作为一名运维人员,我使用通义灵码处理日常工作中的代码任务,效率提升了30%。通义灵码帮助我快速理解复杂代码、生成准确的代码注释,并能从自然语言生成代码示例,大幅减少了代码编写和理解的时间。
294 3
|
8天前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
151 10
|
8天前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
62 2