david-caro / python-foreman

Small low level python wrapper around Foreman API
GNU General Public License v2.0
58 stars 37 forks source link

Some API URLs do not show up as resources #40

Closed epowell closed 9 years ago

epowell commented 9 years ago

Some ill-behaved plugins (namely foreman_discovery on Foreman 1.6.0) have their API endpoint specified like '/api/v2/discovered_hosts'. Normal URLs do not have the '/v2' included. The code now handles both cases.

JSON section for the discovered_hosts resource below:

"discovered_hosts": {
        "doc_url": "../apidoc/v2/discovered_hosts",
        "api_url": "/api",
        "name": "Discovered hosts",
        "short_description": null,
        "full_description": "",
        "version": "v2",
        "formats": null,
        "metadata": null,
        "methods": [
          {
            "doc_url": "../apidoc/v2/discovered_hosts/index",
            "name": "index",
            "apis": [
              {
                "api_url": "/api/v2/discovered_hosts",
                "http_method": "GET",
                "short_description": "List all discovered hosts",
                "deprecated": null
              }
            ],
            "formats": null,
            "full_description": "",
            "errors": [],
            "params": [
              {
                "name": "search",
                "full_name": "search",
                "description": "\n<p>filter results</p>\n",
                "required": false,
                "allow_nil": false,
                "validator": "Must be String",
                "expected_type": "string",
                "metadata": null,
                "show": true
              },
              {
                "name": "order",
                "full_name": "order",
                "description": "\n<p>sort results</p>\n",
                "required": false,
                "allow_nil": false,
                "validator": "Must be String",
                "expected_type": "string",
                "metadata": null,
                "show": true
              },
              {
                "name": "page",
                "full_name": "page",
                "description": "\n<p>paginate results</p>\n",
                "required": false,
                "allow_nil": false,
                "validator": "Must be String",
                "expected_type": "string",
                "metadata": null,
                "show": true
              },
              {
                "name": "per_page",
                "full_name": "per_page",
                "description": "\n<p>number of entries per request</p>\n",
                "required": false,
                "allow_nil": false,
                "validator": "Must be String",
                "expected_type": "string",
                "metadata": null,
                "show": true
              }
            ],
            "examples": [],
            "metadata": null,
            "see": []
          },
          {
            "doc_url": "../apidoc/v2/discovered_hosts/show",
            "name": "show",
            "apis": [
              {
                "api_url": "/api/v2/discovered_hosts/:id",
                "http_method": "GET",
                "short_description": "Show a discovered host",
                "deprecated": null
              }
            ],
            "formats": null,
            "full_description": "",
            "errors": [],
            "params": [
              {
                "name": "id",
                "full_name": "id",
                "description": "",
                "required": true,
                "allow_nil": false,
                "validator": "Must be an identifier, string from 1 to 128 characters containing only alphanumeric characters, dot(.), space, underscore(_), hypen(-) with no leading or trailing space.",
                "expected_type": "string",
                "metadata": null,
                "show": true
              }
            ],
            "examples": [],
            "metadata": null,
            "see": []
          },
          {
            "doc_url": "../apidoc/v2/discovered_hosts/create",
            "name": "create",
            "apis": [
              {
                "api_url": "/api/v2/discovered_hosts",
                "http_method": "POST",
                "short_description": "Create a discovered host",
                "deprecated": null
              }
            ],
            "formats": null,
            "full_description": "",
            "errors": [],
            "params": [
              {
                "name": "discovered_host",
                "full_name": "discovered_host",
                "description": "",
                "required": false,
                "allow_nil": true,
                "validator": "Must be a Hash",
                "expected_type": "hash",
                "metadata": null,
                "show": true,
                "params": [
                  {
                    "name": "name",
                    "full_name": "discovered_host[name]",
                    "description": "",
                    "required": true,
                    "allow_nil": false,
                    "validator": "Must be String",
                    "expected_type": "string",
                    "metadata": null,
                    "show": true
                  },
                  {
                    "name": "ip",
                    "full_name": "discovered_host[ip]",
                    "description": "",
                    "required": true,
                    "allow_nil": false,
                    "validator": "Must be String",
                    "expected_type": "string",
                    "metadata": null,
                    "show": true
                  },
                  {
                    "name": "mac",
                    "full_name": "discovered_host[mac]",
                    "description": "",
                    "required": true,
                    "allow_nil": false,
                    "validator": "Must be String",
                    "expected_type": "string",
                    "metadata": null,
                    "show": true
                  }
                ]
              }
            ],
            "examples": [],
            "metadata": null,
            "see": []
          },
          {
            "doc_url": "../apidoc/v2/discovered_hosts/update",
            "name": "update",
            "apis": [
              {
                "api_url": "/api/v2/discovered_hosts/:id",
                "http_method": "PUT",
                "short_description": "Provision a discovered host",
                "deprecated": null
              }
            ],
            "formats": null,
            "full_description": "",
            "errors": [],
            "params": [
              {
                "name": "id",
                "full_name": "id",
                "description": "",
                "required": true,
                "allow_nil": false,
                "validator": "Must be an identifier, string from 1 to 128 characters containing only alphanumeric characters, space, underscore(_), hypen(-) with no leading or trailing space.",
                "expected_type": "string",
                "metadata": null,
                "show": true
              },
              {
                "name": "discovered_host",
                "full_name": "discovered_host",
                "description": "",
                "required": false,
                "allow_nil": true,
                "validator": "Must be a Hash",
                "expected_type": "hash",
                "metadata": null,
                "show": true,
                "params": [
                  {
                    "name": "name",
                    "full_name": "discovered_host[name]",
                    "description": "",
                    "required": false,
                    "allow_nil": true,
                    "validator": "Must be String",
                    "expected_type": "string",
                    "metadata": null,
                    "show": true
                  },
                  {
                    "name": "environment_id",
                    "full_name": "discovered_host[environment_id]",
                    "description": "",
                    "required": false,
                    "allow_nil": true,
                    "validator": "Must be String",
                    "expected_type": "string",
                    "metadata": null,
                    "show": true
                  },
                  {
                    "name": "ip",
                    "full_name": "discovered_host[ip]",
                    "description": "\n<p>not required if using a subnet with DHCP proxy</p>\n",
                    "required": false,
                    "allow_nil": true,
                    "validator": "Must be String",
                    "expected_type": "string",
                    "metadata": null,
                    "show": true
                  },
                  {
                    "name": "mac",
                    "full_name": "discovered_host[mac]",
                    "description": "\n<p>not required if it's a virtual machine</p>\n",
                    "required": false,
                    "allow_nil": true,
                    "validator": "Must be String",
                    "expected_type": "string",
                    "metadata": null,
                    "show": true
                  },
                  {
                    "name": "architecture_id",
                    "full_name": "discovered_host[architecture_id]",
                    "description": "",
                    "required": false,
                    "allow_nil": true,
                    "validator": "Must be a number.",
                    "expected_type": "string",
                    "metadata": null,
                    "show": true
                  },
                  {
                    "name": "domain_id",
                    "full_name": "discovered_host[domain_id]",
                    "description": "",
                    "required": false,
                    "allow_nil": true,
                    "validator": "Must be a number.",
                    "expected_type": "string",
                    "metadata": null,
                    "show": true
                  },
                  {
                    "name": "puppet_proxy_id",
                    "full_name": "discovered_host[puppet_proxy_id]",
                    "description": "",
                    "required": false,
                    "allow_nil": true,
                    "validator": "Must be a number.",
                    "expected_type": "string",
                    "metadata": null,
                    "show": true
                  },
                  {
                    "name": "puppet_class_ids",
                    "full_name": "discovered_host[puppet_class_ids]",
                    "description": "",
                    "required": false,
                    "allow_nil": true,
                    "validator": "Must be an array of any type",
                    "expected_type": "array",
                    "metadata": null,
                    "show": true
                  },
                  {
                    "name": "operatingsystem_id",
                    "full_name": "discovered_host[operatingsystem_id]",
                    "description": "",
                    "required": false,
                    "allow_nil": true,
                    "validator": "Must be String",
                    "expected_type": "string",
                    "metadata": null,
                    "show": true
                  },
                  {
                    "name": "medium_id",
                    "full_name": "discovered_host[medium_id]",
                    "description": "",
                    "required": false,
                    "allow_nil": true,
                    "validator": "Must be a number.",
                    "expected_type": "string",
                    "metadata": null,
                    "show": true
                  },
                  {
                    "name": "ptable_id",
                    "full_name": "discovered_host[ptable_id]",
                    "description": "",
                    "required": false,
                    "allow_nil": true,
                    "validator": "Must be a number.",
                    "expected_type": "string",
                    "metadata": null,
                    "show": true
                  },
                  {
                    "name": "subnet_id",
                    "full_name": "discovered_host[subnet_id]",
                    "description": "",
                    "required": false,
                    "allow_nil": true,
                    "validator": "Must be a number.",
                    "expected_type": "string",
                    "metadata": null,
                    "show": true
                  },
                  {
                    "name": "sp_subnet_id",
                    "full_name": "discovered_host[sp_subnet_id]",
                    "description": "",
                    "required": false,
                    "allow_nil": true,
                    "validator": "Must be a number.",
                    "expected_type": "string",
                    "metadata": null,
                    "show": true
                  },
                  {
                    "name": "model_id",
                    "full_name": "discovered_host[model_id]",
                    "description": "",
                    "required": false,
                    "allow_nil": true,
                    "validator": "Must be a number.",
                    "expected_type": "string",
                    "metadata": null,
                    "show": true
                  },
                  {
                    "name": "hostgroup_id",
                    "full_name": "discovered_host[hostgroup_id]",
                    "description": "",
                    "required": false,
                    "allow_nil": true,
                    "validator": "Must be a number.",
                    "expected_type": "string",
                    "metadata": null,
                    "show": true
                  },
                  {
                    "name": "owner_id",
                    "full_name": "discovered_host[owner_id]",
                    "description": "",
                    "required": false,
                    "allow_nil": true,
                    "validator": "Must be a number.",
                    "expected_type": "string",
                    "metadata": null,
                    "show": true
                  },
                  {
                    "name": "puppet_ca_proxy_id",
                    "full_name": "discovered_host[puppet_ca_proxy_id]",
                    "description": "",
                    "required": false,
                    "allow_nil": true,
                    "validator": "Must be a number.",
                    "expected_type": "string",
                    "metadata": null,
                    "show": true
                  },
                  {
                    "name": "image_id",
                    "full_name": "discovered_host[image_id]",
                    "description": "",
                    "required": false,
                    "allow_nil": true,
                    "validator": "Must be a number.",
                    "expected_type": "string",
                    "metadata": null,
                    "show": true
                  },
                  {
                    "name": "host_parameters_attributes",
                    "full_name": "discovered_host[host_parameters_attributes]",
                    "description": "",
                    "required": false,
                    "allow_nil": true,
                    "validator": "Must be an array of any type",
                    "expected_type": "array",
                    "metadata": null,
                    "show": true
                  },
                  {
                    "name": "build",
                    "full_name": "discovered_host[build]",
                    "description": "",
                    "required": false,
                    "allow_nil": true,
                    "validator": "Must be 'true' or 'false'",
                    "expected_type": "string",
                    "metadata": null,
                    "show": true
                  },
                  {
                    "name": "enabled",
                    "full_name": "discovered_host[enabled]",
                    "description": "",
                    "required": false,
                    "allow_nil": true,
                    "validator": "Must be 'true' or 'false'",
                    "expected_type": "string",
                    "metadata": null,
                    "show": true
                  },
                  {
                    "name": "provision_method",
                    "full_name": "discovered_host[provision_method]",
                    "description": "",
                    "required": false,
                    "allow_nil": true,
                    "validator": "Must be String",
                    "expected_type": "string",
                    "metadata": null,
                    "show": true
                  },
                  {
                    "name": "managed",
                    "full_name": "discovered_host[managed]",
                    "description": "",
                    "required": false,
                    "allow_nil": true,
                    "validator": "Must be 'true' or 'false'",
                    "expected_type": "string",
                    "metadata": null,
                    "show": true
                  },
                  {
                    "name": "progress_report_id",
                    "full_name": "discovered_host[progress_report_id]",
                    "description": "\n<p>UUID to track orchestration tasks status, GET\n/api/orchestration/:UUID/tasks</p>\n",
                    "required": false,
                    "allow_nil": true,
                    "validator": "Must be String",
                    "expected_type": "string",
                    "metadata": null,
                    "show": true
                  },
                  {
                    "name": "capabilities",
                    "full_name": "discovered_host[capabilities]",
                    "description": "",
                    "required": false,
                    "allow_nil": true,
                    "validator": "Must be String",
                    "expected_type": "string",
                    "metadata": null,
                    "show": true
                  }
                ]
              }
            ],
            "examples": [],
            "metadata": null,
            "see": []
          },
          {
            "doc_url": "../apidoc/v2/discovered_hosts/destroy",
            "name": "destroy",
            "apis": [
              {
                "api_url": "/api/v2/discovered_hosts/:id",
                "http_method": "DELETE",
                "short_description": "Delete a discovered host",
                "deprecated": null
              }
            ],
            "formats": null,
            "full_description": "",
            "errors": [],
            "params": [
              {
                "name": "id",
                "full_name": "id",
                "description": "",
                "required": true,
                "allow_nil": false,
                "validator": "Must be an identifier, string from 1 to 128 characters containing only alphanumeric characters, space, underscore(_), hypen(-) with no leading or trailing space.",
                "expected_type": "string",
                "metadata": null,
                "show": true
              }
            ],
            "examples": [],
            "metadata": null,
            "see": []
          },
          {
            "doc_url": "../apidoc/v2/discovered_hosts/facts",
            "name": "facts",
            "apis": [
              {
                "api_url": "/api/v2/discovered_hosts/facts",
                "http_method": "POST",
                "short_description": "Upload facts for a host, creating the host if required",
                "deprecated": null
              }
            ],
            "formats": null,
            "full_description": "",
            "errors": [],
            "params": [
              {
                "name": "facts",
                "full_name": "facts",
                "description": "\n<p>hash containing facts for the host</p>\n",
                "required": true,
                "allow_nil": false,
                "validator": "Must be Hash",
                "expected_type": "hash",
                "metadata": null,
                "show": true
              }
            ],
            "examples": [],
            "metadata": null,
            "see": []
          }
        ]
      },
epowell commented 9 years ago

This issues also applies to the latest Foreman discovery plugin on 1.8.x.