Skip to content

Instantly share code, notes, and snippets.

@kadel
Last active December 16, 2015 17:26
Show Gist options
  • Select an option

  • Save kadel/6e535142d706a886f537 to your computer and use it in GitHub Desktop.

Select an option

Save kadel/6e535142d706a886f537 to your computer and use it in GitHub Desktop.
openshift testing

examples

getting openshift resources

https://github.com/projectatomic/atomicapp/blob/master/atomicapp/providers/openshift.py#L66

request: GET http://example.com/oapi/v1

response:

HTTP/1.1 200 OK
Cache-Control: no-store
Content-Type: application/json
Date: Wed, 16 Dec 2015 16:53:43 GMT
Transfer-Encoding: chunked
{
    "groupVersion": "v1", 
    "resources": [
        {
            "name": "buildconfigs", 
            "namespaced": true
        }, 
        {
            "name": "buildconfigs/instantiate", 
            "namespaced": true
        }, 
        {
            "name": "buildconfigs/instantiatebinary", 
            "namespaced": true
        }, 
        {
            "name": "buildconfigs/webhooks", 
            "namespaced": true
        }, 
        {
            "name": "builds", 
            "namespaced": true
        }, 
        {
            "name": "builds/clone", 
            "namespaced": true
        }, 
        {
            "name": "builds/log", 
            "namespaced": true
        }, 
        {
            "name": "clusternetworks", 
            "namespaced": false
        }, 
        {
            "name": "clusterpolicies", 
            "namespaced": false
        }, 
        {
            "name": "clusterpolicybindings", 
            "namespaced": false
        }, 
        {
            "name": "clusterrolebindings", 
            "namespaced": false
        }, 
        {
            "name": "clusterroles", 
            "namespaced": false
        }, 
        {
            "name": "deploymentconfigrollbacks", 
            "namespaced": true
        }, 
        {
            "name": "deploymentconfigs", 
            "namespaced": true
        }, 
        {
            "name": "deploymentconfigs/log", 
            "namespaced": true
        }, 
        {
            "name": "deploymentconfigs/scale", 
            "namespaced": true
        }, 
        {
            "name": "generatedeploymentconfigs", 
            "namespaced": true
        }, 
        {
            "name": "groups", 
            "namespaced": false
        }, 
        {
            "name": "hostsubnets", 
            "namespaced": false
        }, 
        {
            "name": "identities", 
            "namespaced": false
        }, 
        {
            "name": "images", 
            "namespaced": false
        }, 
        {
            "name": "imagestreamimages", 
            "namespaced": true
        }, 
        {
            "name": "imagestreammappings", 
            "namespaced": true
        }, 
        {
            "name": "imagestreams", 
            "namespaced": true
        }, 
        {
            "name": "imagestreams/status", 
            "namespaced": true
        }, 
        {
            "name": "imagestreamtags", 
            "namespaced": true
        }, 
        {
            "name": "localresourceaccessreviews", 
            "namespaced": true
        }, 
        {
            "name": "localsubjectaccessreviews", 
            "namespaced": true
        }, 
        {
            "name": "netnamespaces", 
            "namespaced": false
        }, 
        {
            "name": "oauthaccesstokens", 
            "namespaced": false
        }, 
        {
            "name": "oauthauthorizetokens", 
            "namespaced": false
        }, 
        {
            "name": "oauthclientauthorizations", 
            "namespaced": false
        }, 
        {
            "name": "oauthclients", 
            "namespaced": false
        }, 
        {
            "name": "policies", 
            "namespaced": true
        }, 
        {
            "name": "policybindings", 
            "namespaced": true
        }, 
        {
            "name": "processedtemplates", 
            "namespaced": true
        }, 
        {
            "name": "projectrequests", 
            "namespaced": false
        }, 
        {
            "name": "projects", 
            "namespaced": false
        }, 
        {
            "name": "resourceaccessreviews", 
            "namespaced": true
        }, 
        {
            "name": "rolebindings", 
            "namespaced": true
        }, 
        {
            "name": "roles", 
            "namespaced": true
        }, 
        {
            "name": "routes", 
            "namespaced": true
        }, 
        {
            "name": "routes/status", 
            "namespaced": true
        }, 
        {
            "name": "subjectaccessreviews", 
            "namespaced": true
        }, 
        {
            "name": "templates", 
            "namespaced": true
        }, 
        {
            "name": "useridentitymappings", 
            "namespaced": false
        }, 
        {
            "name": "users", 
            "namespaced": false
        }
    ]
}

getting kubernetes resources

https://github.com/projectatomic/atomicapp/blob/master/atomicapp/providers/openshift.py#L75

request: http://example.com/api/v1

response:

HTTP/1.1 200 OK
Cache-Control: no-store
Content-Type: application/json
Date: Wed, 16 Dec 2015 16:52:46 GMT
Transfer-Encoding: chunked
{
    "groupVersion": "v1", 
    "resources": [
        {
            "name": "bindings", 
            "namespaced": true
        }, 
        {
            "name": "componentstatuses", 
            "namespaced": true
        }, 
        {
            "name": "endpoints", 
            "namespaced": true
        }, 
        {
            "name": "events", 
            "namespaced": true
        }, 
        {
            "name": "limitranges", 
            "namespaced": true
        }, 
        {
            "name": "namespaces", 
            "namespaced": false
        }, 
        {
            "name": "namespaces/finalize", 
            "namespaced": false
        }, 
        {
            "name": "namespaces/status", 
            "namespaced": false
        }, 
        {
            "name": "nodes", 
            "namespaced": false
        }, 
        {
            "name": "nodes/status", 
            "namespaced": false
        }, 
        {
            "name": "persistentvolumeclaims", 
            "namespaced": true
        }, 
        {
            "name": "persistentvolumeclaims/status", 
            "namespaced": true
        }, 
        {
            "name": "persistentvolumes", 
            "namespaced": false
        }, 
        {
            "name": "persistentvolumes/status", 
            "namespaced": false
        }, 
        {
            "name": "pods", 
            "namespaced": true
        }, 
        {
            "name": "pods/attach", 
            "namespaced": true
        }, 
        {
            "name": "pods/binding", 
            "namespaced": true
        }, 
        {
            "name": "pods/exec", 
            "namespaced": true
        }, 
        {
            "name": "pods/log", 
            "namespaced": true
        }, 
        {
            "name": "pods/portforward", 
            "namespaced": true
        }, 
        {
            "name": "pods/proxy", 
            "namespaced": true
        }, 
        {
            "name": "pods/status", 
            "namespaced": true
        }, 
        {
            "name": "podtemplates", 
            "namespaced": true
        }, 
        {
            "name": "replicationcontrollers", 
            "namespaced": true
        }, 
        {
            "name": "replicationcontrollers/status", 
            "namespaced": true
        }, 
        {
            "name": "resourcequotas", 
            "namespaced": true
        }, 
        {
            "name": "resourcequotas/status", 
            "namespaced": true
        }, 
        {
            "name": "secrets", 
            "namespaced": true
        }, 
        {
            "name": "securitycontextconstraints", 
            "namespaced": false
        }, 
        {
            "name": "serviceaccounts", 
            "namespaced": true
        }, 
        {
            "name": "services", 
            "namespaced": true
        }
    ]
}

deploy artifact

https://github.com/projectatomic/atomicapp/blob/master/atomicapp/providers/openshift.py#L120

request: POST "https://example.com/oapi/v1/namespaces/example/routes"

data:

{
    "apiVersion": "v1",
    "kind": "Route",
    "metadata": {
        "labels": {
            "app": "nonroot-nginx"
        },
        "name": "nonroot-nginx"
    },
    "spec": {
        "port": {
            "targetPort": "8080"
        },
        "to": {
            "kind": "Service",
            "name": "nonroot-nginx"
        }
    }
}

response:

HTTP/1.1 201 Created
Cache-Control: no-store
Content-Length: 516
Content-Type: application/json
Date: Wed, 16 Dec 2015 17:18:20 GMT
{
    "apiVersion": "v1", 
    "kind": "Route", 
    "metadata": {
        "annotations": {
            "openshift.io/host.generated": "true"
        }, 
        "creationTimestamp": "2015-12-16T17:18:20Z", 
        "labels": {
            "app": "nonroot-nginx"
        }, 
        "name": "nonroot-nginx", 
        "namespace": "testing", 
        "resourceVersion": "21376879", 
        "selfLink": "/oapi/v1/namespaces/testing/routes/nonroot-nginx", 
        "uid": "016cdb9b-a419-11e5-bbd9-0e2e65752393"
    }, 
    "spec": {
        "host": "nonroot-nginx-testing.e8ca.engint.openshiftapps.com", 
        "port": {
            "targetPort": "8080"
        }, 
        "to": {
            "kind": "Service", 
            "name": "nonroot-nginx"
        }
    }, 
    "status": {}
}

process template

https://github.com/projectatomic/atomicapp/blob/master/atomicapp/providers/openshift.py#L190

request: POST http://example.com/oapi/v1/namespaces/example/processedtemplates

data:

{
  "apiVersion": "v1",
  "kind": "Template",
  "metadata": {
    "name": "nonroot-nginx-template"
  },
  "parameters": [
    {
      "name": "lbl1",
      "description": "test label",
      "required": true,
      "value": "label1"
    }
  ],
  "objects": [
    {
      "apiVersion": "v1",
      "kind": "DeploymentConfig",
      "metadata": {
        "labels": {
          "app": "nonroot-nginx",
          "lbl1": "${lbl1}"
        },
        "name": "nonroot-nginx"
      },
      "spec": {
        "replicas": 1,
        "selector": {
          "app": "nonroot-nginx",
          "deploymentconfig": "nonroot-nginx"
        },
        "template": {
          "metadata": {
            "labels": {
              "app": "nonroot-nginx",
              "deploymentconfig": "nonroot-nginx"
            }
          },
          "spec": {
            "containers": [
              {
                "image": "tomaskral/nonroot-nginx",
                "imagePullPolicy": "IfNotPresent",
                "name": "nonroot-nginx",
                "ports": [
                  {
                    "containerPort": 8080,
                    "name": "8080-tcp",
                    "protocol": "TCP"
                  }
                ]
              }
            ]
          }
        },
        "triggers": [
          {
            "type": "ConfigChange"
          }
        ]
      }
    },
    {
      "apiVersion": "v1",
      "kind": "Service",
      "metadata": {
        "creationTimestamp": null,
        "labels": {
          "app": "nonroot-nginx"
        },
        "name": "nonroot-nginx"
      },
      "spec": {
        "ports": [
          {
            "name": "8080-tcp",
            "port": 8080,
            "protocol": "TCP",
            "targetPort": 8080
          }
        ],
        "selector": {
          "app": "nonroot-nginx",
          "deploymentconfig": "nonroot-nginx"
        },
        "sessionAffinity": "None",
        "type": "ClusterIP"
      },
      "status": {
        "loadBalancer": {}
      }
    },
    {
      "apiVersion": "v1",
      "kind": "Route",
      "metadata": {
        "labels": {
          "app": "nonroot-nginx"
        },
        "name": "nonroot-nginx"
      },
      "spec": {
        "port": {
          "targetPort": "8080"
        },
        "to": {
          "kind": "Service",
          "name": "nonroot-nginx"
        }
      }
    }
  ]
}{
  "apiVersion": "v1",
  "kind": "Template",
  "metadata": {
    "name": "nonroot-nginx-template"
  },
  "parameters": [
    {
      "name": "lbl1",
      "description": "test label",
      "required": true,
      "value": "label1"
    }
  ],
  "objects": [
    {
      "apiVersion": "v1",
      "kind": "DeploymentConfig",
      "metadata": {
        "labels": {
          "app": "nonroot-nginx",
          "lbl1": "${lbl1}"
        },
        "name": "nonroot-nginx"
      },
      "spec": {
        "replicas": 1,
        "selector": {
          "app": "nonroot-nginx",
          "deploymentconfig": "nonroot-nginx"
        },
        "template": {
          "metadata": {
            "labels": {
              "app": "nonroot-nginx",
              "deploymentconfig": "nonroot-nginx"
            }
          },
          "spec": {
            "containers": [
              {
                "image": "tomaskral/nonroot-nginx",
                "imagePullPolicy": "IfNotPresent",
                "name": "nonroot-nginx",
                "ports": [
                  {
                    "containerPort": 8080,
                    "name": "8080-tcp",
                    "protocol": "TCP"
                  }
                ]
              }
            ]
          }
        },
        "triggers": [
          {
            "type": "ConfigChange"
          }
        ]
      }
    },
    {
      "apiVersion": "v1",
      "kind": "Service",
      "metadata": {
        "creationTimestamp": null,
        "labels": {
          "app": "nonroot-nginx"
        },
        "name": "nonroot-nginx"
      },
      "spec": {
        "ports": [
          {
            "name": "8080-tcp",
            "port": 8080,
            "protocol": "TCP",
            "targetPort": 8080
          }
        ],
        "selector": {
          "app": "nonroot-nginx",
          "deploymentconfig": "nonroot-nginx"
        },
        "sessionAffinity": "None",
        "type": "ClusterIP"
      },
      "status": {
        "loadBalancer": {}
      }
    },
    {
      "apiVersion": "v1",
      "kind": "Route",
      "metadata": {
        "labels": {
          "app": "nonroot-nginx"
        },
        "name": "nonroot-nginx"
      },
      "spec": {
        "port": {
          "targetPort": "8080"
        },
        "to": {
          "kind": "Service",
          "name": "nonroot-nginx"
        }
      }
    }
  ]
}

response:

HTTP/1.1 201 Created
Cache-Control: no-store
Content-Length: 1373
Content-Type: application/json
Date: Wed, 16 Dec 2015 17:22:06 GMT
{
    "apiVersion": "v1", 
    "kind": "Template", 
    "metadata": {
        "creationTimestamp": null, 
        "name": "nonroot-nginx-template", 
        "selfLink": "/oapi/v1/namespaces/processedtemplates/nonroot-nginx-template"
    }, 
    "objects": [
        {
            "apiVersion": "v1", 
            "kind": "DeploymentConfig", 
            "metadata": {
                "labels": {
                    "app": "nonroot-nginx", 
                    "lbl1": "label1"
                }, 
                "name": "nonroot-nginx"
            }, 
            "spec": {
                "replicas": 1, 
                "selector": {
                    "app": "nonroot-nginx", 
                    "deploymentconfig": "nonroot-nginx"
                }, 
                "template": {
                    "metadata": {
                        "labels": {
                            "app": "nonroot-nginx", 
                            "deploymentconfig": "nonroot-nginx"
                        }
                    }, 
                    "spec": {
                        "containers": [
                            {
                                "image": "tomaskral/nonroot-nginx", 
                                "imagePullPolicy": "IfNotPresent", 
                                "name": "nonroot-nginx", 
                                "ports": [
                                    {
                                        "containerPort": 8080, 
                                        "name": "8080-tcp", 
                                        "protocol": "TCP"
                                    }
                                ]
                            }
                        ]
                    }
                }, 
                "triggers": [
                    {
                        "type": "ConfigChange"
                    }
                ]
            }
        }, 
        {
            "apiVersion": "v1", 
            "kind": "Service", 
            "metadata": {
                "creationTimestamp": null, 
                "labels": {
                    "app": "nonroot-nginx"
                }, 
                "name": "nonroot-nginx"
            }, 
            "spec": {
                "ports": [
                    {
                        "name": "8080-tcp", 
                        "port": 8080, 
                        "protocol": "TCP", 
                        "targetPort": 8080
                    }
                ], 
                "selector": {
                    "app": "nonroot-nginx", 
                    "deploymentconfig": "nonroot-nginx"
                }, 
                "sessionAffinity": "None", 
                "type": "ClusterIP"
            }, 
            "status": {
                "loadBalancer": {}
            }
        }, 
        {
            "apiVersion": "v1", 
            "kind": "Route", 
            "metadata": {
                "labels": {
                    "app": "nonroot-nginx"
                }, 
                "name": "nonroot-nginx"
            }, 
            "spec": {
                "port": {
                    "targetPort": "8080"
                }, 
                "to": {
                    "kind": "Service", 
                    "name": "nonroot-nginx"
                }
            }
        }
    ], 
    "parameters": [
        {
            "description": "test label", 
            "name": "lbl1", 
            "required": true, 
            "value": "label1"
        }
    ]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment