bug fix for baremetal operator 56/3456/7
authorr.kuralamudhan <kuralamudhan.ramakrishnan@intel.com>
Thu, 14 May 2020 19:47:04 +0000 (12:47 -0700)
committerr.kuralamudhan <kuralamudhan.ramakrishnan@intel.com>
Thu, 21 May 2020 17:48:53 +0000 (10:48 -0700)
Fixes the following minor bugs:
- Fix the bpa restapi end2end testing
- Fix the dhcp start and reset timings
- Fix the cleanup scripts for docker

Signed-off-by: Kural Ramakrishnan<kuralamudhan.ramakrishnan@intel.com>
Change-Id: I400b9aa9eb27d81dc4cf591a91253bab59caf49e

16 files changed:
Makefile
cmd/bpa-operator/e2etest/test_bmh_provisioning_cr.yaml
cmd/bpa-restapi-agent/e2e_test.sh
deploy/metal3-vm/02_configure_host.sh
deploy/metal3/scripts/01_metal3.sh
deploy/metal3/scripts/bmo/crds/metal3.io_baremetalhosts_crd.yaml [new file with mode: 0644]
deploy/metal3/scripts/bmo/namespace/namespace.yaml [new file with mode: 0644]
deploy/metal3/scripts/bmo/operator/no_ironic/operator.yaml [new file with mode: 0644]
deploy/metal3/scripts/bmo/rbac/role.yaml [new file with mode: 0644]
deploy/metal3/scripts/bmo/rbac/role_binding.yaml [new file with mode: 0644]
deploy/metal3/scripts/bmo/rbac/service_account.yaml [new file with mode: 0644]
deploy/metal3/scripts/nodes.json.sample
env/metal3/01_install_package.sh
env/metal3/03_launch_prereq.sh
env/metal3/06_host_cleanup.sh
env/ubuntu/bootloader-env/02_clean_bootloader_package_req.sh

index d0e5b33..a1bcb25 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -39,6 +39,12 @@ bmh_clean:
 bmh_clean_host:
        pushd $(BMDIR) && ./06_host_cleanup.sh && popd
 
+dhcp_start:
+       pushd $(BMDIR) && ./03_launch_prereq.sh --dhcp-start && popd
+
+dhcp_reset:
+       pushd $(BMDIR) && ./03_launch_prereq.sh --dhcp-reset && popd
+
 clean_packages:
        pushd $(BOOTLOADER_ENV) && \
        ./02_clean_bootloader_package_req.sh --only-packages && popd
@@ -138,8 +144,10 @@ prerequisite:
 bm_verifer: package_prerequisite \
         kud_bm_deploy_mini \
         bmh_all \
+       dhcp_start \
        bpa_op_bmh_verifier \
        bpa_rest_api_verifier \
+       dhcp_reset \
        clean_all
 
 verify_all: prerequisite \
index 4e6f128..bfedde3 100644 (file)
@@ -11,6 +11,6 @@ spec:
         mac-address: 00:1e:67:f8:6a:78
   workers:
     - worker-1:
-         mac-address: 00:1e:67:f8:69:80
+         mac-address: 00:1e:67:f8:6a:58
   KUDPlugins:
     - onap4k8s
index b998f40..48c8f30 100755 (executable)
@@ -55,7 +55,7 @@ while [[ $cur_status != "Running" ]]; do
     sleep 10
 done
 
-sleep 10
+sleep 30
 
 #Get CLusterIP
 IP=$(kubectl get services | grep bpa-api-service | awk '{print $3}')
index e2d3c77..80ee984 100755 (executable)
@@ -145,7 +145,7 @@ if [[ "$MANAGE_BR_BRIDGE" == "y" && $OS == "centos" ]] ; then
   fi
 fi
 
-for name in ironic ironic-inspector dnsmasq httpd mariadb ipa-downloader; do                  
+for name in ironic ironic-inspector dnsmasq httpd mariadb ipa-downloader; do
     sudo "${CONTAINER_RUNTIME}" ps | grep -w "$name$" && sudo "${CONTAINER_RUNTIME}" kill $name
     sudo "${CONTAINER_RUNTIME}" ps --all | grep -w "$name$" && sudo "${CONTAINER_RUNTIME}" rm $name -f
 done
index b922a90..d631e57 100755 (executable)
@@ -93,44 +93,22 @@ function create_userdata {
 }
 
 function launch_baremetal_operator {
-    if [ -d $GOPATH/src/github.com/metal3-io/baremetal-operator ]; then
-        rm -rf $GOPATH/src/github.com/metal3-io/baremetal-operator
-    fi
-
     docker pull integratedcloudnative/baremetal-operator:v1.0-icn
-    docker tag integratedcloudnative/baremetal-operator:v1.0-icn \
-        quay.io/metal3-io/baremetal-operator:master
-
-    mkdir -p $GOPATH/src/github.com/metal3-io
-    pushd $GOPATH/src/github.com/metal3-io
-    git clone --single-branch --branch v1.0-icn \
-        https://github.com/akraino-icn/baremetal-operator.git
-    kubectl apply -f baremetal-operator/deploy/namespace/namespace.yaml
-    kubectl apply -f baremetal-operator/deploy/rbac/service_account.yaml -n metal3
-    kubectl apply -f baremetal-operator/deploy/rbac/role.yaml -n metal3
-    kubectl apply -f baremetal-operator/deploy/rbac/role_binding.yaml
-    kubectl apply -f baremetal-operator/deploy/crds/metal3.io_baremetalhosts_crd.yaml
-    kubectl apply -f baremetal-operator/deploy/operator/no_ironic/operator.yaml -n metal3
-    popd
+    kubectl apply -f bmo/namespace/namespace.yaml
+    kubectl apply -f bmo/rbac/service_account.yaml -n metal3
+    kubectl apply -f bmo/rbac/role.yaml -n metal3
+    kubectl apply -f bmo/rbac/role_binding.yaml
+    kubectl apply -f bmo/crds/metal3.io_baremetalhosts_crd.yaml
+    kubectl apply -f bmo/operator/no_ironic/operator.yaml -n metal3
 }
 
 function remove_baremetal_operator {
-    if [ ! -d $GOPATH/src/github.com/metal3-io/baremetal-operator ]; then
-        pushd $GOPATH/src/github.com/metal3-io
-        git clone --single-branch --branch v1.0-icn \
-               https://github.com/akraino-icn/baremetal-operator.git
-        popd
-    fi
-
-    pushd $GOPATH/src/github.com/metal3-io
-    kubectl delete -f baremetal-operator/deploy/operator/no_ironic/operator.yaml -n metal3
-    kubectl delete -f baremetal-operator/deploy/crds/metal3.io_baremetalhosts_crd.yaml
-    kubectl delete -f baremetal-operator/deploy/rbac/role_binding.yaml
-    kubectl delete -f baremetal-operator/deploy/rbac/role.yaml -n metal3
-    kubectl delete -f baremetal-operator/deploy/rbac/service_account.yaml -n metal3
-    kubectl delete -f baremetal-operator/deploy/namespace/namespace.yaml
-    popd
-    rm -rf $GOPATH/src/github.com/metal3-io/baremetal-operator
+    kubectl delete -f bmo/operator/no_ironic/operator.yaml -n metal3
+    kubectl delete -f bmo/crds/metal3.io_baremetalhosts_crd.yaml
+    kubectl delete -f bmo/rbac/role_binding.yaml
+    kubectl delete -f bmo/rbac/role.yaml -n metal3
+    kubectl delete -f bmo/rbac/service_account.yaml -n metal3
+    kubectl delete -f bmo/namespace/namespace.yaml
 }
 
 function network_config_files {
diff --git a/deploy/metal3/scripts/bmo/crds/metal3.io_baremetalhosts_crd.yaml b/deploy/metal3/scripts/bmo/crds/metal3.io_baremetalhosts_crd.yaml
new file mode 100644 (file)
index 0000000..b4d599a
--- /dev/null
@@ -0,0 +1,562 @@
+apiVersion: apiextensions.k8s.io/v1beta1
+kind: CustomResourceDefinition
+metadata:
+  name: baremetalhosts.metal3.io
+spec:
+  additionalPrinterColumns:
+  - JSONPath: .status.operationalStatus
+    description: Operational status
+    name: Status
+    type: string
+  - JSONPath: .status.provisioning.state
+    description: Provisioning status
+    name: Provisioning Status
+    type: string
+  - JSONPath: .spec.consumerRef.name
+    description: Consumer using this host
+    name: Consumer
+    type: string
+  - JSONPath: .spec.bmc.address
+    description: Address of management controller
+    name: BMC
+    type: string
+  - JSONPath: .status.hardwareProfile
+    description: The type of hardware detected
+    name: Hardware Profile
+    type: string
+  - JSONPath: .spec.online
+    description: Whether the host is online or not
+    name: Online
+    type: string
+  - JSONPath: .status.errorMessage
+    description: Most recent error
+    name: Error
+    type: string
+  group: metal3.io
+  names:
+    kind: BareMetalHost
+    listKind: BareMetalHostList
+    plural: baremetalhosts
+    shortNames:
+    - bmh
+    - bmhost
+    singular: baremetalhost
+  scope: Namespaced
+  subresources:
+    status: {}
+  validation:
+    openAPIV3Schema:
+      description: BareMetalHost is the Schema for the baremetalhosts API
+      properties:
+        apiVersion:
+          description: 'APIVersion defines the versioned schema of this representation
+            of an object. Servers should convert recognized schemas to the latest
+            internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
+          type: string
+        kind:
+          description: 'Kind is a string value representing the REST resource this
+            object represents. Servers may infer this from the endpoint the client
+            submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+          type: string
+        metadata:
+          type: object
+        spec:
+          description: BareMetalHostSpec defines the desired state of BareMetalHost
+          properties:
+            bmc:
+              description: How do we connect to the BMC?
+              properties:
+                address:
+                  description: Address holds the URL for accessing the controller
+                    on the network.
+                  type: string
+                credentialsName:
+                  description: The name of the secret containing the BMC credentials
+                    (requires keys "username" and "password").
+                  type: string
+                disableCertificateVerification:
+                  description: DisableCertificateVerification disables verification
+                    of server certificates when using HTTPS to connect to the BMC.
+                    This is required when the server certificate is self-signed, but
+                    is insecure because it allows a man-in-the-middle to intercept
+                    the connection.
+                  type: boolean
+              required:
+              - address
+              - credentialsName
+              type: object
+            bootMACAddress:
+              description: Which MAC address will PXE boot? This is optional for some
+                types, but required for libvirt VMs driven by vbmc.
+              pattern: '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}'
+              type: string
+            consumerRef:
+              description: ConsumerRef can be used to store information about something
+                that is using a host. When it is not empty, the host is considered
+                "in use".
+              properties:
+                apiVersion:
+                  description: API version of the referent.
+                  type: string
+                fieldPath:
+                  description: 'If referring to a piece of an object instead of an
+                    entire object, this string should contain a valid JSON/Go field
+                    access statement, such as desiredState.manifest.containers[2].
+                    For example, if the object reference is to a container within
+                    a pod, this would take on a value like: "spec.containers{name}"
+                    (where "name" refers to the name of the container that triggered
+                    the event) or if no container name is specified "spec.containers[2]"
+                    (container with index 2 in this pod). This syntax is chosen only
+                    to have some well-defined way of referencing a part of an object.
+                    TODO: this design is not final and this field is subject to change
+                    in the future.'
+                  type: string
+                kind:
+                  description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
+                  type: string
+                name:
+                  description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
+                  type: string
+                namespace:
+                  description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
+                  type: string
+                resourceVersion:
+                  description: 'Specific resourceVersion to which this reference is
+                    made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
+                  type: string
+                uid:
+                  description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
+                  type: string
+              type: object
+            description:
+              description: Description is a human-entered text used to help identify
+                the host
+              type: string
+            externallyProvisioned:
+              description: ExternallyProvisioned means something else is managing
+                the image running on the host and the operator should only manage
+                the power status and hardware inventory inspection. If the Image field
+                is filled in, this field is ignored.
+              type: boolean
+            hardwareProfile:
+              description: What is the name of the hardware profile for this host?
+                It should only be necessary to set this when inspection cannot automatically
+                determine the profile.
+              type: string
+            image:
+              description: Image holds the details of the image to be provisioned.
+              properties:
+                checksum:
+                  description: Checksum is the checksum for the image.
+                  type: string
+                url:
+                  description: URL is a location of an image to deploy.
+                  type: string
+              required:
+              - checksum
+              - url
+              type: object
+            networkData:
+              description: NetworkData holds the reference to the Secret containing
+                content of network_data.json which is passed to Config Drive
+              properties:
+                name:
+                  description: Name is unique within a namespace to reference a secret
+                    resource.
+                  type: string
+                namespace:
+                  description: Namespace defines the space within which the secret
+                    name must be unique.
+                  type: string
+              type: object
+            online:
+              description: Should the server be online?
+              type: boolean
+            taints:
+              description: Taints is the full, authoritative list of taints to apply
+                to the corresponding Machine. This list will overwrite any modifications
+                made to the Machine on an ongoing basis.
+              items:
+                description: The node this Taint is attached to has the "effect" on
+                  any pod that does not tolerate the Taint.
+                properties:
+                  effect:
+                    description: Required. The effect of the taint on pods that do
+                      not tolerate the taint. Valid effects are NoSchedule, PreferNoSchedule
+                      and NoExecute.
+                    type: string
+                  key:
+                    description: Required. The taint key to be applied to a node.
+                    type: string
+                  timeAdded:
+                    description: TimeAdded represents the time at which the taint
+                      was added. It is only written for NoExecute taints.
+                    format: date-time
+                    type: string
+                  value:
+                    description: Required. The taint value corresponding to the taint
+                      key.
+                    type: string
+                required:
+                - effect
+                - key
+                type: object
+              type: array
+            userData:
+              description: UserData holds the reference to the Secret containing the
+                user data to be passed to the host before it boots.
+              properties:
+                name:
+                  description: Name is unique within a namespace to reference a secret
+                    resource.
+                  type: string
+                namespace:
+                  description: Namespace defines the space within which the secret
+                    name must be unique.
+                  type: string
+              type: object
+          required:
+          - online
+          type: object
+        status:
+          description: BareMetalHostStatus defines the observed state of BareMetalHost
+          properties:
+            errorMessage:
+              description: the last error message reported by the provisioning subsystem
+              type: string
+            errorType:
+              description: ErrorType indicates the type of failure encountered when
+                the OperationalStatus is OperationalStatusError
+              enum:
+              - registration error
+              - inspection error
+              - provisioning error
+              - power management error
+              type: string
+            goodCredentials:
+              description: the last credentials we were able to validate as working
+              properties:
+                credentials:
+                  description: SecretReference represents a Secret Reference. It has
+                    enough information to retrieve secret in any namespace
+                  properties:
+                    name:
+                      description: Name is unique within a namespace to reference
+                        a secret resource.
+                      type: string
+                    namespace:
+                      description: Namespace defines the space within which the secret
+                        name must be unique.
+                      type: string
+                  type: object
+                credentialsVersion:
+                  type: string
+              type: object
+            hardware:
+              description: The hardware discovered to exist on the host.
+              properties:
+                cpu:
+                  description: CPU describes one processor on the host.
+                  properties:
+                    arch:
+                      type: string
+                    clockMegahertz:
+                      description: ClockSpeed is a clock speed in MHz
+                    count:
+                      type: integer
+                    flags:
+                      items:
+                        type: string
+                      type: array
+                    model:
+                      type: string
+                  required:
+                  - arch
+                  - clockMegahertz
+                  - count
+                  - flags
+                  - model
+                  type: object
+                firmware:
+                  description: Firmware describes the firmware on the host.
+                  properties:
+                    bios:
+                      description: The BIOS for this firmware
+                      properties:
+                        date:
+                          description: The release/build date for this BIOS
+                          type: string
+                        vendor:
+                          description: The vendor name for this BIOS
+                          type: string
+                        version:
+                          description: The version of the BIOS
+                          type: string
+                      required:
+                      - date
+                      - vendor
+                      - version
+                      type: object
+                  required:
+                  - bios
+                  type: object
+                hostname:
+                  type: string
+                nics:
+                  items:
+                    description: NIC describes one network interface on the host.
+                    properties:
+                      ip:
+                        description: The IP address of the device
+                        type: string
+                      mac:
+                        description: The device MAC addr
+                        pattern: '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}'
+                        type: string
+                      model:
+                        description: The name of the model, e.g. "virt-io"
+                        type: string
+                      name:
+                        description: The name of the NIC, e.g. "nic-1"
+                        type: string
+                      pxe:
+                        description: Whether the NIC is PXE Bootable
+                        type: boolean
+                      speedGbps:
+                        description: The speed of the device
+                        type: integer
+                      vlanId:
+                        description: The untagged VLAN ID
+                        format: int32
+                        type: integer
+                      vlans:
+                        description: The VLANs available
+                        items:
+                          description: VLAN represents the name and ID of a VLAN
+                          properties:
+                            id:
+                              description: VLANID is a 12-bit 802.1Q VLAN identifier
+                              format: int32
+                              type: integer
+                            name:
+                              type: string
+                          required:
+                          - id
+                          type: object
+                        type: array
+                    required:
+                    - ip
+                    - mac
+                    - model
+                    - name
+                    - pxe
+                    - speedGbps
+                    - vlanId
+                    type: object
+                  type: array
+                ramMebibytes:
+                  type: integer
+                storage:
+                  items:
+                    description: Storage describes one storage device (disk, SSD,
+                      etc.) on the host.
+                    properties:
+                      hctl:
+                        description: The SCSI location of the device
+                        type: string
+                      model:
+                        description: Hardware model
+                        type: string
+                      name:
+                        description: A name for the disk, e.g. "disk 1 (boot)"
+                        type: string
+                      rotational:
+                        description: Whether this disk represents rotational storage
+                        type: boolean
+                      serialNumber:
+                        description: The serial number of the device
+                        type: string
+                      sizeBytes:
+                        description: The size of the disk in Bytes
+                        format: int64
+                        type: integer
+                      vendor:
+                        description: The name of the vendor of the device
+                        type: string
+                      wwn:
+                        description: The WWN of the device
+                        type: string
+                      wwnVendorExtension:
+                        description: The WWN Vendor extension of the device
+                        type: string
+                      wwnWithExtension:
+                        description: The WWN with the extension
+                        type: string
+                    required:
+                    - name
+                    - rotational
+                    - serialNumber
+                    - sizeBytes
+                    type: object
+                  type: array
+                systemVendor:
+                  description: HardwareSystemVendor stores details about the whole
+                    hardware system.
+                  properties:
+                    manufacturer:
+                      type: string
+                    productName:
+                      type: string
+                    serialNumber:
+                      type: string
+                  required:
+                  - manufacturer
+                  - productName
+                  - serialNumber
+                  type: object
+              required:
+              - cpu
+              - firmware
+              - hostname
+              - nics
+              - ramMebibytes
+              - storage
+              - systemVendor
+              type: object
+            hardwareProfile:
+              description: The name of the profile matching the hardware details.
+              type: string
+            lastUpdated:
+              description: LastUpdated identifies when this status was last observed.
+              format: date-time
+              type: string
+            operationHistory:
+              description: OperationHistory holds information about operations performed
+                on this host.
+              properties:
+                deprovision:
+                  description: OperationMetric contains metadata about an operation
+                    (inspection, provisioning, etc.) used for tracking metrics.
+                  properties:
+                    end:
+                      format: date-time
+                      nullable: true
+                      type: string
+                    start:
+                      format: date-time
+                      nullable: true
+                      type: string
+                  type: object
+                inspect:
+                  description: OperationMetric contains metadata about an operation
+                    (inspection, provisioning, etc.) used for tracking metrics.
+                  properties:
+                    end:
+                      format: date-time
+                      nullable: true
+                      type: string
+                    start:
+                      format: date-time
+                      nullable: true
+                      type: string
+                  type: object
+                provision:
+                  description: OperationMetric contains metadata about an operation
+                    (inspection, provisioning, etc.) used for tracking metrics.
+                  properties:
+                    end:
+                      format: date-time
+                      nullable: true
+                      type: string
+                    start:
+                      format: date-time
+                      nullable: true
+                      type: string
+                  type: object
+                register:
+                  description: OperationMetric contains metadata about an operation
+                    (inspection, provisioning, etc.) used for tracking metrics.
+                  properties:
+                    end:
+                      format: date-time
+                      nullable: true
+                      type: string
+                    start:
+                      format: date-time
+                      nullable: true
+                      type: string
+                  type: object
+              type: object
+            operationalStatus:
+              description: OperationalStatus holds the status of the host
+              enum:
+              - ""
+              - OK
+              - discovered
+              - error
+              type: string
+            poweredOn:
+              description: indicator for whether or not the host is powered on
+              type: boolean
+            provisioning:
+              description: Information tracked by the provisioner.
+              properties:
+                ID:
+                  description: The machine's UUID from the underlying provisioning
+                    tool
+                  type: string
+                image:
+                  description: Image holds the details of the last image successfully
+                    provisioned to the host.
+                  properties:
+                    checksum:
+                      description: Checksum is the checksum for the image.
+                      type: string
+                    url:
+                      description: URL is a location of an image to deploy.
+                      type: string
+                  required:
+                  - checksum
+                  - url
+                  type: object
+                state:
+                  description: An indiciator for what the provisioner is doing with
+                    the host.
+                  type: string
+              required:
+              - ID
+              - state
+              type: object
+            triedCredentials:
+              description: the last credentials we sent to the provisioning backend
+              properties:
+                credentials:
+                  description: SecretReference represents a Secret Reference. It has
+                    enough information to retrieve secret in any namespace
+                  properties:
+                    name:
+                      description: Name is unique within a namespace to reference
+                        a secret resource.
+                      type: string
+                    namespace:
+                      description: Namespace defines the space within which the secret
+                        name must be unique.
+                      type: string
+                  type: object
+                credentialsVersion:
+                  type: string
+              type: object
+          required:
+          - errorMessage
+          - hardwareProfile
+          - operationHistory
+          - operationalStatus
+          - poweredOn
+          - provisioning
+          type: object
+      type: object
+  version: v1alpha1
+  versions:
+  - name: v1alpha1
+    served: true
+    storage: true
diff --git a/deploy/metal3/scripts/bmo/namespace/namespace.yaml b/deploy/metal3/scripts/bmo/namespace/namespace.yaml
new file mode 100644 (file)
index 0000000..5dd639a
--- /dev/null
@@ -0,0 +1,4 @@
+apiVersion: v1
+kind: Namespace
+metadata:
+  name: metal3
diff --git a/deploy/metal3/scripts/bmo/operator/no_ironic/operator.yaml b/deploy/metal3/scripts/bmo/operator/no_ironic/operator.yaml
new file mode 100644 (file)
index 0000000..706b635
--- /dev/null
@@ -0,0 +1,52 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: metal3-baremetal-operator
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      name: metal3-baremetal-operator
+  template:
+    metadata:
+      labels:
+        name: metal3-baremetal-operator
+    spec:
+      serviceAccountName: metal3-baremetal-operator
+      containers:
+        - name: baremetal-operator
+          image: integratedcloudnative/baremetal-operator:v1.0-icn
+          ports:
+          - containerPort: 60000
+            name: metrics
+          command:
+          - /baremetal-operator
+          imagePullPolicy: Always
+          env:
+            - name: WATCH_NAMESPACE
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.namespace
+            - name: POD_NAME
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.name
+            - name: OPERATOR_NAME
+              value: "baremetal-operator"
+            - name: DEPLOY_KERNEL_URL
+              value: "http://172.22.0.1/images/ironic-python-agent.kernel"
+            - name: DEPLOY_RAMDISK_URL
+              value: "http://172.22.0.1/images/ironic-python-agent.initramfs"
+            - name: IRONIC_ENDPOINT
+              value: "http://localhost:6385/v1/"
+            - name: IRONIC_INSPECTOR_ENDPOINT
+              value: "http://localhost:5050/v1/"
+        # Temporary workaround to talk to an external Ironic process until Ironic is running in this pod.
+        - name: ironic-proxy
+          image: alpine/socat
+          command: ["socat", "tcp-listen:6385,fork,reuseaddr", "tcp-connect:172.22.0.1:6385"]
+          imagePullPolicy: Always
+        - name: ironic-inspector-proxy
+          image: alpine/socat
+          command: ["socat", "tcp-listen:5050,fork,reuseaddr", "tcp-connect:172.22.0.1:5050"]
+          imagePullPolicy: Always
diff --git a/deploy/metal3/scripts/bmo/rbac/role.yaml b/deploy/metal3/scripts/bmo/rbac/role.yaml
new file mode 100644 (file)
index 0000000..11c674c
--- /dev/null
@@ -0,0 +1,62 @@
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+  creationTimestamp: null
+  name: metal3-baremetal-operator
+rules:
+- apiGroups:
+  - ""
+  resources:
+  - configmaps
+  verbs:
+  - list
+  - get
+  - create
+  - update
+- apiGroups:
+  - ""
+  resources:
+  - secrets
+  verbs:
+  - watch
+  - list
+  - update
+- apiGroups:
+  - ""
+  resources:
+  - events
+  verbs:
+  - create
+- apiGroups:
+  - ""
+  resources:
+  - namespaces
+  verbs:
+  - get
+- apiGroups:
+  - monitoring.coreos.com
+  resources:
+  - servicemonitors
+  verbs:
+  - get
+  - create
+- apiGroups:
+  - metal3.io
+  resources:
+  - baremetalhosts
+  verbs:
+  - create
+  - delete
+  - get
+  - list
+  - patch
+  - update
+  - watch
+- apiGroups:
+  - metal3.io
+  resources:
+  - baremetalhosts/status
+  verbs:
+  - get
+  - patch
+  - update
diff --git a/deploy/metal3/scripts/bmo/rbac/role_binding.yaml b/deploy/metal3/scripts/bmo/rbac/role_binding.yaml
new file mode 100644 (file)
index 0000000..d34e96c
--- /dev/null
@@ -0,0 +1,14 @@
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+  name: metal3-baremetal-operator
+subjects:
+- kind: ServiceAccount
+  name: metal3-baremetal-operator
+  namespace: metal3
+- kind: User
+  name: developer
+roleRef:
+  kind: ClusterRole
+  name: metal3-baremetal-operator
+  apiGroup: rbac.authorization.k8s.io
diff --git a/deploy/metal3/scripts/bmo/rbac/service_account.yaml b/deploy/metal3/scripts/bmo/rbac/service_account.yaml
new file mode 100644 (file)
index 0000000..b5000fe
--- /dev/null
@@ -0,0 +1,4 @@
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: metal3-baremetal-operator
index c9edd01..3b26917 100644 (file)
@@ -18,7 +18,7 @@
       "ipmi_driver_info": {
         "username": "root",
         "password": "root",
-        "address": "10.10.110.13"
+        "address": "10.10.110.14"
       },
       "os": {
         "image_name": "bionic-server-cloudimg-amd64.img",
index ef82f46..56b65d3 100755 (executable)
@@ -32,7 +32,7 @@ function install_essential_packages {
 
     add-apt-repository -y ppa:longsleep/golang-backports
     apt-get update
-    apt-get install golang-go
+    apt-get install golang-go -y
 }
 
 function install_ironic_packages {
index 3f6fc6e..0d81e5a 100755 (executable)
@@ -147,6 +147,13 @@ function install_dhcp {
     kubectl create -f $PWD/04_dhcp.yaml
 }
 
+function reset_dhcp {
+    kubectl delete -f $PWD/04_dhcp.yaml
+    if [ -d $BS_DHCP_DIR ]; then
+        rm -rf $BS_DHCP_DIR
+    fi
+}
+
 function create_ironic_env {
     cat <<EOF > ${PWD}/ironic.env
 PROVISIONING_INTERFACE=provisioning
@@ -173,7 +180,6 @@ function install {
     #Todo - error handling mechanism
     create_ironic_env
     install_ironic_container
-    install_dhcp
 }
 
 if [ "$1" == "-o" ]; then
@@ -181,4 +187,18 @@ if [ "$1" == "-o" ]; then
     exit 0
 fi
 
+if [ "$1" == "--dhcp-start" ]; then
+    install_dhcp
+    echo "wait for 320s for nodes to be assigned"
+    sleep 6m
+    exit 0
+fi
+
+if [ "$1" == "--dhcp-reset" ]; then
+    reset_dhcp
+    echo "wait for 320s for nodes to be re-assigned"
+    sleep 6m
+    exit 0
+fi
+
 install
index 641e31e..4085718 100755 (executable)
@@ -16,7 +16,6 @@ brctl delbr provisioning
 ip link set dhcp0 down
 brctl delbr dhcp0
 
-rm -rf ${BS_DHCP_DIR}
 rm -rf ${IRONIC_DATA_DIR}
 
 #Kubeadm usage is deprecated in v1.0.0
index caea9db..a2130a0 100755 (executable)
@@ -53,19 +53,15 @@ function clean_docker_packages {
         $(lsb_release -cs) \
         stable"
     apt-get update
+    docker rmi -f $(docker image ls -a -q)
     apt-get remove docker-ce -y
-    #for package in apt-transport-https ca-certificates gnupg-agent \
-    #        software-properties-common; do
-    #    apt-get remove $package -y
-    #done
-
     apt-get remove -y docker \
         docker-engine \
         docker.io \
         containerd \
         runc \
         docker-ce
-
+    apt-get purge docker-* -y --allow-change-held-packages
     apt-get update
 }
 
@@ -146,7 +142,7 @@ function clean_dir {
 
 if [ "$1" == "--only-packages" ]; then
     check_prerequisite
-    clean_docker_packages
+    clean_docker_packages || true
     #clean_ironic_packages
     autoremove
     exit 0