github.com/openshift/installer@v1.4.17/CHANGELOG.md (about)

     1  # Changelog
     2  
     3  All notable changes to this project will be documented in this file.
     4  
     5  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
     6  
     7  ## 0.16.0 - 2019-04-01
     8  
     9  ### Added
    10  
    11  - Documentation for [user-provided infrastructure on bare
    12    metal](docs/user/metal/install_upi.md).
    13  
    14  ### Changed
    15  
    16  - Authorized SSH keys are now supplied via installer-generated
    17    MachineConfig manifests instead of the stub Ignition configurations.
    18    Additional MachineConfig manifests may be provided during a [staged
    19    install](docs/user/overview.md#multiple-invocations).
    20  - [The certificate signer][kubecsr] used for etcd bootstrapping is now
    21    sourced from the release image instead of from
    22    `quay.io/coreos/kube-etcd-signer-server`.
    23  - The pinned RHCOS bootimage has been bumped from 400.7.20190306.0 to
    24    410.8.20190325.0 to transition from a RHEL 7 base to RHEL 8.
    25  - The detailed networking configuration manifest has been moved from
    26    `networkconfigs.networkoperator.openshift.io` to
    27    `networks.operator.openshift.io`.
    28  - When installation fails after bootstrap removal, the installer will
    29    now pass along the status reported by [the cluster-version
    30    operator][cluster-version-operator], to make it easier to identify
    31    underlying issues.
    32  - On AWS, when specific availability zones are requested for all
    33    machine pools in `install-config.yaml`, the installer will now only
    34    create per-zone resources for those zones.  This allows for clusters
    35    in high-zone regions like us-east-1 without requiring limit bumps.
    36  - On OpenStack, we have restored the ability to create Machine(Set)s
    37    with trunk support enabled.
    38  - On OpenStack, machines are now tagged with `Name` and
    39    `openshiftClusterID`.
    40  - Several cleanups to docs, internal code, and user-provided
    41    infrastructure support.
    42  
    43  ### Fixed
    44  
    45  - On AWS, creating a new cluster using the same Kubernetes API URL as
    46    an existing cluster will now error out instead of clobbering public
    47    Route 53 records for the existing cluster.  This adds an additional
    48    install-time permission requirement:
    49    `s3:GetBucketObjectLockConfiguration`.
    50  - On AWS, install-config validation now requires any explicitly
    51    configured machine-pool zones to be in the configured platform
    52    region.  Installs never worked for zones from other regions, but the
    53    improved validation gives a more obivous error message and avoids
    54    partially provisioning a cluster before hitting the error.
    55  
    56  ## 0.15.0 - 2019-03-25
    57  
    58  ### Added
    59  
    60  - We now initialize TLS certificates for etcd metrics over TCP on port
    61    9979.  We also store etcd certificates in various `kube-system`
    62    Secrets and ConfigMaps.
    63  - The Kubernetes client is now extracted from the release image's
    64    `kube-client-agent` reference, replacing
    65    `quay.io/coreos/kube-client-agent`.
    66  - On the control-plane and compute nodes, CRI-O's pause image is now
    67    extracted from the release image's `pod` reference.
    68  - Initial work for user-provided infrastructure on AWS and vSphere,
    69    including a new `user-provided-infrastructure` subcommand.
    70  
    71  ### Changed
    72  
    73  - The install-config version has been bumped to `v1beta4` for changes
    74    to more closely align with `Network.config.openshift.io`:
    75      - `serviceCIDR` is now `serviceNetwork`.
    76      - `clusterNetworks` is now `clusterNetwork`.
    77      - `type` is now `networkType`.
    78      - `hostSubnetLength` is now `hostPrefix`.
    79      `v1beta3` is deprecated and will be removed in a future release.
    80  - On AWS and OpenStack, ports 9000 through 9999 are now open for UDP.
    81    They had been open for TCP since 0.4.0, with a bugfix for 9990 ->
    82    9999 in 0.13.0.
    83  - On AWS, we now create network interfaces for the control-plane
    84    nodes explicitly, which allows for faster resource-creation time by
    85    allowing greater parallelization.
    86  - On AWS, we now ask the machine-API operator to use
    87    `aws-cloud-credentials` (created by [the credential
    88    operator][credential-operator]) to fulfill our Machine(Set)s.
    89  - On OpenStack, resources are prefixed with the cluster ID to avoid
    90    conflicts when running multiple clusters under the same tenant.
    91  - On OpenStack, machines are now configured with hostnames to allow
    92    inter-VM communication.
    93  - On OpenStack, machines are now configured with default DNS
    94    nameservers (1.1.1.1 and 208.67.222.222).
    95  - Several doc and internal cleanups.
    96  
    97  ### Fixed
    98  
    99  - On AWS, the credentials-checking logic now allows root credentials,
   100    although it logs a warning because this approach is not recommended.
   101  - On AWS, we only consider available zones when calculating defaults.
   102    This reduces the chance of errors from attempting resource creation
   103    in impaired or unavailable zones, although there's still a
   104    possibility for a zone going unavailable after our check but before
   105    resource creation.
   106  - On AWS, the bootstrap machine is now created in the first public
   107    subnet, restoring SSH and journald access, and fixing a bug from
   108    0.14.0.
   109  - On AWS, the Kubernetes API load balancers now use `/readyz` instead
   110    of `/healthz` for health checks, which allows for more graceful
   111    control-plane rotation.
   112  - On AWS, `destroy cluster` has some fixes for:
   113      - Removing snapshots associated with copied AMIs, fixing a bug
   114        from 0.14.0.
   115      - Deleting network interfaces, where we now remove all network
   116        interfaces in an owned VPC regardless of whether those network
   117        interfaces were themselves tagged as owned.
   118      - Instance termination, where we now attempt to terminate
   119        instances which are stopped, stopping, or shutting down in
   120        addition to those which are pending or running.
   121      - Instance profiles (which cannot be tagged directly) are now
   122        removed by name in a final deletion step, covering cases where
   123        they slipped through tag-based deletion because some external
   124        actor removed both the referencing instances and roles but left
   125        the instance profiles.
   126      - `InvalidGroup.NotFound` is now caught and considered a succesful
   127        deletion in more situations than with previous releases.
   128      - Error handling where subsequent successes no longer mask earlier
   129        errors.
   130      - Rate-limiting delete cycles, to reduce excessive AWS API usage
   131        (and associated throttling) while waiting for removed
   132        dependencies to resolve.
   133  - On OpenStack, Machine(Set)s now use the correct security group name.
   134  - On OpenStack, we now set `api` and `*.apps` DNS entries for internal
   135    IPs when a floating IP is not configured.
   136  - The `none` platform no longer creates Machine(Set)s, because there
   137    is, by definition, no machine-API support for that platform.
   138  
   139  ### Removed
   140  
   141  - The deprecated `cluster-config-v1` ConfigMap no longer contains the
   142    pull secret, now that all pull-secret consumers have been migrated
   143    to the `coreos-pull-secret` Secret.
   144  - On AWS, control-plane nodes no longer allow ingress on ports 12379
   145    or 12380 (which had, in the distant past, been used for etcd
   146    bootstrapping).
   147  
   148  ## 0.14.0 - 2019-03-05
   149  
   150  ### Changed
   151  
   152  - A new, long-lived, self-signed certificate authority has been added
   153    to sign kubelet certificate-signing requests.  This works around the
   154    current lack of certificate rotation in the machine-config operator.
   155  - Machine(Set) labels have been migrated from
   156    `sigs.k8s.io/cluster-api-...` to `machine.openshift.io`, continuing
   157    the transition begun in 0.13.0.
   158  - On AWS, control-plane nodes are now based on encrypted AMIs.  These
   159    AMIs are copied into the target account from unencrypted, public
   160    AMIs provided by Red Hat.  To support the copy and post-cluster
   161    cleanup, the installer requires the following additional AWS
   162    credentials: ec2:CopyImage, ec2:DeregisterImage, and
   163    ec2:DeleteSnapshot.  0.14.0 doesn't actually clean up the snapshots
   164    associated with the copied AMIs yet, but we have a fix for that
   165    landed for the next release.  In the meantime, you should manually
   166    prune your snapshots after destroying a cluster.
   167  - On AWS, the security-group simplification from 0.13.1 accidentially
   168    removed global SSH access to the bootstrap machine.  We've fixed
   169    that with this release.  Unfortunately, this release also moves the
   170    bootstrap machine into the same subnet as the first control-plane
   171    node, and since 0.13.0, control-plane nodes are in private subnets.
   172    So SSH access to the bootstrap machine from outside the cluster is
   173    still broken, but we've landed a fix to get it working again in the
   174    next release.  In the meantime, you can set up a SSH bastion or
   175    debug pod if you need SSH access to cluster machines.
   176  - On OpenStack, the Machine(Set)s have been updated to track provider
   177    changes.  For example, the `SecurityGroups` schema has changed, as
   178    has the schema for selecting subnets.
   179  - Several doc and internal cleanups.
   180  
   181  ### Fixed
   182  
   183  - On AWS, we now respect the availability zones configured in the
   184    control-plane Machine manifests, which are in turn fed by the
   185    install-config (previously control-plane nodes were always striped
   186    over zones regardless of the configuration).
   187  - On AWS, the credentials-checking logic now uses the standard logger
   188    instead of creating its own custom logger.
   189  
   190  ## 0.13.1 - 2019-02-28
   191  
   192  ### Changed
   193  
   194  - The aggregator and etcd-client certificate authorities are now
   195    self-signed authorities decoupled from the root certificate
   196    authority, continuing the transition begun in 0.13.0.
   197  - On AWS, Route 53 A records for the API load balancer no longer use
   198    health checks.
   199  - On AWS, the security group configuration has been simplified, with
   200    several stale rules being removed.
   201  
   202  ### Fixed
   203  
   204  - When rendering manifests before pushing them to the cluster, the
   205    bootstrap machine now correctly cleans up broken renders before
   206    re-rendering.
   207  - The bootstrap machine now uses an `etcdctl` referenced from the
   208    release image, instead of hard-coding its own version.
   209  
   210  ### Removed
   211  
   212  - The nominal install-config compatibility with `v1beta1` and
   213    `v1beta2` has been removed, so the installer will error out if
   214    provided with an older `install-config.yaml`.  `v1beta1` was
   215    deprecated in 0.12.0 and `v1beta2` was deprecated in 0.13.0.  In
   216    both cases, the installer would ignore removed properties but not
   217    error out.
   218  
   219  ## 0.13.0 - 2019-02-26
   220  
   221  ### Added
   222  
   223  - When cluster-creation times out waiting for cluster-version
   224    completion, the installer now logs the last failing-operator
   225    message (if any).
   226  - The installer now invokes the [cluster-config
   227    operator][cluster-config-operator] on the bootstrap machine to
   228    generate `config.openshift.io` custom resource definitions.
   229  
   230  ### Changed
   231  
   232  - The install-config version has been bumped from `v1beta2` to
   233    `v1beta3`.  All users will need to update any saved
   234    `install-config.yaml` to use the new schema.
   235  
   236      - `machines` has been split into `controlPlane` and `compute`.
   237        Multiple compute pools are now supported (previously, only a
   238        single `worker` pool was supported).  Every compute pool will
   239        use the same Ignition configuration.  The installer will warn
   240        about but allow configurations where there are zero compute
   241        replicas.
   242      - On libvirt, the `masterIPs` property has been removed, since you
   243        cannot configure master IPs via the libvirt machine API
   244        provider.
   245      - On OpenStack, there is also a new `lbFloatingIP` property, which
   246        allows you to provide an IP address to be used by the load
   247        balancer.  This allows you to create local DNS entries ahead of
   248        time before calling `create cluster`.
   249  
   250  - Cluster domain names have been adjusted so that the cluster lives
   251    entirely within a per-cluster subdomain.  This keeps split-horizon
   252    DNS from masking other clusters with the same base domain.
   253  - The cluster-version update URL has been changed from the dummy
   254    `http://localhost:8080/graph` to the functioning
   255    `https://api.openshift.com/api/upgrades_info/v1/graph` and the
   256    channel has been changed from `fast` to `stable-4.0`, to opt
   257    clusters in to 4.0 upgrades.
   258  - Machine-API resources have been moved from `cluster.k8s.io` to
   259    `machine.openshift.io` to clarify our divergence from the upstream
   260    types while they are unstable.  The `openshift-cluster-api`
   261    namespace has been replaced with `openshift-machine-api` as well.
   262  - The installer now uses etcd and OS images referenced by the update
   263    payload when configuring the machine-config operator.
   264  - The etcd, aggregator, and other certificate authorities are now
   265    self-signed, decoupling their chains of trust from the root
   266    certificate authority.
   267  - The installer no longer creates a service-serving certificate
   268    authority.  The certificate authority is now created by the
   269    [service-CA operator][service-ca-operator].
   270  - On AWS, the worker IAM role permissions were reduced to a smaller
   271    set required for kubelet initialization.
   272  - On AWS, the worker security group has been expanded to allow ports
   273    9000-9999 for for host network services.  This matches the approach
   274    we have been using for masters since 0.4.0.  The master security
   275    group has also been adjusted to fix a 9990 -> 9999 typo from 0.4.0.
   276  - On libvirt, the default compute nodes have been bumped from 2 to 4
   277    GiB of memory and the control-plane nodes have been bumped from 4 to
   278    6 GiB of memory and 2 to 4 vCPUs.
   279  - Several doc and internal cleanups and minor fixes.
   280  
   281  ### Fixed
   282  
   283  - The router certificate authority is appended to the admin
   284    `kubeconfig` to fix the OAuth flow behind `oc login`.
   285  - The `install-config.yaml` validation is now more robust, with the
   286    installer:
   287  
   288      - Validating cluster names (it previously only validated cluster
   289        names provided via the install-config wizard).
   290      - Validating `networking.clusterNetworks[].cidr` and explicitly
   291        checking for `nil` `machineCIDR` and `serviceCIDR`.
   292  
   293  - Terraform variables are now generated from master machine
   294    configurations instead of from the install configuration.  This
   295    allows them to reflect changes made by editing master machine
   296    configurations during [staged
   297    installs](docs/user/overview.md#multiple-invocations).
   298  - `metadata.json` is generated before the Terraform invocation, fixing
   299    a bug introduced in 0.12.0 which made it hard to clean up after
   300    failed Terraform creation.
   301  - The machine-config server has moved its Ignition-config
   302    service from port 49500 to 22623 to avoid the dynamic-port range
   303    starting at [49152][rfc-6335-s6].
   304  - When the installer prompts for AWS credentials, it now respects
   305    `AWS_PROFILE` and will update an existing credentials file instead
   306    of erroring out.
   307  - On AWS, the default [instance types][aws-instance-types] now depend
   308    on the selected region, with regions that do not support m4 types
   309    falling back to m5.
   310  - On AWS, the installer now verifies that the user-supplied
   311    credentials have sufficient permissions for creating a cluster.
   312    Previously, permissions issues would surface as Terraform errors or
   313    broken cluster functionality after a nominally successful install.
   314  - On AWS, the `destroy cluster` implementation is now more robust,
   315    fixing several bugs from 0.10.1:
   316  
   317      - The destroy code now checks for `nil` before dereferencing,
   318        avoiding panics when removing internet gateways which had not
   319        yet been associated with a VPC, and in other similar cases.
   320      - The destoy code now treats already-deleted instances as
   321        successfully deleted, instead of looping forever while trying to
   322        delete them.
   323      - The destroy code now treats a non-existant public DNS zone as
   324        success, instead of looping forever while trying to delete
   325        records from it.
   326  
   327  - On AWS and OpenStack, there is a new infra ID that is a uniqified,
   328    possibly-abbreviated form of the cluster name.  The infra ID is used
   329    to name and tag cluster resources, allowing for multiple clusters
   330    that share the same cluster name in a single account without naming
   331    conflicts (beyond DNS conflicts if both clusters also share the same
   332    base domain).
   333  - On OpenStack, the HAProxy configuration on the service VM now only
   334    balances ports 80 and 443 across compute nodes (it used to also
   335    balance them across control-plane nodes).
   336  - On OpenStack, the service VM now uses CoreDNS instead of dnsmasq.
   337    And it now includes records for `*.apps.{cluster-domain}` and the
   338    Kubernetes API.
   339  - On OpenStack, the service VM has been moved to its own subnet.
   340  
   341  ### Removed
   342  
   343  - On AWS, control-plane nodes have been moved to private subnets and
   344    no longer have public IPs.  Use a VPN or bastion host if you need
   345    SSH access to them.
   346  
   347  ## 0.12.0 - 2019-02-05
   348  
   349  ### Changed
   350  
   351  - We now wait for [`ClusterVersion`][ClusterVersion] to report all
   352    operators as available before returning from `create cluster`.
   353  - We now configure the network operator via
   354    `networks.config.openshift.io` and reserve
   355    `networkconfigs.networkoperator.openshift.io` for lower-level
   356    configuration (although we still generate it as well).
   357  - We now set `apiServerURL` and `etcdDiscoveryDomain` in
   358    `infrastructures.config.openshift.io`.
   359  - Release binaries are now stripped, which dramatically reduces their
   360    size.  Builds with `MODE=dev` remain unstripped if you want to
   361    attach a debugger.
   362  - On AWS, `destroy cluster` no longer depends directly on the cluster
   363    name (although it still depends on the cluster name indirectly via
   364    the `kubernetes.io/cluster/{name}` tag).  This makes it easier to
   365    reconstruct `metadata.json` for `destroy cluster` if you
   366    accidentally removed the file before destroying your cluster.
   367  - On AWS, the default worker MachineSets have been bumped to 120 GiB
   368    volumes to increase our baseline performance from on [gp2's sliding
   369    IOPS scale][aws-ebs-gp2-iops].  The new default worker volumes match
   370    our master bump from 0.5.0.
   371  - On OpenStack, the HAProxy configuration on the service VM is
   372    dynamically updated as masters and workers are added and removed.
   373    This supports console access, among other things.
   374  - Several doc and internal cleanups.
   375  
   376  ### Fixed
   377  
   378  - We no longer write distracting `ERROR: logging before flag.Parse...`
   379    messages from our underlying Kubernetes libraries.
   380  - On loading `install-config.yaml`, we now error on CIDRs whose IP is
   381    not at the beginning of the masked subnet.  For example, we now
   382    error for `192.168.126.10/24`, since the beginning of that subnet is
   383    `192.168.126.0`.
   384  - On loading `install-config.yaml`, we now fill in defaults for
   385    `replicas` when it is unset or explicitly `null`.
   386  - We have fixed some issues with round-tripping assets between the
   387    installer and the asset directory which lead to the reloaded assets
   388    being falsely identified as dirty and rebuilt.
   389  - On OpenStack, a new security rule exposes port 443 to allow
   390    OpenShift web-console access.
   391  - On OpenStack, credentials secret generation now respects the install
   392    configuration's `cloud` value, and the secret name has been updated
   393    from `openstack-creds` to `openstack-credentials`.
   394  - On OpenStack, the `local-dns` service will now restart on failure
   395    (e.g. when the initial image pull fails) and it no longer sets the
   396    name of the container (so we can always re-run it without running
   397    into duplicate name issues).
   398  
   399  ### Removed
   400  
   401  - On loading `install-config.yaml`, the installer no longer restricts
   402    `networking.type` to a known value.  If the network operator sees an
   403    unrecognized type, it assumes the user is configurating networking
   404    and doesn't react.
   405  - We no longer seed `~core/.bash_history` on the bootstrap node, as
   406    part of becoming less opinionated about which users are present on
   407    the underlying operating system.
   408  - On AWS, the `iamRoleName` machine-pool property is gone, and the
   409    `podCIDR` networking property (deprecated in 0.4.0) is gone.  The
   410    install-config version has been bumped from `v1beta1` to `v1beta2`.
   411    All users, regardless of platform, will need to update any saved
   412    `install-config.yaml` to use the new version.  IAM roles are being
   413    replaced by [the credential operator][credential-operator], and
   414    while we still create IAM roles for our master, worker, and
   415    bootstrap machines, we're removing the user-facing property now to
   416    avoid making this breaking change later.
   417  - On AWS, the bootstrap machine security group allowing kubelet access
   418    (added in 0.10.1) has been removed.  Static pod logs should soon be
   419    available from journald (although they aren't yet).
   420  
   421  ## 0.11.0 - 2019-01-27
   422  
   423  ### Added
   424  
   425  - On AWS, the installer creates [DHCP options][aws-dhcp-options] for
   426    the VPC to support internal unqualified-hostname resolution.  This
   427    works around some limitations with `oc rsh` and Kubernetes node
   428    registration in the face of inappropriate default DHCP options.  And
   429    because [the AWS `domain-name` logic is
   430    region-specific][aws-dhcp-options], there is no single DHCP options
   431    configuration that provides internal unqualified-hostname resolution
   432    for multiple regions.
   433  
   434  ### Changed
   435  
   436  - On AWS, the installer now prompts for missing credentials even if
   437    you supplied an `install-config.yaml`.  Previously, only the
   438    install-config wizard would prompt.
   439  - On OpenStack, the developer-only internal DNS server which was
   440    removed in 0.10.0 has been restored, because the approach taken in
   441    0.10.0 broke etcd cluster formation for some users.
   442  - Several doc and internal cleanups.
   443  
   444  ### Fixed
   445  
   446  - `openshift-install` has improved error handling for various invalid
   447    command lines.  It now errors when additional positional arguments
   448    are passed to commands that do not take positional arguments
   449    (previously those commands silently ignored the presence of
   450    positional arguments).  And it logs an error and exits 1 when an
   451    invalid value is provided to --log-level (previously it exited 1 but
   452    did not write to the standard error stream).
   453  - The slow-input issues for the install-config wizard have been fixed.
   454  - On AWS, `destroy cluster` fixed a bug in the 0.10.1 refactor which
   455    could lead to leaked resources and a claim of successful deletion if
   456    a call to get tagged resources failed (for example, because the
   457    caller lacked the `tag:GetResources` permission).
   458  - On AWS, a new explicit dependency in the Terraform modules prevents
   459    errors like:
   460  
   461          * module.vpc.aws_lb.api_external: 1 error occurred:
   462          * aws_lb.api_external: Error creating Application Load Balancer: InvalidSubnet: VPC vpc-0765c67bbc82a1b7d has no internet gateway
   463          status code: 400, request id: 5a...d5
   464  
   465  - On libvirt, the installer no longer holds the OS image in memory
   466    after it has been written to disk.  Ideally it would stream the OS
   467    image to disk instead of ever holding it in memory, but this fix
   468    mitigates our current in-memory buffering.
   469  
   470  ## 0.10.1 - 2019-01-22
   471  
   472  ### Changed
   473  
   474  - `create ignition-configs` now also writes `metadata.json` to the
   475    asset directory, which allows [Hive][] to more reliably destroy
   476    clusters.
   477  - `destroy cluster` now removes `.openshift_install_state.json` on
   478    success, clearing the way for future `create cluster` runs in the
   479    same asset directory.
   480  - On AWS, we now default to m4.xlarge masters.  The increased CPU
   481    reduces etcd latencies, which in turn helps with cluster stability.
   482  - On AWS, the bootstrap machine has a new security-group allowing
   483    journald-gateway and kubelet access, for easier debugging when
   484    bootstrapping fails.
   485  - Several doc and internal cleanups.
   486  
   487  ### Removed
   488  
   489  - The SSH public key is no longer inserted in the pointer Ignition
   490    configurations, now that authorized public keys are [managed by the
   491    machine-config daemon][machine-config-daemon-ssh-keys].
   492  
   493  ### Fixed
   494  
   495  - On AWS, the cluster-API provider now supports configuring machine
   496    volumes, so `rootVolume` settings in `install-config.yaml` will be
   497    respected.
   498  - On AWS, the generated Terraform variables no longer clobber master
   499    instance type and root volume configuration set via
   500    `install-config.yaml`.  You can now use:
   501  
   502      ```yaml
   503      machines:
   504      - name: master
   505        platform:
   506          aws:
   507            type: m5.large
   508            rootVolume:
   509              iops: 3000
   510              size: 220
   511              type: io1
   512        replicas: 3
   513      - name: worker
   514        ...
   515      ```
   516  
   517      and similar to successfully customize your master machines.
   518  - On AWS, `destroy cluster` has been adjusted to use more efficient
   519    tag-based lookup and fix several bugs due to previously-missing
   520    pagination.  This should address some issues we had been seeing with
   521    leaking AWS resources despite `destroy cluster` claiming success.
   522  
   523  ## 0.10.0 - 2019-01-15
   524  
   525  ### Added
   526  
   527  - The installer pushes an Infrastructure object to
   528    infrastructures.config.openshift.io with platform information.
   529    Cluster components should use this instead of the deprecated
   530    `cluster-config-v1` resource.
   531  - `openshift-install` has a new `completion` subcommand, to generation
   532    shell-completion code (currently only for Bash).
   533  - On AWS, `destroy cluster` now also removed IAM users with the usual
   534    tags.  We don't create these users yet, but the removal sets the
   535    stage for the coming [credential operator][credential-operator].
   536  
   537  ### Changed
   538  
   539  - Install configuration now includes a new `apiVersion` property which
   540    must be set to `v1beta1`.  Future changes to the install-config
   541    schema will result in new versions, allowing new installers to
   542    continue to support older install-config schema (and older
   543    installers to error out when presented with newer install-config
   544    schema).  Changes to the schema since 0.9.0:
   545  
   546      - `clusterID` has been removed.  This should be a new UUID for
   547        every cluster, so there is no longer an easy way for users to
   548        configure it.
   549      - Image configuration has been removed.  Almost all users should
   550        be fine with the installer-chosen RHCOS.  Users who need to
   551        override the RHCOS build (because they're testing new RHCOS
   552        releases) can set a new `OPENSHIFT_INSTALL_OS_IMAGE_OVERRIDE`
   553        environment variable.
   554      - Per-platform network properties have been consolidated into the
   555        platform-agnostic `machineCIDR` from which node IP addresses are
   556        assigned.
   557      - On libvirt, all machine-pool configuration has been removed, as
   558        no remaining properties were supported by the libvirt
   559        cluster-API provider.
   560  
   561  - `install-config.yaml` read during [staged
   562    installs](docs/user/overview.md#multiple-invocations) will now have
   563    installer-defaults applied for missing properties.  This allows you
   564    to set only the properties you are interested in overriding, and
   565    allow the installer to manage the remaining properties.
   566  - `create ignition-configs` now also writes the admin kubeconfig to
   567    the asset directory, to support bring-your-own-infrastructure use
   568    cases.
   569  - The bootstrap node now [serves
   570    journals](docs/user/troubleshooting.md#troubleshooting-the-bootstrap-node)
   571    for easier troubleshooting.
   572  - The validity for the initial kubelet TLS certificate has been
   573    increased from one hour to 24 hours, to give
   574    bring-your-own-infrastructure users longer to manually distribute
   575    the certificate before it expires.
   576  - The key for the root certificate authority is no longer pushed into
   577    the cluster (not even to the bootstrap node).
   578  - Machine(set)s generated by the installer now use `providerSpec`
   579    instead of the deprecated `providerConfig`.
   580  - On AWS, the load balancers now use HTTPS health checks to reduce log
   581    noise like:
   582  
   583          http: TLS handshake error from 10.0.20.86:28372: EOF
   584  
   585  - On AWS, IAM roles are now tagged with the usual resource tags
   586    (`openshiftClusterID`, etc.).  Some other resources have had their
   587    tags updated to match those conventions (e.g. the internal Route 53
   588    hosted zone was updated from `KubernetesCluster` to
   589    `kubernetes.io/cluster/{name}: owned`).
   590  - The OpenStack platform has been removed from the install-config
   591    wizard while it remains experimental.  It is still available for
   592    users who supply their own `install-config.yaml`.
   593  - On OpenStack, the service VP now respects any SSH key specified in
   594    the install configuration.
   595  - On OpenStack, a developer-only internal DNS server has been removed,
   596    so users need to configure additional records for the existing
   597    external DNS zone.
   598  - On OpenStack, Neutron trunk ports are now used for VM network
   599    interfaces if Neutron supports them to support future Kuryr
   600    integration.
   601  - On OpenStack, masters and workers have been consolidated in a single
   602    subnet to simplify the deployment.
   603  - On OpenStack, the Ignition security group now only allows internal
   604    connections, and no longer allows connections from outside the
   605    cluster network.
   606  - On OpenStack, the machine(set) templates have been updated to set
   607    `cloudName` and some other properties.
   608  - On libvirt, `destroy cluster` is now more robust in the face of
   609    domains which were already shutdown.
   610  - Lots of doc and internal cleanup and minor fixes.
   611  
   612  ### Removed
   613  
   614  - Support for `install-config.yml` (deprecated in 0.8.0) has been
   615    removed.
   616  
   617  ### Fixed
   618  
   619  - On AWS, domain pagination for the wizard's base-domain select widget
   620    has been fixed.  Previously, it would continuously fetch the first
   621    page of hosted zones (for accounts with multiple pages of zones)
   622    until it hit an error like:
   623  
   624      ```
   625      ERROR list hosted zones: Throttling: Rate exceeded
   626              status code: 400, request id: ...
   627      ```
   628  
   629      before falling back to a free-form base-domain input.
   630  
   631  ## 0.9.0 - 2019-01-05
   632  
   633  ### Added
   634  
   635  - There is a new `none` platform for bring-your-own infrastructure
   636    users who want to generate Ignition configurations.  The new
   637    platform is mostly undocumented; users will usually interact with it
   638    via [OpenShift Ansible][openshift-ansible].
   639  
   640  ### Changed
   641  
   642  - On OpenStack, there's no longer a default flavor, because flavor
   643    names are not standardized.  Instead, there's a new prompt to choose
   644    among flavors supported by the target OpenStack implementation.
   645  - On libvirt, we now use the host-passthrough CPU type, which should
   646    improve performance for some use-cases.
   647  - Some doc and internal cleanup and minor fixes.
   648  
   649  ## 0.8.0 - 2018-12-23
   650  
   651  ### Added
   652  
   653  - The installer binary now includes all required Terraform plugins, so
   654    there is no longer a need to separately download and install them.
   655    This will be most noticeable on libvirt, where users used to be
   656    required to install the libvirt plugin manually.  This avoids issues
   657    with mismatched plugin versions (which we saw sometimes on libvirt)
   658    and network-connectivity issues during `create cluster` invocations
   659    (which we saw sometimes on all platforms).
   660  - The configured base domain is now pushed into the cluster's
   661    `config.openshift.io` as a DNS custom resource.
   662  
   663  ### Changed
   664  
   665  - `install-config.yml` is now `install-config.yaml` to align with our
   666    usual YAML extension.  `install-config.yml` is deprecated, and
   667    support for it will be removed completely in the next release.
   668  - On AWS, we now use a select widget for the base-domain wizard
   669    prompt, making it easier to choose an existing public zone.
   670  - On AWS, Route 53 rate limits during `cluster destroy` are now less
   671    disruptive, reducing the AWS request load in busy accounts.
   672  - On OpenStack, the HAProxy configuration no longer hard-codes the
   673    cluster name and base domain.
   674  - On OpenStack, the 0.7.0 fix for:
   675  
   676          FATAL Expected HTTP response code [202 204] when accessing [DELETE https://osp-xxxxx:13696/v2.0/routers/52093478-dcf1-4bcc-9a2c-dbb1e42da880], but got 409 instead
   677          {"NeutronError": {"message": "Router 52093478-dcf1-4bcc-9a2c-dbb1e42da880 still has ports", "type": "RouterInUse", "detail": ""}}
   678  
   679      was incorrect and has been reverted.  We'll land a real fix for
   680      this issue in future work.
   681  - On OpenStack, the service VM from 0.7.0 now has a floating IP
   682    address.
   683  - All libvirt functionality is behind `TAGS=libvirt` now.  Previously
   684    installer builds with `TAGS=libvirt_destroy` included all libvirt
   685    functionality, while builds without that tag would include `create
   686    cluster` but not `destroy cluster` functionality.  With the change,
   687    all users using the installer with libvirt clusters will need to set
   688    the new build tag.
   689  - Lots of doc and internal cleanup and minor fixes.
   690  
   691  ### Removed
   692  
   693  - On AWS and OpenStack, the `tectonicClusterID` tag which was
   694    deprecated in 0.7.0 has been removed.
   695  
   696  ## 0.7.0 - 2018-12-14
   697  
   698  ### Added
   699  
   700  - We now validate install-config when loading it during [staged
   701    installs](docs/user/overview.md#multiple-invocations).  Previously
   702    we only validated that input when it was entered into the wizard or
   703    via environment variables.  This also leads to some changes in which
   704    values are considered valid:
   705  
   706      - Base domains may no longer contain uppercase letters.
   707      - Cluster names may now be longer than 63 characters, although as
   708        specified in [RFC 1123][rfc-1123-s2.1] host software may not
   709        support names longer than 63 characters.
   710      - Pull secrets require more content (e.g. it must contain an
   711        `auths` property).  Previously we only required pull secrets to
   712        be valid JSON.
   713      - SSH public keys must be parsable with
   714        [`ParseAuthorizedKey`][ssh.ParseAuthorizedKey].  Previously we
   715        had our own logic that was not as well developed.
   716  
   717  - We've added `images/installer/Dockerfile.ci.rhel7` for building
   718    installer images on a RHEL base.
   719  - On AWS, we now create [an S3 endpoint][aws-s3-endpoint] for the VPC.
   720  - We've added OpenStack documentation.
   721  
   722  ### Changed
   723  
   724  - The pull-secret prompt now masks the input to avoid leaking it to
   725    shoulder surfers and similar.
   726  - The pull-secret prompt's help now points to
   727    [cloud.openshift.com](https://cloud.openshift.com/clusters/install#pull-secret)
   728    instead of [try.openshift.com](https://try.openshift.com).  This
   729    should make it easier to find the pull secret without digging
   730    through a page of introductory content.
   731  - The initial kubeconfig inserted on master nodes used to have `admin`
   732    privileges, but only for 30 minutes.  Now it has role bindings that
   733    allow it to create and receive automatic approval for certificate
   734    signing requests, but it does not have additional privileges beyond
   735    that.
   736  - On AWS and OpenStack, master ports 10251 (scheduler) and 10252
   737    (controller manager) have been opened to access from all machines.
   738    This allows Prometheus (which runs on the worker nodes) to scrape
   739    all machines for metrics.
   740  - On AWS and OpenStack, the installer and subsequent cluster will now
   741    tag resources it creates with `openshiftClusterID`.
   742    `tectonicClusterID` is deprecated.
   743  - On OpenStack, only the OpenStack `clouds` entry is marshalled into
   744    the `openstack-creds` secret.  Previously we had injected the host's
   745    entire cloud configuration.
   746  - On OpenStack, there is now a service VM to provide DNS and load
   747    balancing for the OpenShift cluster.  The service VM will eventually
   748    be removed, but for now its a convenient hack to get usable clusters
   749    on OpenStack.
   750  - On libvirt, we now document host DNS configuration as required,
   751    because too many users were skipping that step and then reporting
   752    errors with Kubernetes API detection when the install-host failed to
   753    resolve the cluster domain name while waiting for the
   754    `bootstrap-complete` event.
   755  - Lots of doc and internal cleanup and minor fixes.
   756  
   757  ### Fixed
   758  
   759  - Fixed OpenShift manifest loading during [staged
   760    installs](docs/user/overview.md#multiple-invocations).  The
   761    installer had been ignoring changes to those files since 0.4.0.
   762  - Fixed `you must pass a pointer as the target of a Write operation`
   763    errors introduced in 0.6.0 for the AWS access key ID prompt.
   764  - When `create cluster` times out waiting for the Kubernetes API, we
   765    now exit immediately.  Previously we'd wait through another 30
   766    minutes of failed event-listener connections before failing this
   767    case.  We've also fixed similar timeout detection for the code that
   768    waits for the OpenShift console route.
   769  - On OpenStack, we've fixed a bug in router deletion:
   770  
   771          FATAL Expected HTTP response code [202 204] when accessing [DELETE https://osp-xxxxx:13696/v2.0/routers/52093478-dcf1-4bcc-9a2c-dbb1e42da880], but got 409 instead
   772          {"NeutronError": {"message": "Router 52093478-dcf1-4bcc-9a2c-dbb1e42da880 still has ports", "type": "RouterInUse", "detail": ""}}
   773  
   774  - On libvirt, we've fixed a bug introduced in 0.6.0 and are now back
   775    to removing the bootstrap node from round-robin DNS when we destroy
   776    the bootstrap resources.
   777  
   778  ### Removed
   779  
   780  - The user-facing `OPENSHIFT_INSTALL_*` environment variables are
   781    gone.  Instead, users who want to skip the wizard are encouraged to
   782    [provide their own
   783    install-config](docs/user/overview.md#multiple-invocations).
   784  - On AWS, the option to install a cluster into an existing VPC is
   785    gone.  Users who would have previously done this can use [VPC
   786    peering][aws-vpc-peering].
   787  
   788  ## 0.6.0 - 2018-12-09
   789  
   790  ### Added
   791  
   792  - We now push a `kubeadmin` user (with an internally-generated
   793    password) into the cluster for the new [bootstrap identity
   794    provider][bootstrap-identity-provider].  This gives users a way to
   795    access the web console, Prometheus, etc. without needing to
   796    configure a full-fledged identity provider or install `oc`.  The
   797    `create cluster` subcommand now blocks until the web-console route
   798    is available and then exits after printing instructions for using
   799    the new credentials.
   800  - The installer binary now includes Terraform so there is no longer a
   801    need to separately download and install it.
   802  
   803  ### Changed
   804  
   805  - The SSH public key configuration has moved a level up in the install
   806    config, now that the `admin` structure has been removed.
   807  - `build.sh` now checks to make sure you have a new enough `go`,
   808    instead of erroring out partway through the build.
   809  - We now resolve the update payload to a digest on the bootstrap node,
   810    so [the cluster-version-operator][cluster-version-operator] can
   811    figure out exactly which image we used.
   812  - Creation logging has been overhauled to increase it's
   813    signal-to-noise while waiting for the Kubernetes API to come up.
   814  - On AWS, the installer will now prompt you for an access key and
   815    secret if it cannot find your AWS credentials in the usual places.
   816  - On AWS, the installer will look at `AWS_DEFAULT_REGION` and in other
   817    usual places when picking a default for the region prompt.  You
   818    still have to set `OPENSHIFT_INSTALL_AWS_REGION` if you want to skip
   819    the prompt entirely.
   820  - On libvirt, we've bumped masters from 3 GiB of memory to 4 GiB to
   821    address out-of-memory issues we had been seeing at 3 GiB.
   822  - Lots of doc and internal cleanup and minor fixes.
   823  
   824  ### Removed
   825  
   826  - The old admin username and password inputs have been removed.  They
   827    weren't being used anyway, and their intended role has been replaced
   828    by the newly-added `kubeadmin` user and bootstrap identity provider.
   829  - The old `openshift-web-console` namespace is gone.  The new console
   830    is in the `openshift-console` namespace.
   831  
   832  ## 0.5.0 - 2018-12-03
   833  
   834  ### Added
   835  
   836  - We now push the ingress custom resource definition and initial
   837    configuration, allowing the ingress operator to configure itself
   838    without referencing the deprecated `cluster-config-v1` resource.
   839  
   840  ### Changed
   841  
   842  - Pull secret documentation now points to
   843    [try.openshift.com](https://try.openshift.com) for pull-secret
   844    acquisition, instead of pointing at `account.coreos.com`.  Users
   845    will need to update their pull secrets.
   846  - If the automatic bootstrap teardown (which landed in 0.4.0) times
   847    out waiting for the `bootstrap-complete` event, the installer exits
   848    with a non-zero exit code.  We had ignored watcher timeouts in 0.4.0
   849    due to concerns about watcher robustness, but the current watcher
   850    code has been reliable in our continuous integration testing.
   851  - The hard-coded `quay.io/coreos/bootkube` dependency has been
   852    replaced by the new [cluster-bootstrap][] image, which is referenced
   853    from the release image.
   854  - The etcd service now uses [selectors][kube-selector] to determine
   855    the pods it exposes, and the explict etcd endpoints object is gone
   856    (replaced by the one Kubernetes maintains based on the selector).
   857  - On AWS, both masters and worker have moved from t2.medium nodes
   858    m4.large nodes (more on AWS instance types
   859    [here][aws-instance-types]) to address CPU and memory constraints.
   860  - On AWS, master volume size has been bumped from 30 GiB to 120 GiB to
   861    increase our baseline performance from on [gp2's sliding IOPS
   862    scale][aws-ebs-gp2-iops] from the 100 IOPS floor up to 360 IOPS.
   863    Volume information is not currently supported by [the cluster-API
   864    AWS provider's
   865    `AWSMachineProviderConfig`][cluster-api-provider-aws-012575c1-AWSMachineProviderConfig],
   866    so this change is currently limited to masters created by the
   867    installer.
   868  - On Openstack, we now validate cloud, region, and image-name user
   869    input instead of blindly accepting entries.
   870  - On libvirt, we pass Ignition information for masters and workers via
   871    secrets instead of passing a libvirt volume path.  This makes the
   872    libvirt approach consistent with how we already handle AWS and
   873    OpenStack.
   874  - Lots of internal cleanup, especially around trimming dead code.
   875  
   876  ### Fixed
   877  
   878  - The `.openshift_install.log` addition from 0.4.0 removed Terraform
   879    output from `--log-level=debug`.  We've fixed that in 0.5.0; now
   880    `.openshift_install.log` will always contain the full Terraform
   881    output, while standard error returns to containing the Terraform
   882    output if and only if `--log-level=debug` or higher.
   883  - On AWS teardown, errors retrieving tags for S3 buckets and Route 53
   884    zones are no longer fatal.  This allows the teardown code to
   885    continue it's exponential backoff and try to remove the bucket or
   886    zone later.  It avoids some resource leaks we were seeing due to AWS
   887    rate limiting on those tag lookups as many simultaneous CI jobs
   888    searched for Route 53 zones with their cluster's tags.  We'll still
   889    hit those rate limits, but they no longer cause us to give up on
   890    reaping resources.
   891  - On AWS, we've removed some unused data blocks, fixing occasional
   892    errors like:
   893  
   894          data.aws_route_table.worker.1: Your query returned no results.
   895  
   896  - On OpenStack, similar retry-during-teardown changes were made for
   897    removing ports and for removing subnets from routers.
   898  - On libvirt, Terraform no longer errors out when launching clusters
   899    configured for more than one master, fixing a bug from 0.4.0.
   900  
   901  ## 0.4.0 - 2018-11-22
   902  
   903  ### Added
   904  
   905  - The creation targets have been moved below a new `create` subcommand
   906    (e.g. `openshift-install create cluster` instead of the old
   907    `openshift-install cluster`).  This makes them easier to distinguish
   908    from other `openshift-install` subcommands and also mirrors the
   909    approach taken by `destroy` in 0.3.0.
   910  - A new `manifest-templates` target has been added to `create`,
   911    allowing users to edit templates and have descendant assets
   912    generated from their altered templates during [a staged
   913    install](docs/user/overview.md#multiple-invocations).
   914  - [The ingress operator][ingress-operator] is no longer masked.  The
   915    old Tectonic ingress operator has been removed.
   916  - The [the registry operator][registry-operator] has been added, and
   917    the kube-addon operator which used to provide a registry (among
   918    other things) has been removed.
   919  - The [checkpointer operator][checkpointer-operator] is no longer
   920    masked.  It runs on the production cluster, but not on the bootstrap
   921    node.
   922  - Cloud credentials are now pushed into a secret where they can be
   923    consumed by cluster-API operators and other tools.
   924  - OpenStack now has `destroy` support.
   925  - We log verbosely to `${INSTALL_DIR}/.openshift_install.log` for most
   926    operations, giving access to the logs for troubleshooting even if
   927    you neglected to run with `--log-level=debug`.
   928  - We've grown [troubleshooting
   929    documentation](docs/user/troubleshooting.md).
   930  
   931  ### Changed
   932  
   933  - The `create cluster` subcommand now waits for the
   934    `bootstrap-complete` event and automatically removes the bootstrap
   935    assets after receiving it.  This means that after `create cluster`
   936    returns successfully, the cluster has its production control plane
   937    and topology (although there may still be operators working through
   938    their initialization).  The `bootstrap-complete` event was new in
   939    0.3.0, and it is now pushed at the appropriate time (it was too
   940    early in 0.3.0).  The `destroy bootstrap` subcommand is still
   941    available, to allow users to manually trigger bootstrap deletion if
   942    the automatic removal fails for whatever reason.
   943  - On AWS, bootstrap deletion now also removes the S3 bucket used for
   944    the bootstrap node's Ignition configuration.
   945  - Asset state is preserved even while moving backwards through [a
   946    staged install](docs/user/overview.md#multiple-invocations).  For
   947    example:
   948  
   949      ```sh
   950      openshift-install --dir=example create ignition-configs
   951      openshift-install --dir=example create install-config
   952      ```
   953  
   954      now preserves the full state including the generated Ignition
   955      configuration.  In 0.3.0, the `install-config` call would have
   956      removed the Ignition configuration and other downstream assets
   957      from the stored state.
   958  - Some asset state is removed by successful `destroy cluster` runs.
   959    This reduces the change of contaminating future cluster creation
   960    with assets left over from a previous cluster, but users are [still
   961    encouraged](README.md#cleanup) to remove state between clusters to
   962    avoid accidentally contaminating the subsequent cluster's state.
   963  - etcd discovery now happens via `SRV` records.  On libvirt, this
   964    requires a new Terraform provider, so users with older providers
   965    should [install a newer
   966    version](docs/dev/libvirt/README.md#install-the-terraform-provider).
   967    This also allows all masters to use a single Ignition file.
   968  - On AWS, the API and service load balancers have been changed from
   969    [classic load balancers][aws-elb] to [network load
   970    balancers][aws-nlb].  This should avoid [some latency issues we were
   971    seeing with classic load balancers][aws-elb-latency], and network
   972    load balancers are cheaper.
   973  - On AWS, master `Machine` entries now include load balancer
   974    references, ensuring that new masters created by [the AWS
   975    cluster-API provider][cluster-api-provider-aws] will be attached to
   976    the load balancers.
   977  - On AWS and OpenStack, the default network CIDRs have changed to
   978    `172.30.0.0/16` for services and `10.128.0.0/14` for the cluster, to
   979    be consistent with previous versions of OpenStack.
   980  - The bootstrap kubelet is no longer part of the production cluster.
   981    This reduces complexity and keeps production pods off of the
   982    temporary bootstrap node.
   983  - [The cluster-version operator][cluster-version-operator] now runs in
   984    a static pod on the bootstrap node until the production control
   985    plane comes up.  This breaks a cyclic dependency between the
   986    production API server and operators.
   987  - The bootstrap control plane now waits for some core pods to come up
   988    before exiting.
   989  - [The machine-API operator][machine-api-operator] now reads the
   990    install-config from the `cluster-config-v1` config-map, instead of
   991    from an operator-specific configuration.
   992  - AWS AMIs and libvirt images are now pulled from the new [RHCOS
   993    pipeline][rhcos-pipeline].
   994  - Updated the security contact information for CoreOS -> Red Hat.
   995  - We push a `ClusterVersion` custom resource.  The old `CVOConfig` is
   996    still being pushed, but it is deprecated.
   997  - OpenStack credentials are loaded from standard system paths.
   998  - On AWS and OpenStack, ports 9000-9999 are now open for host network
   999    services.
  1000  - Lots of doc and internal cleanup and minor fixes.
  1001  
  1002  ### Fixed
  1003  
  1004  - On AWS, `destroy cluster` is now more robust, removing resources with
  1005    either the `tectonicClusterID` or `kubernetes.io/cluster/<name>:
  1006    owned` tags.  It also removes pending instances as well (it used to
  1007    only remove running instances).
  1008  - On libvirt, `destroy cluster` is now more precise, only removing
  1009    resources which are prefixed by the cluster name.
  1010  - Bootstrap Ignition edits (via `create ignition-configs`) no longer
  1011    suffer from a `worker.ign` dependency cycle, which had been
  1012    clobbering manual `bootstrap.ign` changes.
  1013  - The state-purging implementation respects `--dir`, avoiding `remove
  1014    ...: no such file or directory` errors during [staged
  1015    installs](docs/user/overview.md#multiple-invocations).
  1016  - Cross-filesystem Terraform state recovery during `destroy bootstrap`
  1017    no longer raises `invalid cross-device link`.
  1018  - Bootstrap binaries are now located under `/usr/local/bin`, avoiding
  1019    SELinux violations on RHEL 8.
  1020  
  1021  ### Removed
  1022  
  1023  - All the old Tectonic operators and the `tectonic-system` namespace
  1024    have been removed.
  1025  - On libvirt, the image URI prompt has been removed.  You can still
  1026    control this via the `OPENSHIFT_INSTALL_LIBVIRT_IMAGE` environment
  1027    variable, but too many users were breaking their cluster by pointing
  1028    the installer at an outdated RHCOS, so we removed the prompt to make
  1029    that knob less obvious.
  1030  - On libvirt, we've removed `.gz` suffix handling for images.  The new
  1031    RHCOS pipeline supports `Content-Encoding: gzip`, so the
  1032    suffix-based hack is no longer necessary.
  1033  - The `destroy-cluster` command, which was deprecated in favor of
  1034    `destroy cluster` in 0.3.0, has been removed.
  1035  - The creation target subcommands of `openshift-install` have been
  1036    removed.  Use the target subcommands of `create` instead
  1037    (e.g. `openshift-install create cluster` instead of
  1038    `openshift-install cluster`).
  1039  
  1040  ## 0.3.0 - 2018-10-22
  1041  
  1042  ### Added
  1043  
  1044  - Asset state is loaded from the install directory, allowing for a [staged
  1045    install](docs/user/overview.md#multiple-invocations).
  1046  - A new `openshift-install destroy bootstrap` command destroys the
  1047    bootstrap resources.  Ideally, this would be safe to run after the
  1048    new `bootstrap-complete` event is pushed to the `kube-system`
  1049    namespace, but there is currently a bug causing that event to be
  1050    pushed too early.  For now, you're on your own figuring out when to
  1051    call this command.
  1052  
  1053      For consistency, the old `destroy-cluster` has been deprecated in
  1054      favor of `openshift-install destroy cluster`.
  1055  
  1056  - The installer creates worker `MachineSet`s, instead of leaving that to
  1057    [the machine-API operator][machine-api-operator].
  1058  - The installer creates master `Machine`s and tags masters to be
  1059    picked up by the [AWS cluster-API
  1060    provider][cluster-api-provider-aws].
  1061  
  1062  ### Changed
  1063  
  1064  - The installer now respects the `AWS_PROFILE` environment variable
  1065    when launching AWS clusters.
  1066  - Worker subnets are now created in the appropriate availability zone
  1067    for AWS clusters.
  1068  - Use the released hyperkube and hypershift instead of hard-coded
  1069    images.
  1070  - Lots of changes to keep up with the advancing release image, as
  1071    OpenShift operators are added to control various cluster components.
  1072  - Lots of internal cleanup and minor fixes.
  1073  
  1074  ### Removed
  1075  
  1076  - The Tectonic kube-core operator, which has been replaced by
  1077    OpenShift operators.
  1078  
  1079  ## 0.2.0 - 2018-10-12
  1080  
  1081  ### Added
  1082  
  1083  - Asset state is preserved between invocations, allowing for a staged
  1084      install like:
  1085  
  1086      ```console
  1087      $ openshift-install --dir=example install-config
  1088      $ openshift-install --dir=example cluster
  1089      ```
  1090  
  1091      which creates a cluster using the same data given in the
  1092      install-config (including the same random cluster ID, etc.).
  1093  - [The kube-apiserver][kube-apiserver-operator] and
  1094    [kube-controller-manager][kube-controller-manager-operator]
  1095    operators are called to render additional cluster manifests.
  1096  - etcd is now available as a service in the `kube-system` namespace,
  1097    and the new service is labeled so [Prometheus][] will scrape it.
  1098  - The `service-serving-cert-signer-signing-key` secret is now
  1099    available in the `openshift-service-cert-signer` namespace, which
  1100    gives [the service-serving cert signer][service-serving-cert-signer]
  1101    the keys it needs to mint and manage certificates for Kubernetes
  1102    services.
  1103  - The etcd-serving certificate is now passed through to [the
  1104    kube-controller-manager operator][kube-controller-manager-operator].
  1105  - We disable some components which [the cluster-version
  1106    operator][cluster-version-operator] would otherwise install but
  1107    which conflict with the legacy tectonic-operators.
  1108  - The new `openshift-install graph` outputs the asset graph in [the
  1109    DOT language][dot].
  1110  - `openshift-install version` now outputs the Terraform version as
  1111    well as the installer version.
  1112  
  1113  ### Changed
  1114  
  1115  - The [cluster-version operator][cluster-version-operator] is no
  1116    longer run as a static pod.  Instead, we just wait until the control
  1117    plane comes up and run it them.
  1118  - Terraform errors are logged to standard error even when
  1119    `--log-level` is less than `debug`.
  1120  - Terraform is now invoked with `-no-color` and `-input=false`.
  1121  - The `cluster` target now includes both launching the cluster and
  1122    populating `metadata.json`, regardless of whether the `terraform`
  1123    invocation succeeds.  This allows `destroy-cluster` to cleanup
  1124    cluster resources even when the `terraform` invocation fails.
  1125  - Reported errors now include more context, making them less
  1126    enigmatic.
  1127  - Libvirt image caching is more efficient, caching unzipped images
  1128    with a cache that grows by one unzipped image per RHCOS release in
  1129    `$XDG_CACHE_HOME/openshift-install/libvirt/image`.  The previous
  1130    implementation unzipped, when necessary, for every launched cluster,
  1131    which was slow.  And the previous implementation added one unzipped
  1132    image to `/tmp` per cluster launch, which consumed more disk space.
  1133  - Work continues on the OpenStack platform.
  1134  - Lots of internal cleanup, especially around asset generation.
  1135  
  1136  ### Removed
  1137  
  1138  - The operatorstatus CRD.  Now [the cluster-version
  1139    operator][cluster-version-operator] creates this on its own.
  1140  - The `machine-config-operator-images` config-map.  Now [the
  1141    cluster-version operator][cluster-version-operator] pulls these from
  1142    [the machine-config images][machine-config-operator].
  1143  - The `machine-api` app-version from the `tectonic-system` namespace.
  1144  
  1145  ## 0.1.0 - 2018-10-02
  1146  
  1147  ### Added
  1148  
  1149  The `openshift-install` command.  This moves us to the new
  1150  install-config approach with [asset
  1151  generation](docs/design/assetgeneration.md) in Go instead of in
  1152  Terraform.  Terraform is still used to push the assets out to
  1153  resources on the backing platform (AWS, libvirt, or OpenStack), but
  1154  that push happens in a single Terraform invocation instead of in
  1155  multiple steps.  This makes installation faster, because more
  1156  resources can be created in parallel.  `openshift-install` also
  1157  dispenses with the distribution tarball; all required assets except
  1158  for a `terraform` binary are distributed in the `openshift-install`
  1159  binary.
  1160  
  1161  The configuration and command-line interface are quite different, so
  1162  previous `tectonic` users are encouraged to start from scratch when
  1163  getting acquainted with `openshift-install`.  AWS users should look
  1164  [here](README.md#quick-start).  Libvirt users should look
  1165  [here](docs/dev/libvirt/README.md).  The new `openshift-install` also
  1166  includes an interactive configuration generator, so you can launch the
  1167  installer and follow along as it guides you through the process.
  1168  
  1169  ### Removed
  1170  
  1171  The `tectonic` command and tarball distribution are gone.  Please use
  1172  the new `openshift-install` command instead.
  1173  
  1174  [aws-dhcp-options]: https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html
  1175  [aws-ebs-gp2-iops]: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html#EBSVolumeTypes_gp2
  1176  [aws-elb]: https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/introduction.html
  1177  [aws-elb-latency]: https://github.com/openshift/installer/pull/594#issue-227786691
  1178  [aws-instance-types]: https://aws.amazon.com/ec2/instance-types/
  1179  [aws-nlb]: https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html
  1180  [aws-s3-endpoint]: https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-s3.html
  1181  [aws-vpc-peering]: https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html
  1182  [bootstrap-identity-provider]: https://github.com/openshift/origin/pull/21580
  1183  [checkpointer-operator]: https://github.com/openshift/pod-checkpointer-operator
  1184  [cluster-api-provider-aws]: https://github.com/openshift/cluster-api-provider-aws
  1185  [cluster-api-provider-aws-012575c1-AWSMachineProviderConfig]: https://github.com/openshift/cluster-api-provider-aws/blob/012575c1c8d758f81c979b0b2354950a2193ec1a/pkg/apis/awsproviderconfig/v1alpha1/awsmachineproviderconfig_types.go#L86-L139
  1186  [cluster-bootstrap]: https://github.com/openshift/cluster-bootstrap
  1187  [cluster-config-operator]: https://github.com/openshift/cluster-config-operator
  1188  [cluster-version-operator]: https://github.com/openshift/cluster-version-operator
  1189  [ClusterVersion]: https://github.com/openshift/cluster-version-operator/blob/master/docs/dev/clusterversion.md
  1190  [credential-operator]: https://github.com/openshift/cloud-credential-operator
  1191  [dot]: https://www.graphviz.org/doc/info/lang.html
  1192  [Hive]: https://github.com/openshift/hive/
  1193  [ingress-operator]: https://github.com/openshift/cluster-ingress-operator
  1194  [kube-apiserver-operator]: https://github.com/openshift/cluster-kube-apiserver-operator
  1195  [kube-controller-manager-operator]: https://github.com/openshift/cluster-kube-controller-manager-operator
  1196  [kube-selector]: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
  1197  [kubecsr]: https://github.com/openshift/kubecsr/
  1198  [machine-api-operator]: https://github.com/openshift/machine-api-operator
  1199  [machine-config-operator]: https://github.com/openshift/machine-config-operator
  1200  [machine-config-daemon-ssh-keys]: https://github.com/openshift/machine-config-operator/blob/master/docs/Update-SSHKeys.md
  1201  [openshift-ansible]: https://github.com/openshift/openshift-ansible
  1202  [Prometheus]: https://github.com/prometheus/prometheus
  1203  [service-ca-operator]: https://github.com/openshift/service-ca-operator
  1204  [ssh.ParseAuthorizedKey]: https://godoc.org/golang.org/x/crypto/ssh#ParseAuthorizedKey
  1205  [registry-operator]: https://github.com/openshift/cluster-image-registry-operator
  1206  [rfc-1123-s2.1]: https://tools.ietf.org/html/rfc1123#section-2
  1207  [rfc-6335-s6]: https://tools.ietf.org/html/rfc6335#section-6
  1208  [rhcos-pipeline]: https://releases-rhcos.svc.ci.openshift.org/storage/releases/maipo/builds.json
  1209  [service-serving-cert-signer]: https://github.com/openshift/service-serving-cert-signer