docker-compose 实现指定每天早上给 ecs 提升带宽

####compose 文件

version: '2'
services:
  app:
    image: itmx/net-io-auto-buy:1.0
    build: 
      context: ./
    container_name: modify_network
    #  使用docker-compose up 运行 直接输出日志 可以多次运行提交时间以及提交带宽量一致不会产生重复订单
    environment:
      - PYTHONUNBUFFERED=1

      #  阿里云账号身份认证
      - ACCESS_KEY_ID=
      - ACCESS_SECRET=

      #  ecs所在区id
      - REGION_ID=

      # 阿里云ecs 实例id
      - ECS_INSTANCE_ID=

      # 是否开启自动支付 false | true
      - PAY=false
      #- PAY=true

      # 调整带宽到多少Mbp/s
      - NET_SPEC=25

      # 当前时间为标准从以后那一天开始提升带宽  0 为明天 1 为后天
      - START_DAY=0
      # 需要添加多少天的带宽
      - ADD_DAY=1

      # 从什么时间段开始
      - START_TIME=1
      # 到什么时间段结束
      - STOP_TIME=11

    volumes:
      - ./test:/test
    command: python3 /test/app.py
 

 ##############Dockerfile 文件

FROM python:3

WORKDIR /
RUN  pip3 install --upgrade pip
RUN pip3  install --no-cache-dir aliyunsdkcore aliyun-python-sdk-core-v3  DingtalkChatbot

COPY app.py /app.py 
CMD [ "python3", "/app.py" ]

 

#############python 脚本

#!/usr/bin/env python
#coding=utf-8

import json, math, os, datetime,time

from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest

from dingtalkchatbot.chatbot import DingtalkChatbot
# 认证信息
ACCESS_KEY_ID = os.getenv('ACCESS_KEY_ID', '')
ACCESS_SECRET = os.getenv('ACCESS_SECRET', '')
REGION_ID = os.getenv('REGION_ID', 'cn-shenzhen')
client = AcsClient(ACCESS_KEY_ID, ACCESS_SECRET, REGION_ID)

#配置获取需要续费时间段参数 整形数值 给后面使用 range() 生成有序列表
start_day=int(os.getenv('START_DAY', ''))
stop_day=int(os.getenv('ADD_DAY', '')) + start_day

# 配置支付方式
pay=os.getenv('PAY','')

# 当前服务器实例ID
ECS_INSTANCE_ID = os.getenv('ECS_INSTANCE_ID',"")

######################################################提交带加速请求
def modify_instance_network_spec(spec,start_time,end_time):
  print(start_time)
  print(end_time)
  print('准备调整带宽,时间段[{}-{}],带宽值[{}Mbps]'.format(start_time, end_time, spec))
  request = CommonRequest()
  request.set_accept_format('json')
  request.set_domain('ecs.aliyuncs.com')
  request.set_method('POST')
  request.set_protocol_type('https') # https | http
  request.set_version('2014-05-26')
  request.set_action_name('ModifyInstanceNetworkSpec')                              # 变更临时带宽操作
  request.add_query_param('RegionId', REGION_ID)                                    # ECS所在区域
  request.add_query_param('InstanceId', ECS_INSTANCE_ID)                            # ECS 实例ID
  request.add_query_param('InternetMaxBandwidthOut', spec)                          # 公网出带宽最大值,单位为Mbps(Megabit per second)。取值范围:[0, 100]
  request.add_query_param('StartTime', start_time)                                  # 起始时间,例如2017-08-09T09:40Z
  request.add_query_param('EndTime', end_time)                                      # 终止时间,例如2017-08-09T09:40Z
  request.add_query_param('AutoPay',pay)                                            # 自动支付
# 异常捕捉
  try:              
    response = client.do_action(request)
    if  len(eval(response)) > 2 :   #判断提交是否成功在无异常时提交失败返回 -1 让程序在提交失败时必须沉默时间再次续费
      print("阿里云平台返回异常信息" + eval(response)["Message"])
      return -1
    else:
      print("带宽提交成功")
      print('带宽调整响应结果:{}'.format(str(response, encoding = 'utf-8')))
    return 0

#抛出异常
  except ServerException as e:
    print('带宽变更失败:http_status={}, err_code={}, err_msg={}'.format(e.get_http_status(), e.get_error_code(), e.get_error_msg()))
    return -1
  except ClientException as e:
    print('带宽变更失败,客户端异常:{}'.format(str(e, encoding = 'utf-8')))
    return -1
  except BaseException   as e:
    print('带宽查询失败,其它异常:{}'.format(str(e, encoding = 'utf-8')))
    return -1

#####################提交订单信息进入沉默通道

for i in range(start_day,stop_day):

  # 获取系统变量 START_TIME 处理经过处理转化为 utc 时间格式 转 cst
  start_times=int(os.getenv('START_TIME','')) - 8
  if  start_times < 0 :
    start_times = 24 + start_times 

  # 获取系统变量 STOP_TIME 处理经过处理转化为 utc 时间格式 转 cst
  stop_times = int(os.getenv('STOP_TIME', '')) - 8
  if stop_times < 0 :
    stop_times = 24 + stop_times

  #  配置时间格式
  start_times_type="%Y-%m-%dT" + str(start_times) + ":00Z"
  end_times_type="%Y-%m-%dT" + str(stop_times) + "Z"

  # 判断是否跨越 24 时 如果时间跨越 需要天数 + 1 不跨越天数 + 0 
  if stop_times < start_times :
    up_date=1
  else:
    up_date=0

  # 通过日期计算处理时间
  start_time=(datetime.datetime.now()+datetime.timedelta(days=+i)).strftime(start_times_type )
  end_time=(datetime.datetime.now()+datetime.timedelta(days=+i+up_date)).strftime(end_times_type )
  time.sleep(2)
  print(start_time)
  print(end_time)
  modify_instance_network_spec(int(os.getenv('NET_SPEC',"")),start_time,end_time)
  print("---------")
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值