Modify PreNetworkConfig config inline with role-specific parameters
authorSaravanan KR <skramaja@redhat.com>
Fri, 17 Mar 2017 16:15:54 +0000 (21:45 +0530)
committerSaravanan KR <skramaja@redhat.com>
Tue, 13 Jun 2017 05:32:33 +0000 (11:02 +0530)
Existing host_config_and_reboot.role.j2.yaml is done in ocata to
configure kernel args. This can be enhanced with use of role-specific
parameters, which is done in the current patch. The earlier method is
deprecated and will be removed in Q releae.
Implements: blueprint ovs-2-6-dpdk

Change-Id: Ib864f065527167a49a0f60812d7ad4ad12c836d1

13 files changed:
environments/host-config-and-reboot.j2.yaml [new file with mode: 0644]
environments/host-config-pre-network.j2.yaml [deleted file]
extraconfig/pre_network/ansible_host_config.yaml [moved from extraconfig/pre_network/ansible_host_config.ansible with 90% similarity]
extraconfig/pre_network/host_config_and_reboot.role.j2.yaml
extraconfig/pre_network/host_config_and_reboot.yaml [new file with mode: 0644]
overcloud.j2.yaml
puppet/blockstorage-role.yaml
puppet/cephstorage-role.yaml
puppet/compute-role.yaml
puppet/controller-role.yaml
puppet/objectstorage-role.yaml
puppet/role.role.j2.yaml
releasenotes/notes/pre-network-config-role-specific-b36cc4bd6383e493.yaml [new file with mode: 0644]

diff --git a/environments/host-config-and-reboot.j2.yaml b/environments/host-config-and-reboot.j2.yaml
new file mode 100644 (file)
index 0000000..d5f69ec
--- /dev/null
@@ -0,0 +1,18 @@
+resource_registry:
+{% for role in roles %}
+  OS::TripleO::{{role.name}}::PreNetworkConfig: ../extraconfig/pre_network/host_config_and_reboot.yaml
+{% endfor %}
+
+#parameter_defaults:
+  # Note: There are no global parameters which can be applied to all roles as
+  # these configuration have to be specific to role.
+
+  # Sample parameters for Compute and ComputeOvsDpdk roles
+  #ComputeParameters:
+    #KernelArgs: ""
+    #TunedProfileName: ""
+    #HostIsolatedCoreList: ""
+  #ComputeOvsDpdkParameters:
+    #KernelArgs: ""
+    #TunedProfileName: ""
+    #HostIsolatedCoreList: ""
diff --git a/environments/host-config-pre-network.j2.yaml b/environments/host-config-pre-network.j2.yaml
deleted file mode 100644 (file)
index c79e28b..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-resource_registry:
-# Create the registry only for roles with the word "Compute" in it. Like ComputeOvsDpdk, ComputeSriov, etc.,
-{%- for role in roles -%}
-{% if "Compute" in role.name %}
-  OS::TripleO::{{role.name}}::PreNetworkConfig: ../extraconfig/pre_network/{{role.name.lower()}}-host_config_and_reboot.yaml
-{%- endif -%}
-{% endfor %}
-
-#parameter_defaults:
-  # Sample parameters for Compute and ComputeOvsDpdk roles
-  #ComputeKernelArgs: ""
-  #ComputeTunedProfileName: ""
-  #ComputeHostCpuList: ""
-  #ComputeOvsDpdkKernelArgs: ""
-  #ComputeOvsDpdkTunedProfileName: ""
-  #ComputeOvsDpdkHostCpuList: ""
@@ -28,8 +28,8 @@
           lineinfile:
             dest: /etc/tuned/cpu-partitioning-variables.conf
             regexp: '^isolated_cores=.*'
-            line: 'isolated_cores={{ _HOST_CPUS_LIST_ }}'
-          when: _HOST_CPUS_LIST_|default("") != ""
+            line: 'isolated_cores={{ _TUNED_CORES_ }}'
+          when: _TUNED_CORES_|default("") != ""
 
         - name: Tune-d provile activation
           shell: tuned-adm profile {{ _TUNED_PROFILE_NAME_ }}
@@ -52,7 +52,7 @@
         when:
           - item.path | regex_replace('(^.*ifcfg-)(.*)', '\\2') != "lo"
           # This condition will list all the interfaces except the one with valid IP (which is Provisioning network at this stage)
-          # Simpler Version - hostvars[inventory_hostname]['ansible_' + iface_name ]['ipv4']['address'] is undefined
-          - hostvars[inventory_hostname]['ansible_' + item.path | regex_replace('(^.*ifcfg-)(.*)', '\\2') ]['ipv4']['address'] is undefined
+          # Simpler Version - hostvars[inventory_hostname]['ansible_' + iface_name ]['ipv4'] is undefined
+          - hostvars[inventory_hostname]['ansible_' + item.path | regex_replace('(^.*ifcfg-)(.*)', '\\2') ]['ipv4'] is undefined
         with_items:
           - "{{ ifcfg_files.files }}"
index 658fea7..41d8f4f 100644 (file)
@@ -7,6 +7,9 @@ description: >
 parameters:
   server:
     type: string
+  # Deprecated Parameters, these configuration are deprecated in favor or role-specific parameters.
+  # Use: extraconfig/pre_network/host_config_and_reboot.yaml.
+  # Deprecated in Pike and will be removed in Queens.
   {{role}}KernelArgs:
     type: string
     default: ""
@@ -17,6 +20,13 @@ parameters:
     type: string
     default: ""
 
+parameter_group:
+  - label: deprecated
+    parameters:
+      - {{role}}KernelArgs
+      - {{role}}TunedProfileName
+      - {{role}}HostCpusList
+
 conditions:
   param_exists:
     or:
diff --git a/extraconfig/pre_network/host_config_and_reboot.yaml b/extraconfig/pre_network/host_config_and_reboot.yaml
new file mode 100644 (file)
index 0000000..74e716a
--- /dev/null
@@ -0,0 +1,85 @@
+heat_template_version: pike
+
+description: >
+  All configurations which require reboot should be initiated via PreNetworkConfig. After
+  this configuration is completed, the corresponding node will be rebooted.
+
+parameters:
+  server:
+    type: string
+  RoleParameters:
+    type: json
+    description: Role Specific parameters
+    default: {}
+
+conditions:
+  is_host_config_required: {not: {equals: [{get_param: [RoleParameters, KernelArgs]}, ""]}}
+
+resources:
+  HostParametersConfig:
+    type: OS::Heat::SoftwareConfig
+    condition: is_host_config_required
+    properties:
+      group: ansible
+      inputs:
+        - name: _KERNEL_ARGS_
+        - name: _TUNED_PROFILE_NAME_
+        - name: _TUNED_CORES_
+      outputs:
+        - name: result
+      config:
+        get_file: ansible_host_config.yaml
+
+  HostParametersDeployment:
+    type: OS::Heat::SoftwareDeployment
+    condition: is_host_config_required
+    properties:
+      name: HostParametersDeployment
+      server:  {get_param: server}
+      config: {get_resource: HostParametersConfig}
+      actions: ['CREATE'] # Only do this on CREATE
+      input_values:
+        _KERNEL_ARGS_: {get_param: [RoleParameters, KernelArgs]}
+        _TUNED_PROFILE_NAME_: {get_param: [RoleParameters, TunedProfileName]}
+        _TUNED_CORES_: {get_param: [RoleParameters, HostIsolatedCoreList]}
+
+  RebootConfig:
+    type: OS::Heat::SoftwareConfig
+    condition: is_host_config_required
+    properties:
+      group: script
+      config: |
+        #!/bin/bash
+        # Stop os-collect-config to avoid any race collecting another
+        # deployment before reboot happens
+        systemctl stop os-collect-config.service
+        /sbin/reboot
+
+  RebootDeployment:
+    type: OS::Heat::SoftwareDeployment
+    depends_on: HostParametersDeployment
+    condition: is_host_config_required
+    properties:
+      name: RebootDeployment
+      server:  {get_param: server}
+      config: {get_resource: RebootConfig}
+      actions: ['CREATE'] # Only do this on CREATE
+      signal_transport: NO_SIGNAL
+
+outputs:
+  result:
+    condition: is_host_config_required
+    value:
+      get_attr: [HostParametersDeployment, result]
+  stdout:
+    condition: is_host_config_required
+    value:
+      get_attr: [HostParametersDeployment, deploy_stdout]
+  stderr:
+    condition: is_host_config_required
+    value:
+      get_attr: [HostParametersDeployment, deploy_stderr]
+  status_code:
+    condition: is_host_config_required
+    value:
+      get_attr: [HostParametersDeployment, deploy_status_code]
index f8655b1..c7db59f 100644 (file)
@@ -446,6 +446,7 @@ resources:
           MonitoringSubscriptions: {get_attr: [{{role.name}}ServiceChainRoleData, value, monitoring_subscriptions]}
           ServiceMetadataSettings: {get_attr: [{{role.name}}ServiceChainRoleData, value, service_metadata_settings]}
           DeploymentServerBlacklistDict: {get_attr: [DeploymentServerBlacklistDict, value]}
+          RoleParameters: {get_param: {{role.name}}Parameters}
 {% endfor %}
 
 {% for role in roles %}
index 60ddeb8..bbad7c9 100644 (file)
@@ -139,6 +139,10 @@ parameters:
       Map of server hostnames to blacklist from any triggered
       deployments. If the value is 1, the server will be blacklisted. This
       parameter is generated from the parent template.
+  RoleParameters:
+    type: json
+    description: Role Specific Parameters
+    default: {}
 
 conditions:
   server_not_blacklisted:
@@ -372,6 +376,7 @@ resources:
     type: OS::TripleO::BlockStorage::PreNetworkConfig
     properties:
       server: {get_resource: BlockStorage}
+      RoleParameters: {get_param: RoleParameters}
 
   NetworkDeployment:
     type: OS::TripleO::SoftwareDeployment
index 9d30ab2..57bcc68 100644 (file)
@@ -145,6 +145,10 @@ parameters:
       Map of server hostnames to blacklist from any triggered
       deployments. If the value is 1, the server will be blacklisted. This
       parameter is generated from the parent template.
+  RoleParameters:
+    type: json
+    description: Role Specific Parameters
+    default: {}
 
 conditions:
   server_not_blacklisted:
@@ -378,6 +382,7 @@ resources:
     type: OS::TripleO::CephStorage::PreNetworkConfig
     properties:
       server: {get_resource: CephStorage}
+      RoleParameters: {get_param: RoleParameters}
 
   NetworkDeployment:
     type: OS::TripleO::SoftwareDeployment
index 06a31ec..658b8af 100644 (file)
@@ -157,6 +157,10 @@ parameters:
       Map of server hostnames to blacklist from any triggered
       deployments. If the value is 1, the server will be blacklisted. This
       parameter is generated from the parent template.
+  RoleParameters:
+    type: json
+    description: Role Specific Parameters
+    default: {}
 
 conditions:
   server_not_blacklisted:
@@ -381,6 +385,7 @@ resources:
     type: OS::TripleO::Compute::PreNetworkConfig
     properties:
       server: {get_resource: NovaCompute}
+      RoleParameters: {get_param: RoleParameters}
 
   NetworkConfig:
     type: OS::TripleO::Compute::Net::SoftwareConfig
index cccfdef..0f51dfc 100644 (file)
@@ -171,6 +171,10 @@ parameters:
       Map of server hostnames to blacklist from any triggered
       deployments. If the value is 1, the server will be blacklisted. This
       parameter is generated from the parent template.
+  RoleParameters:
+    type: json
+    description: Role Specific Parameters
+    default: {}
 
 parameter_groups:
 - label: deprecated
@@ -401,6 +405,7 @@ resources:
     type: OS::TripleO::Controller::PreNetworkConfig
     properties:
       server: {get_resource: Controller}
+      RoleParameters: {get_param: RoleParameters}
 
   NetworkConfig:
     type: OS::TripleO::Controller::Net::SoftwareConfig
index 19ea1b6..6fd60cc 100644 (file)
@@ -139,6 +139,10 @@ parameters:
       Map of server hostnames to blacklist from any triggered
       deployments. If the value is 1, the server will be blacklisted. This
       parameter is generated from the parent template.
+  RoleParameters:
+    type: json
+    description: Role Specific Parameters
+    default: {}
 
 conditions:
   server_not_blacklisted:
@@ -372,6 +376,7 @@ resources:
     type: OS::TripleO::ObjectStorage::PreNetworkConfig
     properties:
       server: {get_resource: SwiftStorage}
+      RoleParameters: {get_param: RoleParameters}
 
   NetworkDeployment:
     type: OS::TripleO::SoftwareDeployment
index 7af90e2..5b4ae7f 100644 (file)
@@ -161,6 +161,10 @@ parameters:
       Map of server hostnames to blacklist from any triggered
       deployments. If the value is 1, the server will be blacklisted. This
       parameter is generated from the parent template.
+  RoleParameters:
+    type: json
+    description: Role Specific Parameters
+    default: {}
 
 conditions:
   server_not_blacklisted:
@@ -394,6 +398,7 @@ resources:
     type: OS::TripleO::{{role}}::PreNetworkConfig
     properties:
       server: {get_resource: {{role}}}
+      RoleParameters: {get_param: RoleParameters}
 
   NetworkDeployment:
     type: OS::TripleO::SoftwareDeployment
diff --git a/releasenotes/notes/pre-network-config-role-specific-b36cc4bd6383e493.yaml b/releasenotes/notes/pre-network-config-role-specific-b36cc4bd6383e493.yaml
new file mode 100644 (file)
index 0000000..95e9260
--- /dev/null
@@ -0,0 +1,11 @@
+---
+features:
+  - PreNetworkConfig is modified to support role-specific parameters.
+upgrade:
+  - PreNetworkConfig takes a new parameter, RoleParameters. All the templates
+    associated with PreNetworkConfig should add this new parameter during
+    upgrade.
+deprecations:
+  - Parameters {{role}}KernelArgs, {{role}}TunedProfileName and
+    {{role}}HostCpusList are deprecated. Alternatively, role-specific
+    parameter support has been added with the same names.