Subject: [PATCH] Make qemu-kvm architecture aware
 
 ---
- deployment/puppet/openstack/manifests/compute.pp | 9 +++++++--
+ deployment/puppet/openstack_tasks/manifests/roles/compute.pp | 9 +++++++--
  1 file changed, 7 insertions(+), 2 deletions(-)
 
-diff --git a/deployment/puppet/openstack/manifests/compute.pp b/deployment/puppet/openstack/manifests/compute.pp
+diff --git a/deployment/puppet/openstack_tasks/manifests/roles/compute.pp b/deployment/puppet/openstack_tasks/manifests/roles/compute.pp
 index b2339bc..ca1b2c4 100644
---- a/deployment/puppet/openstack/manifests/compute.pp
-+++ b/deployment/puppet/openstack/manifests/compute.pp
-@@ -169,10 +169,15 @@ class openstack::compute (
-         before  => Augeas['libvirt-conf'],
-       }
- 
+--- a/deployment/puppet/openstack_tasks/manifests/roles/compute.pp
++++ b/deployment/puppet/openstack_tasks/manifests/roles/compute.pp
+@@ -169,7 +169,12 @@ class openstack_tasks::compute (
+       # From legacy libvirt.pp
 +      # Guard against some exotic distros with their `uname -m`
 +      $arch = $::architecture ? {
 +        /(arm64|aarch64)/ => 'aarch64',
 +        default           => 'x86_64',
 +      }
-       # From legacy libvirt.pp
        exec { 'symlink-qemu-kvm':
 -        command => '/bin/ln -sf /usr/libexec/qemu-kvm /usr/bin/qemu-system-x86_64',
 -        creates => '/usr/bin/qemu-system-x86_64',
 
 images.
 ---
  deployment/puppet/openstack/manifests/img/cirros.pp           |  8 ++++++--
- .../puppet/osnailyfacter/modular/generate_vms/generate_vms.pp | 11 +++++++++++
+ puppet/osnailyfacter/manifests/generate_vms/vm_config.pp      | 11 +++++++++++
  deployment/puppet/osnailyfacter/templates/vm_libvirt.erb      |  9 ++++++++-
  files/fuel-migrate/fuel-migrate                               |  5 ++++-
  4 files changed, 29 insertions(+), 4 deletions(-)
      unless => "/usr/bin/glance -N ${os_auth_url} -T ${os_tenant_name} -I ${os_username} -K ${os_password} index && (/usr/bin/glance -N ${os_auth_url} -T ${os_tenant_name} -I ${os_username} -K ${os_password} index | grep ${img_name})",
  
      }
-diff --git a/deployment/puppet/osnailyfacter/modular/generate_vms/generate_vms.pp b/deployment/puppet/osnailyfacter/modular/generate_vms/generate_vms.pp
+diff --git a/deployment/puppet/osnailyfacter/manifests/generate_vms/vm_config.pp b/deployment/puppet/osnailyfacter/manifests/generate_vms/vm_config.pp
 index 6d5426a..da5954e 100644
---- a/deployment/puppet/osnailyfacter/modular/generate_vms/generate_vms.pp
-+++ b/deployment/puppet/osnailyfacter/modular/generate_vms/generate_vms.pp
+--- a/deployment/puppet/osnailyfacter/manifests/generate_vms/vm_config.pp
++++ b/deployment/puppet/osnailyfacter/manifests/generate_vms/vm_config.pp
 @@ -11,6 +11,17 @@ define vm_config {
    $details = $name
    $id = $details['id']
 
 Subject: [PATCH] Disable usb tablet for aarch64
 
 ---
- deployment/puppet/openstack/manifests/compute.pp | 12 ++++++++++++
+ deployment/puppet/openstack_tasks/manifests/roles/compute.pp | 12 ++++++++++++
  1 file changed, 12 insertions(+)
 
-diff --git a/deployment/puppet/openstack/manifests/compute.pp b/deployment/puppet/openstack/manifests/compute.pp
+diff --git a/deployment/puppet/openstack_tasks/manifests/roles/compute.pp b/deployment/puppet/openstack_tasks/manifests/roles/compute.pp
 index ca1b2c4..c0349dc 100644
---- a/deployment/puppet/openstack/manifests/compute.pp
-+++ b/deployment/puppet/openstack/manifests/compute.pp
-@@ -316,6 +316,10 @@ class openstack::compute (
+--- a/deployment/puppet/openstack_tasks/manifests/roles/compute.pp
++++ b/deployment/puppet/openstack_tasks/manifests/roles/compute.pp
+@@ -316,3 +316,7 @@ class openstack::compute (
    nova_config {
-     'libvirt/live_migration_flag':  value => 'VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST';
-     'libvirt/block_migration_flag': value => 'VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_NON_SHARED_INC';
 +    'libvirt/use_usb_tablet': value => $::architecture ? {
 +        /(arm64|aarch64)/ => false,
 +        default           => true,
 +    }
-   }
- 
-   nova_config {
-@@ -364,6 +368,14 @@ class openstack::compute (
-     # Workaround for bug LP #1469308
-     # also service name for Ubuntu and Centos is the same.
-     libvirt_service_name     => "libvirtd",
+     'libvirt/live_migration_flag':  value => 'VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST';
+     'libvirt/block_migration_flag': value => 'VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_NON_SHARED_INC';
+@@ -364,3 +368,11 @@ class openstack::compute (
+     libvirt_service_name                       => $::nova::params::libvirt_service_name,
 +  } ->
 +  package { 'vgabios':
 +    ensure => present;
 +    replace => false,
    }
  
-   # From legacy libvirt.pp
 
 TestVM (cirros) on aarch64 requires more than 64MB RAM.
 Keep profiles uniform across all archs.
 ---
- .../osnailyfacter/modular/openstack-controller/openstack-controller.pp  | 2 +-
+ .../openstack_tasks/manifests/openstack_controller/openstack_controller.pp  | 2 +-
  tests/noop/spec/hosts/openstack-controller/openstack-controller_spec.rb | 2 +-
  2 files changed, 2 insertions(+), 2 deletions(-)
 
-diff --git a/deployment/puppet/osnailyfacter/modular/openstack-controller/openstack-controller.pp b/deployment/puppet/osnailyfacter/modular/openstack-controller/openstack-controller.pp
+diff --git a/deployment/puppet/openstack_tasks/manifests/openstack_controller/openstack_controller.pp b/deployment/puppet/openstack_tasks/manifests/openstack_controller/openstack_controller.pp
 index b1d8795..88e0ab3 100644
---- a/deployment/puppet/osnailyfacter/modular/openstack-controller/openstack-controller.pp
-+++ b/deployment/puppet/osnailyfacter/modular/openstack-controller/openstack-controller.pp
+--- a/deployment/puppet/openstack_tasks/manifests/openstack_controller/openstack_controller.pp
++++ b/deployment/puppet/openstack_tasks/manifests/openstack_controller/openstack_controller.pp
 @@ -233,7 +233,7 @@ if $primary_controller {
-       "OS_REGION_NAME=${region}",
-       "NOVA_ENDPOINT_TYPE=internalURL",
-     ],
--    command   => 'bash -c "nova flavor-create --is-public true m1.micro auto 64 0 1"',
-+    command   => 'bash -c "nova flavor-create --is-public true m1.micro auto 128 0 1"',
-     #FIXME(mattymo): Upstream bug PUP-2299 for retries in unless/onlyif
-     # Retry nova-flavor list until it exits 0, then exit with grep status,
-     # finally exit 1 if tries exceeded
+         "OS_REGION_NAME=${region}",
+         "NOVA_ENDPOINT_TYPE=internalURL",
+       ],
+-      command   => 'bash -c "nova flavor-create --is-public true m1.micro auto 64 0 1"',
++      command   => 'bash -c "nova flavor-create --is-public true m1.micro auto 128 0 1"',
+       #FIXME(mattymo): Upstream bug PUP-2299 for retries in unless/onlyif
+       # Retry nova-flavor list until it exits 0, then exit with grep status,
+       # finally exit 1 if tries exceeded
 diff --git a/tests/noop/spec/hosts/openstack-controller/openstack-controller_spec.rb b/tests/noop/spec/hosts/openstack-controller/openstack-controller_spec.rb
 index 36161e6..b15da07 100644
 --- a/tests/noop/spec/hosts/openstack-controller/openstack-controller_spec.rb
 +++ b/tests/noop/spec/hosts/openstack-controller/openstack-controller_spec.rb
-@@ -171,7 +171,7 @@ describe manifest do
+@@ -399,5 +399,5 @@ describe manifest do
      if primary_controller
        it 'should retry unless when creating m1.micro flavor' do
          should contain_exec('create-m1.micro-flavor').with(
 -           'command' => 'bash -c "nova flavor-create --is-public true m1.micro auto 64 0 1"',
 +           'command' => 'bash -c "nova flavor-create --is-public true m1.micro auto 128 0 1"',
             'unless'  => 'bash -c \'for tries in {1..10}; do
-                     nova flavor-list | grep m1.micro;
-                     status=("${PIPESTATUS[@]}");
 
 index a2cb1da..d9d2dcc 100644
 --- a/deployment/puppet/osnailyfacter/modular/astute/tasks.yaml
 +++ b/deployment/puppet/osnailyfacter/modular/astute/tasks.yaml
-@@ -19,7 +19,7 @@
+@@ -19,6 +19,6 @@
      cmd: ruby /etc/puppet/modules/osnailyfacter/modular/astute/upload_cirros.rb
      retries: 3
      interval: 20
 +    timeout: 360
  
  - id: upload_nodes_info
-   type: upload_file
 
 a nice UX addition.
 ---
  .../openstack/files/nova-libvirt-vga-console.patch | 39 ++++++++++++++++++++++
- deployment/puppet/openstack/manifests/compute.pp   | 19 +++++++++++
+ deployment/puppet/openstack_tasks/manifests/roles/compute.pp   | 19 +++++++++++
  2 files changed, 58 insertions(+)
  create mode 100644 deployment/puppet/openstack/files/nova-libvirt-vga-console.patch
 
 +             # NOTE(ldbragst): PowerKVM doesn't support 'cirrus' be default
 +             # so use 'vga' instead when running on Power hardware.
 +             video.type = 'vga'
-diff --git a/deployment/puppet/openstack/manifests/compute.pp b/deployment/puppet/openstack/manifests/compute.pp
+diff --git a/deployment/puppet/openstack_tasks/manifests/roles/compute.pp b/deployment/puppet/openstack_tasks/manifests/roles/compute.pp
 index c0349dc..46b1801 100644
---- a/deployment/puppet/openstack/manifests/compute.pp
-+++ b/deployment/puppet/openstack/manifests/compute.pp
-@@ -157,6 +157,12 @@ class openstack::compute (
-     }
-   }
- 
+--- a/deployment/puppet/openstack_tasks/manifests/roles/compute.pp
++++ b/deployment/puppet/openstack_tasks/manifests/roles/compute.pp
+@@ -157,4 +157,10 @@ class openstack::compute (
+
+   include ::nova::params
++
 +  if ! defined(Package['patch']) {
 +    package { 'patch':
 +      ensure => 'present',
 +    }
 +  }
-+
-   $glance_connection = $glance_api_servers
  
    case $::osfamily {
-@@ -250,6 +256,7 @@ class openstack::compute (
+@@ -250,3 +256,4 @@ class openstack::compute (
  
-   $memcached_addresses =  suffix($cache_server_ip, inline_template(":<%= @cache_server_port %>"))
    $notify_on_state_change = 'vm_and_task_state'
 +  $nova_path = '/usr/lib/python2.7/dist-packages/nova'
  
-   class { 'nova':
-       install_utilities      => false,
-@@ -273,6 +280,18 @@ class openstack::compute (
-       service_down_time      => $nova_service_down_time,
-       notify_on_state_change => $notify_on_state_change,
-       memcached_servers      => $memcached_addresses,
+@@ -273,5 +280,17 @@ class openstack::compute (
+     notification_driver    => $ceilometer_hash['notification_driver'],
+     memcached_servers      => $memcached_addresses,
+     cinder_catalog_info    => pick($nova_hash_real['cinder_catalog_info'], 'volumev2:cinderv2:internalURL'),
 +  } ->
 +  # FIXME(armband): Workaround for missing arm defaults in nova libvirt driver
 +  file { "${nova_path}/libvirt-vga-console.patch":
 +    require => [Package['patch']],
    }
  
-   if str2bool($::is_virtual) {
 
 Signed-off-by: Stanislaw Kardach <stanislaw.kardach@caviumnetworks.com>
 ---
  .../openstack/files/nova-libvirt-inject.patch      | 44 ++++++++++++++++++++++
- deployment/puppet/openstack/manifests/compute.pp   | 12 ++++++
+ deployment/puppet/openstack_tasks/manifests/roles/compute.pp   | 12 ++++++
  2 files changed, 56 insertions(+)
  create mode 100644 deployment/puppet/openstack/files/nova-libvirt-inject.patch
 
 +             target_partition = CONF.libvirt.inject_partition
 +             if target_partition == 0:
 +                 target_partition = None
-diff --git a/deployment/puppet/openstack/manifests/compute.pp b/deployment/puppet/openstack/manifests/compute.pp
+diff --git a/deployment/puppet/openstack_tasks/manifests/roles/compute.pp b/deployment/puppet/openstack_tasks/manifests/roles/compute.pp
 index 46b1801..d42d6a1 100644
---- a/deployment/puppet/openstack/manifests/compute.pp
-+++ b/deployment/puppet/openstack/manifests/compute.pp
-@@ -281,6 +281,18 @@ class openstack::compute (
-       notify_on_state_change => $notify_on_state_change,
-       memcached_servers      => $memcached_addresses,
+--- a/deployment/puppet/openstack_tasks/manifests/roles/compute.pp
++++ b/deployment/puppet/openstack_tasks/manifests/roles/compute.pp
+@@ -281,4 +281,16 @@ class openstack::compute (
    } ->
 +  # FIXME(armband): Fix inject for part image direct boot (bug LP #1469308)
 +  file { "${nova_path}/libvirt-inject.patch":
 
 
 [1] https://www.kernel.org/doc/Documentation/filesystems/xfs.txt
 ---
- deployment/puppet/osnailyfacter/modular/ceph/ceph-osd.pp   | 7 +++++++
- deployment/puppet/osnailyfacter/modular/globals/globals.pp | 2 +-
+ deployment/puppet/osnailyfacter/manifests/ceph/ceph_osd.pp   | 7 +++++++
+ deployment/puppet/osnailyfacter/manifests/globals/globals.pp | 2 +-
  2 files changed, 8 insertions(+), 1 deletion(-)
 
-diff --git a/deployment/puppet/osnailyfacter/modular/ceph/ceph-osd.pp b/deployment/puppet/osnailyfacter/modular/ceph/ceph-osd.pp
+diff --git a/deployment/puppet/osnailyfacter/manifests/ceph/ceph_osd.pp b/deployment/puppet/osnailyfacter/manifests/ceph/ceph_osd.pp
 index f7da80e..22aab33 100644
---- a/deployment/puppet/osnailyfacter/modular/ceph/ceph-osd.pp
-+++ b/deployment/puppet/osnailyfacter/modular/ceph/ceph-osd.pp
-@@ -50,6 +50,13 @@ class {'ceph':
- }
+--- a/deployment/puppet/osnailyfacter/manifests/ceph/ceph_osd.pp
++++ b/deployment/puppet/osnailyfacter/manifests/ceph/ceph_osd.pp
+@@ -50,4 +50,11 @@ class {'ceph':
+   }
  
- if $ceph_tuning_settings != {} {
-+  if versioncmp($::kernelmajversion, '4.0') < 0 {
-+    # FIXME(armband): XFS mount opt delaylog is deprecated in kernels >=4.0.
-+    $ceph_tuning_settings['osd_mount_options_xfs'] = join([
-+      $ceph_tuning_settings['osd_mount_options_xfs'],
-+      'delaylog'
-+    ], ',')
-+  }
-   ceph_conf {
-     'global/debug_default'                    : value => $debug;
-     'global/max_open_files'                   : value => $ceph_tuning_settings['max_open_files'];
-diff --git a/deployment/puppet/osnailyfacter/modular/globals/globals.pp b/deployment/puppet/osnailyfacter/modular/globals/globals.pp
+   if $ceph_tuning_settings_hash != {} {
++    if versioncmp($::kernelmajversion, '4.0') < 0 {
++      # FIXME(armband): XFS mount opt delaylog is deprecated in kernels >=4.0.
++      $ceph_tuning_settings_hash['osd_mount_options_xfs'] = join([
++        $ceph_tuning_settings_hash['osd_mount_options_xfs'],
++        'delaylog'
++      ], ',')
++    }
+     ceph_conf {
+diff --git a/deployment/puppet/osnailyfacter/manifests/globals/globals.pp b/deployment/puppet/osnailyfacter/modular/globals/globals.pp
 index 268a5b1..69aed7b 100644
---- a/deployment/puppet/osnailyfacter/modular/globals/globals.pp
-+++ b/deployment/puppet/osnailyfacter/modular/globals/globals.pp
+--- a/deployment/puppet/osnailyfacter/manifests/globals/globals.pp
++++ b/deployment/puppet/osnailyfacter/manifests/globals/globals.pp
 @@ -123,7 +123,7 @@ if ($storage_hash['volumes_ceph'] or $storage_hash['images_ceph'] or $storage_ha
-   $ceph_tuning_settings = {
-     'max_open_files'                       => pick($storage_tuning_settings['max_open_files'], '131072'),
-     'osd_mkfs_type'                        => pick($storage_tuning_settings['osd_mkfs_type'], 'xfs'),
--    'osd_mount_options_xfs'                => pick($storage_tuning_settings['osd_mount_options_xfs'], 'rw,relatime,inode64,logbsize=256k,delaylog,allocsize=4M'),
-+    'osd_mount_options_xfs'                => pick($storage_tuning_settings['osd_mount_options_xfs'], 'rw,relatime,inode64,logbsize=256k,allocsize=4M'),
-     'osd_op_threads'                       => pick($storage_tuning_settings['osd_op_threads'], '20'),
-     'filestore_queue_max_ops'              => pick($storage_tuning_settings['filestore_queue_max_ops'], '500'),
-     'filestore_queue_committing_max_ops'   => pick($storage_tuning_settings['filestore_queue_committing_max_ops'], '5000'),
+     $ceph_tuning_settings = {
+       'max_open_files'                       => pick($storage_tuning_settings['max_open_files'], '131072'),
+       'osd_mkfs_type'                        => pick($storage_tuning_settings['osd_mkfs_type'], 'xfs'),
+-      'osd_mount_options_xfs'                => pick($storage_tuning_settings['osd_mount_options_xfs'], 'rw,relatime,inode64,logbsize=256k,delaylog,allocsize=4M'),
++      'osd_mount_options_xfs'                => pick($storage_tuning_settings['osd_mount_options_xfs'], 'rw,relatime,inode64,logbsize=256k,allocsize=4M'),
+       'osd_op_threads'                       => pick($storage_tuning_settings['osd_op_threads'], '20'),
+       'filestore_queue_max_ops'              => pick($storage_tuning_settings['filestore_queue_max_ops'], '500'),
+       'filestore_queue_committing_max_ops'   => pick($storage_tuning_settings['filestore_queue_committing_max_ops'], '5000'),
 
 [1] https://review.openstack.org/#/c/200602/8/deployment/puppet/
     openstack/manifests/ceilometer.pp
 ---
- deployment/puppet/openstack/manifests/ceilometer.pp | 8 +++++++-
+ deployment/puppet/openstack_tasks/manifests/ceilometer/compute.pp | 8 +++++++-
  1 file changed, 7 insertions(+), 1 deletion(-)
 
-diff --git a/deployment/puppet/openstack/manifests/ceilometer.pp b/deployment/puppet/openstack/manifests/ceilometer.pp
+diff --git a/deployment/puppet/openstack_tasks/manifests/ceilometer/compute.pp b/deployment/puppet/openstack_tasks/manifests/ceilometer/compute.pp
 index 8311731..1d7af2b 100644
---- a/deployment/puppet/openstack/manifests/ceilometer.pp
-+++ b/deployment/puppet/openstack/manifests/ceilometer.pp
-@@ -195,8 +195,14 @@ class openstack::ceilometer (
+--- a/deployment/puppet/openstack_tasks/manifests/ceilometer/compute.pp
++++ b/deployment/puppet/openstack_tasks/manifests/ceilometer/compute.pp
+@@ -195,7 +195,13 @@ class openstack::ceilometer (
  
-   if ($on_compute) {
      if $::operatingsystem == 'Ubuntu' and $::ceilometer::params::libvirt_group {
 +      # Armband libvirt-bin deb package (1.3.2 version) creates 'libvirtd' group on Ubuntu
 +      if (versioncmp($::libvirt_package_version, '1.3.2') >= 0) {