Edits history of script submission #24145 for ' List network devices (cisco_ise)'

  • bunnative
    One script reply has been approved by the moderators
    Ap­pro­ved
    //native
    
    /**
     * List network devices
     * List one page of network access devices (NADs). Filters use ERS syntax field.OPERATOR.value on ipaddress, name, description, location or type (e.g. name.STARTSW.sw-). size is up to 100 (default 20); pages start at 1. Pass next_page from the result to get the following page.
     */
    export async function main(
      auth: RT.CiscoIse,
      page: number | undefined,
      size: number | undefined,
      filters: string[] | undefined,
      filter_type: "and" | "or" | undefined,
      sort_asc: "name" | "description" | undefined,
      sort_desc: "name" | "description" | undefined
    ) {
      const base = new URL(auth.base_url)
      if (auth.ers_port) base.port = String(auth.ers_port)
      const url = new URL("/ers/config/networkdevice", base)
      if (page != null) url.searchParams.append("page", String(page))
      if (size != null) url.searchParams.append("size", String(size))
      for (const f of filters ?? []) {
        if (f) url.searchParams.append("filter", f)
      }
      if (filter_type) url.searchParams.append("filterType", filter_type)
      if (sort_asc) url.searchParams.append("sortasc", sort_asc)
      if (sort_desc) url.searchParams.append("sortdsc", sort_desc)
    
      const response = await fetch(url, {
        headers: {
          Authorization: `Basic ${btoa(`${auth.username}:${auth.password}`)}`,
          Accept: "application/json",
        },
      })
    
      if (!response.ok) {
        throw new Error(`${response.status} ${await response.text()}`)
      }
    
      const { SearchResult } = await response.json()
      const pageOf = (link: { href?: string } | undefined) => {
        const p = link?.href ? new URL(link.href).searchParams.get("page") : null
        return p ? Number(p) : null
      }
      return {
        total: SearchResult.total,
        resources: SearchResult.resources ?? [],
        next_page: pageOf(SearchResult.nextPage),
        previous_page: pageOf(SearchResult.previousPage),
      }
    }
    

    Submitted by hugo989 6 hours ago