FormatVersion: OOS-2019-06-01
Description:
  en: Install Plugins
  zh-cn: 安装插件
  name-en: ACS-ECS-InstallPluginForStableDiffusion
  name-zh-cn: 安装插件
Parameters:
  regionId:
    Type: String
    Label:
      en: RegionId
      zh-cn: 地域ID
    AssociationProperty: RegionId
    Default: '{{ ACS::RegionId }}'
  targets:
    Type: Json
    Label:
      en: TargetInstance
      zh-cn: 目标实例
    AssociationProperty: Targets
    AssociationPropertyMetadata:
      ResourceType: ALIYUN::ECS::Instance
      RegionId: regionId
  sourceType:
    Type: String
    Label:
      en: SourceType
      zh-cn: 下载方式
    AllowedValues:
      - https
      - github
    Default: https
    AssociationPropertyMetadata:
      RegionId: ${regionId}
  sourcePath:
    Type: String
    Label:
      en: SourcePath
      zh-cn: 文件来源
    Description:
      en: <ul class="ul"> <li class="li">Fill in the link address by https</li><li class="li">Fill in the clone address by github</li></ul>
      zh-cn: <ul class="ul"> <li class="li">https方式填写链接地址</li><li class="li">github方式填写克隆地址</li></ul>
  compressionPackageName:
    Type: String
    Label:
      en: CompressionPackageName
      zh-cn: 压缩包名字
    Default: 'test.tar.gz'
    AssociationPropertyMetadata:
      Visible:
        Condition:
          Fn::Equals:
            - ${sourceType}
            - https
RamRole: ''
Tasks:
  - Name: getInstance
    Description:
      en: Views the ECS instances
      zh-cn: 获取ECS实例
    Action: ACS::SelectTargets
    Properties:
      ResourceType: ALIYUN::ECS::Instance
      RegionId: '{{ regionId }}'
      Filters:
        - '{{ targets }}'
    Outputs:
      instanceIds:
        Type: List
        ValueSelector: Instances.Instance[].InstanceId
  - Name: downloadLinuxFile
    Action: ACS::ECS::RunCommand
    Description:
      en: Runs download file command on linux instance
      zh-cn: 在linux类型实例上执行下载文件命令
    Properties:
      instanceId: '{{ ACS::TaskLoopItem }}'
      regionId: '{{ regionId }}'
      commandType: RunShellScript
      timeout: 3600
      commandContent: |
        test -e /home/extensions/ || mkdir -p /home/extensions/
        if [ {{sourceType}} = 'https' ]; then
          wget '{{sourcePath}}' -O /home/extensions/{{compressionPackageName}} --no-check-certificate
          if [ "$?" != 0 ]; then
            echo $_
            exit 1
          fi
          tar -xvf /home/extensions/{{compressionPackageName}}
          rm -rf /home/extensions/{{compressionPackageName}}
        else
          cd /home/extensions/ && git clone '{{sourcePath}}'
        fi
        
        docker stop `docker ps |grep aigc|awk -F' ' '{print $1}'`
        /etc/init.d/start_sd_docker.sh
        for ((i=0;i<100;i++))
        do
           curl 127.0.0.1:8081
           if [ "$?" == 0 ]; then
             break
           fi
           sleep 1
        done
    Loop:
      Items: '{{ getInstance.instanceIds }}'
      RateControl:
        Mode: Concurrency
        MaxErrors: 0
        Concurrency: 1
      Outputs:
        commandOutputs:
          AggregateType: Fn::ListJoin
          AggregateField: commandOutput
    Outputs:
      commandOutput:
        Type: String
        ValueSelector: invocationOutput
Outputs:
  commandOutput:
    Type: String
    Value: '{{ downloadLinuxFile.commandOutputs }}'
Metadata:
  ALIYUN::OOS::Interface:
    ParameterGroups:
      - Parameters:
          - regionId
          - targets
        Label:
          default:
            zh-cn: 选择实例
            en: Select Instances
      - Parameters:
          - sourceType
          - sourcePath
          - compressionPackageName
        Label:
          default:
            zh-cn: 配置参数
            en: Configure Parameters