Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • O openapi-generator
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 3,476
    • Issues 3,476
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 402
    • Merge requests 402
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Infrastructure Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • OpenAPI Tools
  • openapi-generator
  • Issues
  • #590
Closed
Open
Issue created Jul 18, 2018 by Administrator@rootContributor

[OAS 3.0.0] yaml with multiple server urls generates code using first url only

Created by: hippoKnight

Description

I wrote a yaml following OAS 3.0, its servers part looked like this:

...
#--- server ---#
servers:
  # server object
  - url: http://1.1.1.1:9200/
  - url: http://1.1.1.1:9201/v2
...

I used this yaml generating python code, and didn' t see the second url('http://1.1.1.1:9201/v2')

So, my question is: What is the desired result if the yaml contains multiple urls?

openapi-generator version

I installed openapi-generator using Homebrew yesterday.

OpenAPI declaration file content or url

#--- OpenAPI version ---#
openapi: '3.0.0'

#--- metadata about the api ---#
info:
  # title of the application
  title: '9'

  # description of the application
  description: '9'

  # terms of service for the API, must be a URL
  termsOfService: ''

  # contact information for the exposed API
  contact:
    name: 'myname'
    url: 'myurl'
    email: 'my@mail.com'

  # license information for the exposed API
  license:
    name: 'myname'
    url: 'myurl'

  # version of the OpenAPI document
  version: '1.0.1'

#--- additional external documentation ---#
externalDocs:
  description: '9'
  url: ''

#--- server ---#
servers:
  # server object
  - url: http://1.1.1.1:9200/
  - url: http://1.1.1.1:9201/v2
    # URL to the target host

    # map between a variable name and its value(used for substitution in the server's URL template)
    variables:
      basePath:
        enum:
          - ''
          - 'website/face/v2/'
          - 'business/api/'
        default: ''
        description: 'basePath'

      username:
        default: 'admin'
        description: 'username'

    description: 's'

#--- tags for specification with additional metadata ---#
tags:
  - name: 'website'
    description: 'API of website operations'

security:
  # only one of the security requirement objects need to be satisfied to authorize a request
  # mentioned names must in components-seuritySchemes
  -
    cookieAuth_sessionId: []
    cookieAuth_ytClusterId: []
    # lists the required security schemes to execute this operation
    # objects that contain multiple schemes require all satisfication

#--- reusable objects for the specification ---#
components:


  # Security scheme definitions (see Authentication)
  securitySchemes:
    # https://swagger.io/specification/#securitySchemeObject
    cookieAuth_sessionId:
      type: 'apiKey'
      in: 'cookie'
      name: 'session_id'

    cookieAuth_ytClusterId:
      type: 'apiKey'
      in: 'cookie'
      name: 'yt_cluster_id'

  # Reusable schemas (data models)
  schemas:
    # definition of input and output data types
    # can be objects, primitives, arrays
    # https://swagger.io/specification/#schemaObject

    sessionID:
      type: 'string'


    clusterID:
      type: 'string'

    # user login info: name & password
    LoginInfo:
      type: 'object'
      required:
        - name
        - password
      properties:
        name:
          type: 'string'
        password:
          type: 'string' # password should be a md5 format string

    LoginResponseInfo:
      type: 'object'
      required:
        - session_id
      properties:
        session_id:
          type: 'string'
        cluster_id:
          type: 'string'

    # response info for all API: rtn & message
    ResponseInfo:
      type: 'object'
      required:
        - rtn
        - message
      properties:
        rtn:
          type: 'integer'
          # format: 'int32'
        message:
          type: 'string'

    # repository info for creation: repository name and extra_meta
    repoCreationInfo:
      type: 'object'
      required:
        - name
      properties:
        name:
          type: 'string'
        extra_meta:
          type: 'object'
          additionalProperties: {}
          # or can be written as: additionalProperties: true

    # repository id info
    repoIdInfo:
      type: 'object'
      required:
        - id
      properties:
        id:
          type: 'string'


  # Reusable request bodies
  requestBodies:
    LoginBody:
      description: 'A JSON object containing the login and password'
      required: true
      content:
        'application/json':
          schema:
            $ref: '#/components/schemas/LoginInfo'
          # examples:
          #   LoginInfo_admin:
          #     $ref: '#/components/examples/LoginInfo_example'

    repoCreationBody:
      description: 'A JSON object containing the repository name and meta info'
      required: true
      content:
        'application/json':
          schema:
            $ref: '#/components/schemas/repoCreationInfo'

  # Reusable responses, such as 401 Unauthorized or 400 Bad Request
  responses:

    # default response model
    DefaultResponse:
      description: 'Error: rtn != 0'
      headers: ''
      content:
        'application/json':
          schema:
            $ref: '#/components/schemas/ResponseInfo'

    # successful login response model
    LoginResponse:
      description: 'Successful login: The session ID is returned in a cookie named `session_id` and you need to include this cookie in subsequent requests'
      headers:
        Set-cookie:
          schema:
            allOf:
              - $ref: '#/components/schemas/sessionID'
              - $ref: '#/components/schemas/clusterID'
            # type: 'string'
            # example: 'session_id=111@DEFAULT; yt_cluster_id=DEFAULT'
      content:
        'application/json':
          schema:
            anyOf:
              - $ref: '#/components/schemas/ResponseInfo'
              - $ref: '#/components/schemas/LoginResponseInfo'

    repoCreationResponse:
      description: 'Successful repo_creation'
      content:
        'application/json':
          schema:
            anyOf:
              - $ref: '#/components/schemas/ResponseInfo'
              - $ref: '#/components/schemas/repoIdInfo'



#--- available paths and operations for the API ---#
paths:

  # path for user login
  /login:
    post:
      tags:
        # - 'user'
        - 'business'
      summary: 'user login'
      description: 'user login with user name and password'
      operationId: 'userLogin'
      requestBody:
        $ref: '#/components/requestBodies/LoginBody'
      responses:
        '200':
          $ref: '#/components/responses/LoginResponse'
        'default':
          $ref: '#/components/responses/DefaultResponse'
      deprecated: false
      security: []  # no authorization for login operation
      externalDocs:
        description: 'API document for business user login'
        url: ''


  # path about repository operations
  /repository:

    summary: 'repository related operations'

    description: 'Operations: create/update/delete/query repository'


    # POST operation
    post:

      # tags for API documentation control
      tags:
        # - 'repository'
        - 'business'

      # short summary about what the operation does
      summary: 'create new repository'

      # verbose explanation of the operation behavior
      description: 'create new repository with certain repository name'

      # Additional external documentation for this operation
      externalDocs:
        description: 'API document for repository creation'
        url: ''

      # unique string to identify the operation
      operationId: 'repositoryCreation'

      # request body,only supported in HTTP
      requestBody:
        $ref: '#/components/requestBodies/repoCreationBody'

      # list of possible responses as they are returned from executing this operation
      responses:
        '200':
          $ref: '#/components/responses/repoCreationResponse'
        'default':
          $ref: '#/components/responses/DefaultResponse'
Command line used for generation

openapi-generator generate -i swagger.yaml -g python -o /tmp/test/python-3

Steps to reproduce

Running the command above is enough.

Assignee
Assign to
Time tracking