summaryrefslogtreecommitdiffstats
path: root/deployed-server/deployed-server.yaml
blob: 1e8afb257df5f3307c511a174b24ec46169512c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
heat_template_version: ocata
parameters:
  image:
    type: string
    default: unused
  flavor:
    type: string
    default: unused
  key_name:
    type: string
    default: unused
  security_groups:
    type: json
    default: []
  # Require this so we can validate the parent passes the
  # correct value
  user_data_format:
    type: string
  user_data:
    type: string
    default: ''
  name:
    type: string
    default: 'deployed-server'
  image_update_policy:
    type: string
    default: ''
  networks:
    type: comma_delimited_list
    default: ''
  metadata:
    type: json
    default: {}
  software_config_transport:
    default: POLL_SERVER_CFN
    type: string
  scheduler_hints:
    type: json
    description: Optional scheduler hints to pass to nova
    default: {}
  UpgradeInitCommand:
    type: string
    description: |
      Command or script snippet to run on all overcloud nodes to
      initialize the upgrade process. E.g. a repository switch.
    default: ''

resources:
  deployed-server:
    type: OS::Heat::DeployedServer
    properties:
      name: {get_param: name}
      software_config_transport: {get_param: software_config_transport}

  UpgradeInitConfig:
    type: OS::Heat::SoftwareConfig
    properties:
      group: script
      config:
        list_join:
        - ''
        - - "#!/bin/bash\n\n"
          - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
          - get_param: UpgradeInitCommand

  UpgradeInitDeployment:
    type: OS::Heat::SoftwareDeployment
    properties:
      name: UpgradeInitDeployment
      server: {get_resource: deployed-server}
      config: {get_resource: UpgradeInitConfig}


  InstanceIdConfig:
    type: OS::Heat::StructuredConfig
    properties:
      group: apply-config
      config:
        instance-id: {get_resource: deployed-server}

  InstanceIdDeployment:
    type: OS::Heat::StructuredDeployment
    properties:
      config: {get_resource: InstanceIdConfig}
      server: {get_resource: deployed-server}
    depends_on: UpgradeInitDeployment

  HostsEntryConfig:
    type: OS::Heat::SoftwareConfig
    properties:
      group: script
      config: |
          #!/bin/bash
          set -eux
          mkdir -p $heat_outputs_path
          host=$(hostname -s)
          echo -n $host > $heat_outputs_path.hostname
          cat $heat_outputs_path.hostname
      outputs:
        - name: hostname
          description: hostname

  HostsEntryDeployment:
    type: OS::Heat::SoftwareDeployment
    properties:
      config: {get_resource: HostsEntryConfig}
      server: {get_resource: deployed-server}

  DeployedServerBootstrapConfig:
    type: OS::TripleO::DeployedServer::Bootstrap
    properties:
      server: {get_resource: deployed-server}

  ControlPlanePort:
    type: OS::TripleO::DeployedServer::ControlPlanePort
    properties:
      network: ctlplane
      name:
        list_join:
          - '-'
          - - {get_attr: [HostsEntryDeployment, hostname]}
            - ctlplane
      replacement_policy: AUTO

outputs:
  OS::stack_id:
    value: {get_resource: deployed-server}
  networks:
    value:
      ctlplane:
        - {get_attr: [ControlPlanePort, fixed_ips, 0, ip_address]}
  name:
    value: {get_attr: [HostsEntryDeployment, hostname]}
n class="o">.info('Hugepages free: %s %s', match.group('free_hp'), 'on socket {}'.format(socket) if socket else '') return int(match.group('free_hp')) _LOGGER.info('Could not parse for hugepage size') return 0 def is_hugepage_available(): """Check if hugepages are configured/available on the system. """ hugepage_size_re = re.compile(r'^Hugepagesize:\s+(?P<size_hp>\d+)\s+kB', re.IGNORECASE) # read in meminfo with open('/proc/meminfo') as mem_file: mem_info = mem_file.readlines() # see if the hugepage size is the recommended value for line in mem_info: match_size = hugepage_size_re.match(line) if match_size: if match_size.group('size_hp') != '1048576': _LOGGER.info( '%s%s%s kB', 'Hugepages not configured for recommend 1GB size. ', 'Currently set at ', match_size.group('size_hp')) num_huge = get_free_hugepages() if num_huge == 0: _LOGGER.info('No free hugepages.') if not allocate_hugepages(): return False else: _LOGGER.info('Found \'%s\' free hugepage(s).', num_huge) return True def is_hugepage_mounted(): """Check if hugepages are mounted. """ output = subprocess.check_output(['mount'], shell=True) my_encoding = locale.getdefaultlocale()[1] for line in output.decode(my_encoding).split('\n'): if 'hugetlbfs' in line: return True return False def mount_hugepages(): """Ensure hugepages are mounted. Raises RuntimeError if no configured hugepages are available. """ if not is_hugepage_available(): raise RuntimeError('No Hugepages configured.') if is_hugepage_mounted(): return if not os.path.exists(settings.getValue('HUGEPAGE_DIR')): tasks.run_task(['sudo', 'mkdir', settings.getValue('HUGEPAGE_DIR')], _LOGGER, 'Creating directory ' + settings.getValue('HUGEPAGE_DIR'), True) try: tasks.run_task(['sudo', 'mount', '-t', 'hugetlbfs', 'nodev', settings.getValue('HUGEPAGE_DIR')], _LOGGER, 'Mounting hugepages...', True) except subprocess.CalledProcessError: _LOGGER.error('Unable to mount hugepages.') def umount_hugepages(): """Ensure hugepages are unmounted. """ if not is_hugepage_mounted(): return try: tasks.run_task(['sudo', 'umount', settings.getValue('HUGEPAGE_DIR')], _LOGGER, 'Unmounting hugepages...', True) except subprocess.CalledProcessError: _LOGGER.error('Unable to umount hugepages.') if not deallocate_hugepages(): _LOGGER.error('Unable to deallocate previously allocated hugepages.')