diff options
40 files changed, 401 insertions, 140 deletions
| diff --git a/README_GCE.md b/README_GCE.md index f6c5138c1..50f8ade70 100644 --- a/README_GCE.md +++ b/README_GCE.md @@ -39,6 +39,13 @@ Create a gce.ini file for GCE  * gce_service_account_pem_file_path - Full path from previous steps  * gce_project_id - Found in "Projects", it list all the gce projects you are associated with.  The page lists their "Project Name" and "Project ID".  You want the "Project ID" +Mandatory customization variables (check the values according to your tenant): +* zone = europe-west1-d +* network = default +* gce_machine_type = n1-standard-2 +* gce_machine_image = preinstalled-slave-50g-v5 + +  1. vi ~/.gce/gce.ini  1. make the contents look like this:  ``` @@ -46,11 +53,15 @@ Create a gce.ini file for GCE  gce_service_account_email_address = long...@developer.gserviceaccount.com  gce_service_account_pem_file_path = /full/path/to/project_id-gce_key_hash.pem  gce_project_id = project_id +zone = europe-west1-d +network = default +gce_machine_type = n1-standard-2 +gce_machine_image = preinstalled-slave-50g-v5 +  ``` -1. Setup a sym link so that gce.py will pick it up (link must be in same dir as gce.py) +1. Define the environment variable GCE_INI_PATH so gce.py can pick it up and bin/cluster can also read it  ``` -  cd openshift-ansible/inventory/gce -  ln -s ~/.gce/gce.ini gce.ini +export GCE_INI_PATH=~/.gce/gce.ini  ``` diff --git a/bin/cluster b/bin/cluster index 486bf2a48..15c99791c 100755 --- a/bin/cluster +++ b/bin/cluster @@ -142,10 +142,14 @@ class Cluster(object):          """          config = ConfigParser.ConfigParser()          if 'gce' == provider: -            config.readfp(open('inventory/gce/hosts/gce.ini')) +            gce_ini_default_path = os.path.join( +                'inventory/gce/hosts/gce.ini') +            gce_ini_path = os.environ.get('GCE_INI_PATH', gce_ini_default_path) +            if os.path.exists(gce_ini_path):  +                config.readfp(open(gce_ini_path)) -            for key in config.options('gce'): -                os.environ[key] = config.get('gce', key) +                for key in config.options('gce'): +                    os.environ[key] = config.get('gce', key)              inventory = '-i inventory/gce/hosts'          elif 'aws' == provider: @@ -164,7 +168,7 @@ class Cluster(object):              boto_configs = [conf for conf in boto_conf_files if conf_exists(conf)]              if len(key_missing) > 0 and len(boto_configs) == 0: -                raise ValueError("PROVIDER aws requires {} environment variable(s). See README_AWS.md".format(missing)) +                raise ValueError("PROVIDER aws requires {} environment variable(s). See README_AWS.md".format(key_missing))          elif 'libvirt' == provider:              inventory = '-i inventory/libvirt/hosts' @@ -193,7 +197,7 @@ class Cluster(object):          if args.option:              for opt in args.option:                  k, v = opt.split('=', 1) -                env['cli_' + k] = v +                env[k] = v          ansible_env = '-e \'{}\''.format(              ' '.join(['%s=%s' % (key, value) for (key, value) in env.items()]) diff --git a/inventory/byo/hosts.example b/inventory/byo/hosts.example index 174bff697..df1bae49f 100644 --- a/inventory/byo/hosts.example +++ b/inventory/byo/hosts.example @@ -70,7 +70,7 @@ openshift_master_identity_providers=[{'name': 'htpasswd_auth', 'login': 'true',  #osm_default_node_selector='region=primary'  # set RPM version for debugging purposes -#openshift_version=-3.0.0.0 +#openshift_pkg_version=-3.0.0.0  # host group for masters  [masters] diff --git a/inventory/gce/hosts/gce.py b/inventory/gce/hosts/gce.py index 3403f735e..bf018f1fe 100755 --- a/inventory/gce/hosts/gce.py +++ b/inventory/gce/hosts/gce.py @@ -120,6 +120,8 @@ class GceInventory(object):              os.path.dirname(os.path.realpath(__file__)), "gce.ini")          gce_ini_path = os.environ.get('GCE_INI_PATH', gce_ini_default_path) +	print "GCE INI PATH :: "+gce_ini_path +          # Create a ConfigParser.          # This provides empty defaults to each key, so that environment          # variable configuration (as opposed to INI configuration) is able @@ -173,6 +175,10 @@ class GceInventory(object):          args[1] = os.environ.get('GCE_PEM_FILE_PATH', args[1])          kwargs['project'] = os.environ.get('GCE_PROJECT', kwargs['project']) +	sys.stderr.write("GCE_EMAIL : "+args[0]+"\n") +	sys.stderr.write("GCE_PEM_FILE_PATH : "+args[1]+"\n") +	sys.stderr.write("GCE_PROJECT : "+kwargs['project']+"\n") +          # Retrieve and return the GCE driver.          gce = get_driver(Provider.GCE)(*args, **kwargs)          gce.connection.user_agent_append( @@ -211,7 +217,8 @@ class GceInventory(object):              'gce_image': inst.image,              'gce_machine_type': inst.size,              'gce_private_ip': inst.private_ips[0], -            'gce_public_ip': inst.public_ips[0], +            # Hosts don't always have a public IP name +            #'gce_public_ip': inst.public_ips[0],              'gce_name': inst.name,              'gce_description': inst.extra['description'],              'gce_status': inst.extra['status'], @@ -219,8 +226,8 @@ class GceInventory(object):              'gce_tags': inst.extra['tags'],              'gce_metadata': md,              'gce_network': net, -            # Hosts don't have a public name, so we add an IP -            'ansible_ssh_host': inst.public_ips[0] +            # Hosts don't always have a public IP name +            #'ansible_ssh_host': inst.public_ips[0]          }      def get_instance(self, instance_name): @@ -284,4 +291,5 @@ class GceInventory(object):  # Run the script +print "Hello world"  GceInventory() diff --git a/inventory/openstack/hosts/nova.py b/inventory/openstack/hosts/nova.py index d5bd8d1ee..3197a57bc 100755 --- a/inventory/openstack/hosts/nova.py +++ b/inventory/openstack/hosts/nova.py @@ -34,7 +34,7 @@ except ImportError:  # executed with no parameters, return the list of  # all groups and hosts -NOVA_CONFIG_FILES = [os.getcwd() + "/nova.ini", +NOVA_CONFIG_FILES = [os.path.join(os.path.dirname(os.path.realpath(__file__)), "nova.ini"),                       os.path.expanduser(os.environ.get('ANSIBLE_CONFIG', "~/nova.ini")),                       "/etc/ansible/nova.ini"] diff --git a/playbooks/aws/openshift-cluster/vars.online.int.yml b/playbooks/aws/openshift-cluster/vars.online.int.yml index bb18e13b0..2e2f25ccd 100644 --- a/playbooks/aws/openshift-cluster/vars.online.int.yml +++ b/playbooks/aws/openshift-cluster/vars.online.int.yml @@ -3,7 +3,7 @@ ec2_image: ami-9101c8fa  ec2_image_name: libra-ops-rhel7*  ec2_region: us-east-1  ec2_keypair: mmcgrath_libra -ec2_master_instance_type: t2.small +ec2_master_instance_type: t2.medium  ec2_master_security_groups: [ 'integration', 'integration-master' ]  ec2_infra_instance_type: c4.large  ec2_infra_security_groups: [ 'integration', 'integration-infra' ] diff --git a/playbooks/aws/openshift-cluster/vars.online.prod.yml b/playbooks/aws/openshift-cluster/vars.online.prod.yml index bbef9cc56..18a53e12e 100644 --- a/playbooks/aws/openshift-cluster/vars.online.prod.yml +++ b/playbooks/aws/openshift-cluster/vars.online.prod.yml @@ -3,7 +3,7 @@ ec2_image: ami-9101c8fa  ec2_image_name: libra-ops-rhel7*  ec2_region: us-east-1  ec2_keypair: mmcgrath_libra -ec2_master_instance_type: t2.small +ec2_master_instance_type: t2.medium  ec2_master_security_groups: [ 'production', 'production-master' ]  ec2_infra_instance_type: c4.large  ec2_infra_security_groups: [ 'production', 'production-infra' ] diff --git a/playbooks/aws/openshift-cluster/vars.online.stage.yml b/playbooks/aws/openshift-cluster/vars.online.stage.yml index 9008a55ba..1f9ac4252 100644 --- a/playbooks/aws/openshift-cluster/vars.online.stage.yml +++ b/playbooks/aws/openshift-cluster/vars.online.stage.yml @@ -3,7 +3,7 @@ ec2_image: ami-9101c8fa  ec2_image_name: libra-ops-rhel7*  ec2_region: us-east-1  ec2_keypair: mmcgrath_libra -ec2_master_instance_type: t2.small +ec2_master_instance_type: t2.medium  ec2_master_security_groups: [ 'stage', 'stage-master' ]  ec2_infra_instance_type: c4.large  ec2_infra_security_groups: [ 'stage', 'stage-infra' ] diff --git a/playbooks/common/openshift-cluster/set_infra_launch_facts_tasks.yml b/playbooks/common/openshift-cluster/set_infra_launch_facts_tasks.yml new file mode 100644 index 000000000..0fd53eb7d --- /dev/null +++ b/playbooks/common/openshift-cluster/set_infra_launch_facts_tasks.yml @@ -0,0 +1,15 @@ +--- +- set_fact: k8s_type=infra +- set_fact: sub_host_type="{{ type }}" +- set_fact: number_infra="{{ count }}" + +- name: Generate infra  instance names(s) +  set_fact: +    scratch_name: "{{ cluster_id }}-{{ k8s_type }}-{{ sub_host_type }}-{{ '%05x' | format(1048576 | random) }}" +  register: infra_names_output +  with_sequence: count={{ number_infra }} + +- set_fact: +    infra_names: "{{ infra_names_output.results | default([]) +                    | oo_collect('ansible_facts') +                    | oo_collect('scratch_name') }}" diff --git a/playbooks/gce/openshift-cluster/config.yml b/playbooks/gce/openshift-cluster/config.yml index fd5dfcc72..7bd3f1a56 100644 --- a/playbooks/gce/openshift-cluster/config.yml +++ b/playbooks/gce/openshift-cluster/config.yml @@ -10,6 +10,8 @@    - set_fact:        g_ssh_user_tmp: "{{ deployment_vars[deployment_type].ssh_user }}"        g_sudo_tmp: "{{ deployment_vars[deployment_type].sudo }}" +      use_sdn: "{{ do_we_use_openshift_sdn }}" +      sdn_plugin: "{{ sdn_network_plugin }}"  - include: ../../common/openshift-cluster/config.yml    vars: @@ -22,3 +24,5 @@      openshift_debug_level: 2      openshift_deployment_type: "{{ deployment_type }}"      openshift_hostname: "{{ gce_private_ip }}" +    openshift_use_openshift_sdn: "{{ hostvars.localhost.use_sdn  }}" +    os_sdn_network_plugin_name: "{{ hostvars.localhost.sdn_plugin }}" diff --git a/playbooks/gce/openshift-cluster/join_node.yml b/playbooks/gce/openshift-cluster/join_node.yml new file mode 100644 index 000000000..613bbb34f --- /dev/null +++ b/playbooks/gce/openshift-cluster/join_node.yml @@ -0,0 +1,64 @@ +--- +- name: Populate oo_hosts_to_update group +  hosts: localhost +  gather_facts: no +  vars_files: +  - vars.yml +  tasks: +  - name: Evaluate oo_hosts_to_update +    add_host: +      name: "{{ node_ip }}" +      groups: oo_hosts_to_update +      ansible_ssh_user: "{{ deployment_vars[deployment_type].ssh_user }}" +      ansible_sudo: "{{ deployment_vars[deployment_type].sudo }}" + +- include: ../../common/openshift-cluster/update_repos_and_packages.yml + +- name: Populate oo_masters_to_config host group +  hosts: localhost +  gather_facts: no +  vars_files: +  - vars.yml +  tasks: +  - name: Evaluate oo_nodes_to_config +    add_host: +      name: "{{ node_ip }}" +      ansible_ssh_user: "{{ deployment_vars[deployment_type].ssh_user }}" +      ansible_sudo: "{{ deployment_vars[deployment_type].sudo }}" +      groups: oo_nodes_to_config + +  - name: Add to preemptible group if needed +    add_host: +      name: "{{ node_ip }}" +      ansible_ssh_user: "{{ deployment_vars[deployment_type].ssh_user }}" +      ansible_sudo: "{{ deployment_vars[deployment_type].sudo }}" +      groups: oo_preemptible_nodes +    when: preemptible is defined and preemptible == "true" +   +  - name: Add to not preemptible group if needed +    add_host: +      name: "{{ node_ip }}" +      ansible_ssh_user: "{{ deployment_vars[deployment_type].ssh_user }}" +      ansible_sudo: "{{ deployment_vars[deployment_type].sudo }}" +      groups: oo_non_preemptible_nodes +    when: preemptible is defined and  preemptible == "false" +   +  - name: Evaluate oo_first_master +    add_host: +      name: "{{ groups['tag_env-host-type-' ~ cluster_id ~ '-openshift-master'][0] }}" +      ansible_ssh_user: "{{ deployment_vars[deployment_type].ssh_user }}" +      ansible_sudo: "{{ deployment_vars[deployment_type].sudo }}" +      groups: oo_first_master +    when: "'tag_env-host-type-{{ cluster_id }}-openshift-master' in groups" + +#- include: config.yml +- include: ../../common/openshift-node/config.yml +  vars: +    openshift_cluster_id: "{{ cluster_id }}" +    openshift_debug_level: 4 +    openshift_deployment_type: "{{ deployment_type }}" +    openshift_hostname: "{{ ansible_default_ipv4.address }}" +    openshift_use_openshift_sdn: true +    os_sdn_network_plugin_name: "redhat/openshift-ovs-subnet" +    osn_cluster_dns_domain: "{{ hostvars[groups.oo_first_master.0].openshift.dns.domain }}" +    osn_cluster_dns_ip: "{{ hostvars[groups.oo_first_master.0].openshift.dns.ip }}" diff --git a/playbooks/gce/openshift-cluster/launch.yml b/playbooks/gce/openshift-cluster/launch.yml index 7a3b80da0..762fa9e8d 100644 --- a/playbooks/gce/openshift-cluster/launch.yml +++ b/playbooks/gce/openshift-cluster/launch.yml @@ -28,7 +28,7 @@        type: "{{ k8s_type }}"        g_sub_host_type: "{{ sub_host_type }}" -  - include: ../../common/openshift-cluster/set_node_launch_facts_tasks.yml +  - include: ../../common/openshift-cluster/set_infra_launch_facts_tasks.yml      vars:        type: "infra"        count: "{{ num_infra }}" diff --git a/playbooks/gce/openshift-cluster/list.yml b/playbooks/gce/openshift-cluster/list.yml index 5ba0f5a48..f5f89baf0 100644 --- a/playbooks/gce/openshift-cluster/list.yml +++ b/playbooks/gce/openshift-cluster/list.yml @@ -14,11 +14,11 @@        groups: oo_list_hosts        ansible_ssh_user: "{{ deployment_vars[deployment_type].ssh_user | default(ansible_ssh_user, true) }}"        ansible_sudo: "{{ deployment_vars[deployment_type].sudo }}" -    with_items: groups[scratch_group] | default([]) | difference(['localhost']) | difference(groups.status_terminated) +    with_items: groups[scratch_group] | default([]) | difference(['localhost']) | difference(groups.status_terminated | default([]))  - name: List instance(s)    hosts: oo_list_hosts    gather_facts: no    tasks:    - debug: -      msg: "public ip:{{ hostvars[inventory_hostname].gce_public_ip }} private ip:{{ hostvars[inventory_hostname].gce_private_ip }}" +      msg: "private ip:{{ hostvars[inventory_hostname].gce_private_ip }}" diff --git a/playbooks/gce/openshift-cluster/tasks/launch_instances.yml b/playbooks/gce/openshift-cluster/tasks/launch_instances.yml index 6307ecc27..f569b2a37 100644 --- a/playbooks/gce/openshift-cluster/tasks/launch_instances.yml +++ b/playbooks/gce/openshift-cluster/tasks/launch_instances.yml @@ -10,18 +10,22 @@      service_account_email: "{{ lookup('env', 'gce_service_account_email_address') }}"      pem_file: "{{ lookup('env', 'gce_service_account_pem_file_path') }}"      project_id: "{{ lookup('env', 'gce_project_id') }}" +    zone: "{{ lookup('env', 'zone') }}" +    network: "{{ lookup('env', 'network') }}" +# unsupported in 1.9.+ +    #service_account_permissions: "datastore,logging-write"      tags:        - created-by-{{ lookup('env', 'LOGNAME') |default(cluster, true) }}        - env-{{ cluster }}        - host-type-{{ type }} -      - sub-host-type-{{ sub_host_type }} +      - sub-host-type-{{ g_sub_host_type }}        - env-host-type-{{ cluster }}-openshift-{{ type }}    register: gce  - name: Add new instances to groups and set variables needed    add_host:      hostname: "{{ item.name }}" -    ansible_ssh_host: "{{ item.public_ip }}" +    ansible_ssh_host: "{{ item.name }}"      ansible_ssh_user: "{{ deployment_vars[deployment_type].ssh_user | default(ansible_ssh_user, true) }}"      ansible_sudo: "{{ deployment_vars[deployment_type].sudo }}"      groups: "{{ item.tags | oo_prepend_strings_in_list('tag_') | join(',') }}" @@ -30,13 +34,13 @@    with_items: gce.instance_data  - name: Wait for ssh -  wait_for: port=22 host={{ item.public_ip }} +  wait_for: port=22 host={{ item.name }}    with_items: gce.instance_data  - name: Wait for user setup    command: "ssh -o StrictHostKeyChecking=no -o PasswordAuthentication=no -o ConnectTimeout=10 -o UserKnownHostsFile=/dev/null {{ hostvars[item.name].ansible_ssh_user }}@{{ item.public_ip }} echo {{ hostvars[item.name].ansible_ssh_user }} user is setup"    register: result    until: result.rc == 0 -  retries: 20 -  delay: 10 +  retries: 30 +  delay: 5    with_items: gce.instance_data diff --git a/playbooks/gce/openshift-cluster/terminate.yml b/playbooks/gce/openshift-cluster/terminate.yml index 098b0df73..f705745d9 100644 --- a/playbooks/gce/openshift-cluster/terminate.yml +++ b/playbooks/gce/openshift-cluster/terminate.yml @@ -1,25 +1,18 @@  ---  - name: Terminate instance(s)    hosts: localhost +  connection: local    gather_facts: no    vars_files:    - vars.yml    tasks: -  - set_fact: scratch_group=tag_env-host-type-{{ cluster_id }}-openshift-node +  - set_fact: scratch_group=tag_env-{{ cluster_id }}    - add_host:        name: "{{ item }}" -      groups: oo_hosts_to_terminate, oo_nodes_to_terminate +      groups: oo_hosts_to_terminate        ansible_ssh_user: "{{ deployment_vars[deployment_type].ssh_user | default(ansible_ssh_user, true) }}"        ansible_sudo: "{{ deployment_vars[deployment_type].sudo }}" -    with_items: groups[scratch_group] | default([]) | difference(['localhost']) | difference(groups.status_terminated) - -  - set_fact: scratch_group=tag_env-host-type-{{ cluster_id }}-openshift-master -  - add_host: -      name: "{{ item }}" -      groups: oo_hosts_to_terminate, oo_masters_to_terminate -      ansible_ssh_user: "{{ deployment_vars[deployment_type].ssh_user | default(ansible_ssh_user, true) }}" -      ansible_sudo: "{{ deployment_vars[deployment_type].sudo }}" -    with_items: groups[scratch_group] | default([]) | difference(['localhost']) | difference(groups.status_terminated) +    with_items: groups[scratch_group] | default([]) | difference(['localhost']) | difference(groups.status_terminated | default([]))  - name: Unsubscribe VMs    hosts: oo_hosts_to_terminate @@ -32,14 +25,34 @@            lookup('oo_option', 'rhel_skip_subscription') | default(rhsub_skip, True) |              default('no', True) | lower in ['no', 'false'] -- include: ../openshift-node/terminate.yml -  vars: -    gce_service_account_email: "{{ lookup('env', 'gce_service_account_email_address') }}" -    gce_pem_file: "{{ lookup('env', 'gce_service_account_pem_file_path') }}" -    gce_project_id: "{{ lookup('env', 'gce_project_id') }}" +- name: Terminate instances(s) +  hosts: localhost +  connection: local +  gather_facts: no +  vars_files: +  - vars.yml +  tasks: + +    - name: Terminate instances that were previously launched +      local_action: +        module: gce +        state: 'absent' +        name: "{{ item }}" +        service_account_email: "{{ lookup('env', 'gce_service_account_email_address') }}" +        pem_file: "{{ lookup('env', 'gce_service_account_pem_file_path') }}" +        project_id: "{{ lookup('env', 'gce_project_id') }}" +        zone: "{{ lookup('env', 'zone') }}" +      with_items: groups['oo_hosts_to_terminate'] | default([]) +      when: item is defined -- include: ../openshift-master/terminate.yml -  vars: -    gce_service_account_email: "{{ lookup('env', 'gce_service_account_email_address') }}" -    gce_pem_file: "{{ lookup('env', 'gce_service_account_pem_file_path') }}" -    gce_project_id: "{{ lookup('env', 'gce_project_id') }}" +#- include: ../openshift-node/terminate.yml +#  vars: +#    gce_service_account_email: "{{ lookup('env', 'gce_service_account_email_address') }}" +#    gce_pem_file: "{{ lookup('env', 'gce_service_account_pem_file_path') }}" +#    gce_project_id: "{{ lookup('env', 'gce_project_id') }}" +# +#- include: ../openshift-master/terminate.yml +#  vars: +#    gce_service_account_email: "{{ lookup('env', 'gce_service_account_email_address') }}" +#    gce_pem_file: "{{ lookup('env', 'gce_service_account_pem_file_path') }}" +#    gce_project_id: "{{ lookup('env', 'gce_project_id') }}" diff --git a/playbooks/gce/openshift-cluster/vars.yml b/playbooks/gce/openshift-cluster/vars.yml index ae33083b9..6de007807 100644 --- a/playbooks/gce/openshift-cluster/vars.yml +++ b/playbooks/gce/openshift-cluster/vars.yml @@ -1,8 +1,11 @@  --- +do_we_use_openshift_sdn: true +sdn_network_plugin: redhat/openshift-ovs-subnet  +# os_sdn_network_plugin_name can be ovssubnet or multitenant, see https://docs.openshift.org/latest/architecture/additional_concepts/sdn.html#ovssubnet-plugin-operation  deployment_vars:    origin: -    image: centos-7 -    ssh_user: +    image: preinstalled-slave-50g-v5 +    ssh_user: root      sudo: yes    online:      image: libra-rhel7 @@ -12,4 +15,3 @@ deployment_vars:      image: rhel-7      ssh_user:      sudo: yes - diff --git a/playbooks/openstack/openshift-cluster/files/heat_stack.yaml b/playbooks/openstack/openshift-cluster/files/heat_stack.yaml index 40e4ab22c..e3e2b6872 100644 --- a/playbooks/openstack/openshift-cluster/files/heat_stack.yaml +++ b/playbooks/openstack/openshift-cluster/files/heat_stack.yaml @@ -88,6 +88,12 @@ parameters:      label: Infra flavor      description: Flavor of the infra node servers +  key_pair: +    type: string +    label: Key name +    description: Name of the key + +  outputs:    master_names: @@ -250,6 +256,14 @@ resources:            port_range_max: 10250            remote_mode: remote_group_id            remote_group_id: { get_resource: master-secgrp } +        - direction: ingress +          protocol: tcp +          port_range_min: 30001  +          port_range_max: 30001 +        - direction: ingress +          protocol: tcp +          port_range_min: 30850  +          port_range_max: 30850    infra-secgrp:      type: OS::Neutron::SecurityGroup @@ -291,7 +305,7 @@ resources:            type:       master            image:      { get_param: master_image }            flavor:     { get_param: master_flavor } -          key_name:   { get_resource: keypair } +          key_name:   { get_param: key_pair }            net:        { get_resource: net }            subnet:     { get_resource: subnet }            secgrp: @@ -323,7 +337,7 @@ resources:            subtype:    compute            image:      { get_param: node_image }            flavor:     { get_param: node_flavor } -          key_name:   { get_resource: keypair } +          key_name:   { get_param: key_pair }            net:        { get_resource: net }            subnet:     { get_resource: subnet }            secgrp: @@ -355,7 +369,7 @@ resources:            subtype:    infra            image:      { get_param: infra_image }            flavor:     { get_param: infra_flavor } -          key_name:   { get_resource: keypair } +          key_name:   { get_param: key_pair }            net:        { get_resource: net }            subnet:     { get_resource: subnet }            secgrp: diff --git a/playbooks/openstack/openshift-cluster/launch.yml b/playbooks/openstack/openshift-cluster/launch.yml index 651aef40b..5f1780476 100644 --- a/playbooks/openstack/openshift-cluster/launch.yml +++ b/playbooks/openstack/openshift-cluster/launch.yml @@ -19,15 +19,32 @@      changed_when: false      failed_when: stack_show_result.rc != 0 and 'Stack not found' not in stack_show_result.stderr -  - set_fact: -      heat_stack_action: 'stack-create' +  - name: Create OpenStack Stack +    command: 'heat stack-create -f {{ openstack_infra_heat_stack }} +             -P key_pair={{ openstack_ssh_keypair }} +             -P cluster_id={{ cluster_id }} +             -P dns_nameservers={{ openstack_network_dns | join(",") }} +             -P cidr={{ openstack_network_cidr }} +             -P ssh_incoming={{ openstack_ssh_access_from }} +             -P num_masters={{ num_masters }} +             -P num_nodes={{ num_nodes }} +             -P num_infra={{ num_infra }} +             -P master_image={{ deployment_vars[deployment_type].image }} +             -P node_image={{ deployment_vars[deployment_type].image }} +             -P infra_image={{ deployment_vars[deployment_type].image }} +             -P master_flavor={{ openstack_flavor["master"] }} +             -P node_flavor={{ openstack_flavor["node"] }} +             -P infra_flavor={{ openstack_flavor["infra"] }} +             -P ssh_public_key="{{ openstack_ssh_public_key }}" +             openshift-ansible-{{ cluster_id }}-stack'      when: stack_show_result.rc == 1    - set_fact:        heat_stack_action: 'stack-update'      when: stack_show_result.rc == 0 -  - name: Create or Update OpenStack Stack -    command: 'heat {{ heat_stack_action }} -f {{ openstack_infra_heat_stack }} +  - name: Update OpenStack Stack +    command: 'heat stack-update -f {{ openstack_infra_heat_stack }} +             -P key_pair={{ openstack_ssh_keypair }}               -P cluster_id={{ cluster_id }}               -P cidr={{ openstack_network_cidr }}               -P dns_nameservers={{ openstack_network_dns | join(",") }} @@ -50,7 +67,7 @@      shell: 'heat stack-show openshift-ansible-{{ cluster_id }}-stack | awk ''$2 == "stack_status" {print $4}'''      register: stack_show_status_result      until: stack_show_status_result.stdout not in ['CREATE_IN_PROGRESS', 'UPDATE_IN_PROGRESS'] -    retries: 30 +    retries: 300      delay: 1      failed_when: stack_show_status_result.stdout not in ['CREATE_COMPLETE', 'UPDATE_COMPLETE'] @@ -119,4 +136,12 @@  - include: update.yml +# Fix icmp reject iptables rules +# It should be solved in openshift-sdn but unfortunately it's not the case +# Mysterious +- name: Configuring Nodes for RBox +  hosts: oo_nodes_to_config +  roles: +    - rbox-node +  - include: list.yml diff --git a/roles/lib_zabbix/library/zbx_item.py b/roles/lib_zabbix/library/zbx_item.py index 388db31b9..11e3c7b2b 100644 --- a/roles/lib_zabbix/library/zbx_item.py +++ b/roles/lib_zabbix/library/zbx_item.py @@ -88,6 +88,23 @@ def get_template_id(zapi, template_name):      return template_ids, app_ids +def get_multiplier(inval): +    ''' Determine the multiplier +    ''' +    if inval == None or inval == '': +        return None, None + +    rval = None +    try: +        rval = int(inval) +    except ValueError: +        pass + +    if rval: +        return rval, True + +    return rval, False +  # The branches are needed for CRUD and error handling  # pylint: disable=too-many-branches  def main(): @@ -106,6 +123,9 @@ def main():              template_name=dict(default=None, type='str'),              zabbix_type=dict(default=2, type='int'),              value_type=dict(default='int', type='str'), +            multiplier=dict(default=None, type='str'), +            description=dict(default=None, type='str'), +            units=dict(default=None, type='str'),              applications=dict(default=None, type='list'),              state=dict(default='present', type='str'),          ), @@ -137,11 +157,15 @@ def main():                                  'templateids': templateid,                                 }) -    # Get +    #******# +    # GET +    #******#      if state == 'list':          module.exit_json(changed=False, results=content['result'], state="list") -    # Delete +    #******# +    # DELETE +    #******#      if state == 'absent':          if not exists(content):              module.exit_json(changed=False, state="absent") @@ -152,12 +176,17 @@ def main():      # Create and Update      if state == 'present': +        formula, use_multiplier = get_multiplier(module.params['multiplier'])          params = {'name': module.params.get('name', module.params['key']),                    'key_': module.params['key'],                    'hostid': templateid[0],                    'type': module.params['zabbix_type'],                    'value_type': get_value_type(module.params['value_type']),                    'applications': get_app_ids(module.params['applications'], app_name_ids), +                  'formula': formula, +                  'multiplier': use_multiplier, +                  'description': module.params['description'], +                  'units': module.params['units'],                   }          # Remove any None valued params diff --git a/roles/lib_zabbix/library/zbx_trigger.py b/roles/lib_zabbix/library/zbx_trigger.py index c384f6fa3..a05de7e68 100644 --- a/roles/lib_zabbix/library/zbx_trigger.py +++ b/roles/lib_zabbix/library/zbx_trigger.py @@ -98,6 +98,7 @@ def main():              zbx_password=dict(default=os.environ.get('ZABBIX_PASSWORD', None), type='str'),              zbx_debug=dict(default=False, type='bool'),              expression=dict(default=None, type='str'), +            name=dict(default=None, type='str'),              description=dict(default=None, type='str'),              dependencies=dict(default=[], type='list'),              priority=dict(default='avg', type='str'), @@ -116,11 +117,11 @@ def main():      zbx_class_name = 'trigger'      idname = "triggerid"      state = module.params['state'] -    description = module.params['description'] +    tname = module.params['name']      content = zapi.get_content(zbx_class_name,                                 'get', -                               {'filter': {'description': description}, +                               {'filter': {'description': tname},                                  'expandExpression': True,                                  'selectDependencies': 'triggerid',                                 }) @@ -138,7 +139,8 @@ def main():      # Create and Update      if state == 'present': -        params = {'description': description, +        params = {'description': tname, +                  'comments':  module.params['description'],                    'expression':  module.params['expression'],                    'dependencies': get_deps(zapi, module.params['dependencies']),                    'priority': get_priority(module.params['priority']), diff --git a/roles/lib_zabbix/tasks/create_template.yml b/roles/lib_zabbix/tasks/create_template.yml index bc9aff997..fd0cdd46f 100644 --- a/roles/lib_zabbix/tasks/create_template.yml +++ b/roles/lib_zabbix/tasks/create_template.yml @@ -30,6 +30,9 @@      key: "{{ item.key }}"      name: "{{ item.name | default(item.key, true) }}"      value_type: "{{ item.value_type | default('int') }}" +    description: "{{ item.description | default('', True) }}" +    multiplier: "{{ item.multiplier | default('', True) }}" +    units: "{{ item.units | default('', True) }}"      template_name: "{{ template.name }}"      applications: "{{ item.applications }}"    with_items: template.zitems @@ -41,8 +44,9 @@      zbx_server: "{{ server }}"      zbx_user: "{{ user }}"      zbx_password: "{{ password }}" -    description: "{{ item.description }}" -    dependencies: "{{ item.dependencies | default([], true) }}" +    name: "{{ item.name }}" +    description: "{{ item.description | default('', True) }}" +    dependencies: "{{ item.dependencies | default([], True) }}"      expression: "{{ item.expression }}"      priority: "{{ item.priority }}"      url: "{{ item.url | default(None, True) }}" diff --git a/roles/openshift_common/vars/main.yml b/roles/openshift_common/vars/main.yml index 817fe0a5f..50816d319 100644 --- a/roles/openshift_common/vars/main.yml +++ b/roles/openshift_common/vars/main.yml @@ -5,5 +5,3 @@  # chains with the public zone (or the zone associated with the correct  # interfaces)  os_firewall_use_firewalld: False - -openshift_data_dir: /var/lib/origin diff --git a/roles/openshift_examples/files/examples/image-streams/image-streams-centos7.json b/roles/openshift_examples/files/examples/image-streams/image-streams-centos7.json index 03affbddf..f213d99ca 100644 --- a/roles/openshift_examples/files/examples/image-streams/image-streams-centos7.json +++ b/roles/openshift_examples/files/examples/image-streams/image-streams-centos7.json @@ -161,19 +161,19 @@          "creationTimestamp": null        },        "spec": { -        "dockerImageRepository": "openshift/wildfly-8-centos", +        "dockerImageRepository": "openshift/wildfly-81-centos7",          "tags": [            {              "name": "latest"            },            { -            "name": "8", +            "name": "8.1",              "annotations": { -              "description": "Build and run Java applications on Wildfly 8", +              "description": "Build and run Java applications on Wildfly 8.1",                "iconClass": "icon-wildfly",                "tags": "builder,wildfly,java", -              "supports":"wildfly:8,jee,java", -              "version": "8" +              "supports":"wildfly:8.1,jee,java", +              "version": "8.1"              },              "from": {                "Kind": "ImageStreamTag", @@ -260,13 +260,13 @@          "creationTimestamp": null        },        "spec": { -        "dockerImageRepository": "openshift/jenkins-16-centos7", +        "dockerImageRepository": "openshift/jenkins-1-centos7",          "tags": [            {              "name": "latest"            },            { -            "name": "1.6", +            "name": "1",              "from": {                "Kind": "ImageStreamTag",                "Name": "latest" diff --git a/roles/openshift_examples/files/examples/image-streams/image-streams-rhel7.json b/roles/openshift_examples/files/examples/image-streams/image-streams-rhel7.json index 0bd885af3..8c125f76a 100644 --- a/roles/openshift_examples/files/examples/image-streams/image-streams-rhel7.json +++ b/roles/openshift_examples/files/examples/image-streams/image-streams-rhel7.json @@ -230,13 +230,13 @@          "creationTimestamp": null        },        "spec": { -        "dockerImageRepository": "registry.access.redhat.com/openshift3/jenkins-16-rhel7", +        "dockerImageRepository": "registry.access.redhat.com/openshift3/jenkins-1-rhel7",          "tags": [            {              "name": "latest"            },            { -            "name": "1.6", +            "name": "1",              "from": {                "Kind": "ImageStreamTag",                "Name": "latest" diff --git a/roles/openshift_examples/files/examples/quickstart-templates/jenkins-ephemeral-template.json b/roles/openshift_examples/files/examples/quickstart-templates/jenkins-ephemeral-template.json index da08ffbd5..14bd032af 100644 --- a/roles/openshift_examples/files/examples/quickstart-templates/jenkins-ephemeral-template.json +++ b/roles/openshift_examples/files/examples/quickstart-templates/jenkins-ephemeral-template.json @@ -88,7 +88,7 @@              "containers": [                {                  "name": "jenkins", -                "image": "openshift/jenkins-16-centos7", +                "image": "${JENKINS_IMAGE}",                  "env": [                    {                      "name": "JENKINS_PASSWORD", @@ -133,6 +133,11 @@        "value": "jenkins"      },      { +      "name": "JENKINS_IMAGE", +      "description": "Jenkins Docker image to use", +      "value": "openshift/jenkins-1-centos7" +    }, +    {        "name": "JENKINS_PASSWORD",        "description": "Password for the Jenkins user",        "generate": "expression", diff --git a/roles/openshift_examples/files/examples/quickstart-templates/jenkins-persistent-template.json b/roles/openshift_examples/files/examples/quickstart-templates/jenkins-persistent-template.json index 33df68c74..fa31de486 100644 --- a/roles/openshift_examples/files/examples/quickstart-templates/jenkins-persistent-template.json +++ b/roles/openshift_examples/files/examples/quickstart-templates/jenkins-persistent-template.json @@ -105,7 +105,7 @@              "containers": [                {                  "name": "jenkins", -                "image": "openshift/jenkins-16-centos7", +                "image": "${JENKINS_IMAGE}",                  "env": [                    {                      "name": "JENKINS_PASSWORD", @@ -156,6 +156,11 @@        "value": "password"      },      { +      "name": "JENKINS_IMAGE", +      "description": "Jenkins Docker image to use", +      "value": "openshift/jenkins-1-centos7" +    }, +    {        "name": "VOLUME_CAPACITY",        "description": "Volume space available for data, e.g. 512Mi, 2Gi",        "value": "512Mi", diff --git a/roles/openshift_facts/library/openshift_facts.py b/roles/openshift_facts/library/openshift_facts.py index 679c3273a..60d1226d4 100755 --- a/roles/openshift_facts/library/openshift_facts.py +++ b/roles/openshift_facts/library/openshift_facts.py @@ -454,6 +454,8 @@ def set_deployment_facts_if_unset(facts):              dict: the facts dict updated with the generated deployment_type              facts      """ +    # Perhaps re-factor this as a map? +    # pylint: disable=too-many-branches      if 'common' in facts:          deployment_type = facts['common']['deployment_type']          if 'service_type' not in facts['common']: @@ -470,6 +472,13 @@ def set_deployment_facts_if_unset(facts):              elif deployment_type == 'origin':                  config_base = '/etc/openshift'              facts['common']['config_base'] = config_base +        if 'data_dir' not in facts['common']: +            data_dir = '/var/lib/origin' +            if deployment_type in ['enterprise', 'online']: +                data_dir = '/var/lib/openshift' +            elif deployment_type == 'origin': +                data_dir = '/var/lib/openshift' +            facts['common']['data_dir'] = data_dir      for role in ('master', 'node'):          if role in facts: diff --git a/roles/openshift_facts/tasks/main.yml b/roles/openshift_facts/tasks/main.yml index fd3d20800..6301d4fc0 100644 --- a/roles/openshift_facts/tasks/main.yml +++ b/roles/openshift_facts/tasks/main.yml @@ -1,5 +1,5 @@  --- -- name: Verify Ansible version is greater than 1.8.0 and not 1.9.0 +- name: Verify Ansible version is greater than 1.8.0 and not 1.9.0 and not 1.9.0.1    assert:      that:      - ansible_version | version_compare('1.8.0', 'ge') diff --git a/roles/openshift_manage_node/tasks/main.yml b/roles/openshift_manage_node/tasks/main.yml index 7c4f45ce6..94d7879b2 100644 --- a/roles/openshift_manage_node/tasks/main.yml +++ b/roles/openshift_manage_node/tasks/main.yml @@ -3,7 +3,7 @@        {{ openshift.common.client_binary }} get node {{ item }}    register: omd_get_node    until: omd_get_node.rc == 0 -  retries: 10 +  retries: 20    delay: 5    with_items: openshift_nodes diff --git a/roles/openshift_master/tasks/main.yml b/roles/openshift_master/tasks/main.yml index b57711b58..3394d13e5 100644 --- a/roles/openshift_master/tasks/main.yml +++ b/roles/openshift_master/tasks/main.yml @@ -8,6 +8,15 @@      - openshift_master_oauth_grant_method in openshift_master_valid_grant_methods    when: openshift_master_oauth_grant_method is defined +- name: Displaying openshift_master_ha +  debug: var=openshift_master_ha + +- name: openshift_master_cluster_password +  debug: var=openshift_master_cluster_password + +- name: openshift.master.cluster_defer_ha +  debug: var=openshift.master.cluster_defer_ha +  - fail:      msg: "openshift_master_cluster_password must be set for multi-master installations"    when: openshift_master_ha | bool and not openshift.master.cluster_defer_ha | bool and openshift_master_cluster_password is not defined @@ -23,7 +32,7 @@        api_port: "{{ openshift_master_api_port | default(None) }}"        api_url: "{{ openshift_master_api_url | default(None) }}"        api_use_ssl: "{{ openshift_master_api_use_ssl | default(None) }}" -      public_api_url: "{{ openshift_master_public_api_url | default(None) }}" +      public_api_url: "{{ openshift_master_public_api_url | default('https://' ~ openshift.common.public_ip ~ ':8443') }}"        console_path: "{{ openshift_master_console_path | default(None) }}"        console_port: "{{ openshift_master_console_port | default(None) }}"        console_url: "{{ openshift_master_console_url | default(None) }}" diff --git a/roles/openshift_master/templates/master.yaml.v1.j2 b/roles/openshift_master/templates/master.yaml.v1.j2 index 7aa4ce9b6..500690523 100644 --- a/roles/openshift_master/templates/master.yaml.v1.j2 +++ b/roles/openshift_master/templates/master.yaml.v1.j2 @@ -46,7 +46,7 @@ etcdConfig:      certFile: etcd.server.crt      clientCA: ca.crt      keyFile: etcd.server.key -  storageDirectory: {{ openshift_data_dir }}/openshift.local.etcd +  storageDirectory: {{ openshift.common.data_dir }}/openshift.local.etcd  {% endif %}  etcdStorageConfig:    kubernetesStoragePrefix: kubernetes.io diff --git a/roles/openshift_master/vars/main.yml b/roles/openshift_master/vars/main.yml index cce118cf1..ecdb4f883 100644 --- a/roles/openshift_master/vars/main.yml +++ b/roles/openshift_master/vars/main.yml @@ -3,7 +3,7 @@ openshift_master_config_dir: "{{ openshift.common.config_base }}/master"  openshift_master_config_file: "{{ openshift_master_config_dir }}/master-config.yaml"  openshift_master_scheduler_conf: "{{ openshift_master_config_dir }}/scheduler.json"  openshift_master_policy: "{{ openshift_master_config_dir }}/policy.json" -openshift_version: "{{ openshift_version | default('') }}" +openshift_version: "{{ openshift_pkg_version | default('') }}"  openshift_master_valid_grant_methods:  - auto diff --git a/roles/openshift_master_ca/vars/main.yml b/roles/openshift_master_ca/vars/main.yml index 9e9561e02..b35339b18 100644 --- a/roles/openshift_master_ca/vars/main.yml +++ b/roles/openshift_master_ca/vars/main.yml @@ -3,4 +3,4 @@ openshift_master_config_dir: "{{ openshift.common.config_base }}/master"  openshift_master_ca_cert: "{{ openshift_master_config_dir }}/ca.crt"  openshift_master_ca_key: "{{ openshift_master_config_dir }}/ca.key"  openshift_master_ca_serial: "{{ openshift_master_config_dir }}/ca.serial.txt" -openshift_version: "{{ openshift_version | default('') }}" +openshift_version: "{{ openshift_pkg_version | default('') }}" diff --git a/roles/openshift_node/tasks/main.yml b/roles/openshift_node/tasks/main.yml index 1986b631e..b32c3a4b3 100644 --- a/roles/openshift_node/tasks/main.yml +++ b/roles/openshift_node/tasks/main.yml @@ -22,7 +22,7 @@        deployment_type: "{{ openshift_deployment_type }}"    - role: node      local_facts: -      labels: "{{ openshift_node_labels | default(none) }}" +      labels: "{{ lookup('oo_option', 'openshift_node_labels') | default( openshift_node_labels | default() ) }}"        annotations: "{{ openshift_node_annotations | default(none) }}"        registry_url: "{{ oreg_url | default(none) }}"        debug_level: "{{ openshift_node_debug_level | default(openshift.common.debug_level) }}" @@ -72,6 +72,12 @@      dest: /etc/sysconfig/docker      regexp: '^OPTIONS=.*$'      line: "OPTIONS='--insecure-registry={{ openshift.node.portal_net }} \ +--insecure-registry=dockerhub.rnd.amadeus.net:5000 \ +--insecure-registry=dockerhub.rnd.amadeus.net:5001 \ +--insecure-registry=dockerhub.rnd.amadeus.net:5002 \ +--add-registry=dockerhub.rnd.amadeus.net:5000 \ +--add-registry=dockerhub.rnd.amadeus.net:5001 \ +--add-registry=dockerhub.rnd.amadeus.net:5002 \  {% if ansible_selinux and ansible_selinux.status == '''enabled''' %}--selinux-enabled{% endif %}'"    when: docker_check.stat.isreg    notify: diff --git a/roles/openshift_node/templates/node.yaml.v1.j2 b/roles/openshift_node/templates/node.yaml.v1.j2 index 0f708fb55..07d80f99b 100644 --- a/roles/openshift_node/templates/node.yaml.v1.j2 +++ b/roles/openshift_node/templates/node.yaml.v1.j2 @@ -25,5 +25,5 @@ servingInfo:    certFile: server.crt    clientCA: ca.crt    keyFile: server.key -volumeDirectory: {{ openshift_data_dir }}/openshift.local.volumes +volumeDirectory: {{ openshift.common.data_dir }}/openshift.local.volumes  {% include 'partials/kubeletArguments.j2' %} diff --git a/roles/openshift_node/vars/main.yml b/roles/openshift_node/vars/main.yml index db2c3e15a..43dc50ca8 100644 --- a/roles/openshift_node/vars/main.yml +++ b/roles/openshift_node/vars/main.yml @@ -1,4 +1,4 @@  ---  openshift_node_config_dir: "{{ openshift.common.config_base }}/node"  openshift_node_config_file: "{{ openshift_node_config_dir }}/node-config.yaml" -openshift_version: "{{ openshift_version | default('') }}" +openshift_version: "{{ openshift_pkg_version | default('') }}" diff --git a/roles/os_zabbix/vars/template_docker.yml b/roles/os_zabbix/vars/template_docker.yml index a1cd3519e..395e054de 100644 --- a/roles/os_zabbix/vars/template_docker.yml +++ b/roles/os_zabbix/vars/template_docker.yml @@ -52,35 +52,35 @@ g_template_docker:      - Docker Storage      value_type: float    ztriggers: -  - description: 'docker.ping failed on {HOST.NAME}' +  - name: 'docker.ping failed on {HOST.NAME}'      expression: '{Template Docker:docker.ping.max(#3)}<1'      url: 'https://github.com/openshift/ops-sop/blob/master/V3/Alerts/check_docker_ping.asciidoc'      priority: high -  - description: 'Docker storage is using LOOPBACK on {HOST.NAME}' +  - name: 'Docker storage is using LOOPBACK on {HOST.NAME}'      expression: '{Template Docker:docker.storage.is_loopback.last()}<>0'      url: 'https://github.com/openshift/ops-sop/blob/master/V3/Alerts/check_docker_loopback.asciidoc'      priority: high -  - description: 'Critically low docker storage data space on {HOST.NAME}' +  - name: 'Critically low docker storage data space on {HOST.NAME}'      expression: '{Template Docker:docker.storage.data.space.percent_available.max(#3)}<5 or {Template Docker:docker.storage.data.space.available.max(#3)}<5' # < 5% or < 5GB      url: 'https://github.com/openshift/ops-sop/blob/master/V3/Alerts/check_docker_storage.asciidoc'      priority: high -  - description: 'Critically low docker storage metadata space on {HOST.NAME}' +  - name: 'Critically low docker storage metadata space on {HOST.NAME}'      expression: '{Template Docker:docker.storage.metadata.space.percent_available.max(#3)}<5 or {Template Docker:docker.storage.metadata.space.available.max(#3)}<0.005' # < 5% or < 5MB      url: 'https://github.com/openshift/ops-sop/blob/master/V3/Alerts/check_docker_storage.asciidoc'      priority: high    # Put triggers that depend on other triggers here (deps must be created first) -  - description: 'Low docker storage data space on {HOST.NAME}' +  - name: 'Low docker storage data space on {HOST.NAME}'      expression: '{Template Docker:docker.storage.data.space.percent_available.max(#3)}<10 or {Template Docker:docker.storage.data.space.available.max(#3)}<10' # < 10% or < 10GB      url: 'https://github.com/openshift/ops-sop/blob/master/V3/Alerts/check_docker_storage.asciidoc'      dependencies:      - 'Critically low docker storage data space on {HOST.NAME}'      priority: average -  - description: 'Low docker storage metadata space on {HOST.NAME}' +  - name: 'Low docker storage metadata space on {HOST.NAME}'      expression: '{Template Docker:docker.storage.metadata.space.percent_available.max(#3)}<10 or {Template Docker:docker.storage.metadata.space.available.max(#3)}<0.01' # < 10% or < 10MB      url: 'https://github.com/openshift/ops-sop/blob/master/V3/Alerts/check_docker_storage.asciidoc'      dependencies: diff --git a/roles/os_zabbix/vars/template_heartbeat.yml b/roles/os_zabbix/vars/template_heartbeat.yml index 798377cd9..8dbe0d0d6 100644 --- a/roles/os_zabbix/vars/template_heartbeat.yml +++ b/roles/os_zabbix/vars/template_heartbeat.yml @@ -7,7 +7,7 @@ g_template_heartbeat:      - Heartbeat      key: heartbeat.ping    ztriggers: -  - description: 'Heartbeat.ping has failed on {HOST.NAME}' +  - name: 'Heartbeat.ping has failed on {HOST.NAME}'      expression: '{Template Heartbeat:heartbeat.ping.nodata(20m)}=1'      priority: avg      url: 'https://github.com/openshift/ops-sop/blob/master/V3/Alerts/check_node_heartbeat.asciidoc' diff --git a/roles/os_zabbix/vars/template_openshift_master.yml b/roles/os_zabbix/vars/template_openshift_master.yml index d2c1365b0..728423ac1 100644 --- a/roles/os_zabbix/vars/template_openshift_master.yml +++ b/roles/os_zabbix/vars/template_openshift_master.yml @@ -7,7 +7,7 @@ g_template_openshift_master:      - Openshift Master      key: create_app    ztriggers: -  - description: 'Application creation has failed on {HOST.NAME}' +  - name: 'Application creation has failed on {HOST.NAME}'      expression: '{Template Openshift Master:create_app.last(#1)}=1 and {Template Openshift Master:create_app.last(#2)}=1'      url: 'https://github.com/openshift/ops-sop/blob/master/V3/Alerts/check_create_app.asciidoc'      priority: avg diff --git a/roles/os_zabbix/vars/template_os_linux.yml b/roles/os_zabbix/vars/template_os_linux.yml index 7c446cd85..3173c79b2 100644 --- a/roles/os_zabbix/vars/template_os_linux.yml +++ b/roles/os_zabbix/vars/template_os_linux.yml @@ -52,106 +52,135 @@ g_template_os_linux:      - Kernel      value_type: float -  - key: mem.freemem +  - key: kernel.all.cpu.nice      applications: -    - Memory +    - Kernel      value_type: int -  - key: kernel.all.cpu.nice +  - key: kernel.all.load.1_minute      applications:      - Kernel -    value_type: int +    value_type: float -  - key: mem.util.bufmem +  - key: kernel.uname.version      applications: -    - Memory -    value_type: int +    - Kernel +    value_type: string -  - key: swap.used +  - key: kernel.all.uptime      applications: -    - Memory +    - Kernel      value_type: int -  - key: kernel.all.load.1_minute +  - key: kernel.all.cpu.user      applications:      - Kernel -    value_type: float +    value_type: int -  - key: kernel.uname.version +  - key: kernel.uname.machine      applications:      - Kernel      value_type: string -  - key: swap.length +  - key: hinv.ncpu      applications: -    - Memory +    - Kernel      value_type: int -  - key: mem.physmem +  - key: kernel.all.cpu.steal      applications: -    - Memory +    - Kernel      value_type: int -  - key: kernel.all.uptime +  - key: kernel.all.pswitch      applications:      - Kernel      value_type: int -  - key: swap.free +  - key: kernel.uname.release      applications: -    - Memory -    value_type: int +    - Kernel +    value_type: string -  - key: mem.util.available +  - key: proc.nprocs      applications: -    - Memory +    - Kernel      value_type: int -  - key: mem.util.used +  # Memory Items +  - key: mem.freemem      applications:      - Memory      value_type: int +    description: "PCP: free system memory metric from /proc/meminfo" +    multiplier: 1024 +    units: B -  - key: kernel.all.cpu.user +  - key: mem.util.bufmem      applications: -    - Kernel +    - Memory      value_type: int +    description: "PCP: Memory allocated for buffer_heads.; I/O buffers metric from /proc/meminfo" +    multiplier: 1024 +    units: B -  - key: kernel.uname.machine +  - key: swap.used      applications: -    - Kernel -    value_type: string +    - Memory +    value_type: int +    description: "PCP: swap used metric from /proc/meminfo" +    multiplier: 1024 +    units: B -  - key: hinv.ncpu +  - key: swap.length      applications: -    - Kernel +    - Memory      value_type: int +    description: "PCP: total swap available metric from /proc/meminfo" +    multiplier: 1024 +    units: B -  - key: mem.util.cached +  - key: mem.physmem      applications:      - Memory      value_type: int +    description: "PCP: The value of this metric corresponds to the \"MemTotal\" field reported by /proc/meminfo. Note that this does not necessarily correspond to actual installed physical memory - there may be areas of the physical address space mapped as ROM in various peripheral devices and the bios may be mirroring certain ROMs in RAM." +    multiplier: 1024 +    units: B -  - key: kernel.all.cpu.steal +  - key: swap.free      applications: -    - Kernel +    - Memory      value_type: int +    description: "PCP: swap free metric from /proc/meminfo" +    multiplier: 1024 +    units: B -  - key: kernel.all.pswitch +  - key: mem.util.available      applications: -    - Kernel +    - Memory      value_type: int +    description: "PCP: The amount of memory that is available for a new workload, without pushing the system into swap. Estimated from MemFree, Active(file), Inactive(file), and SReclaimable, as well as the \"low\" watermarks from /proc/zoneinfo.; available memory from /proc/meminfo" +    multiplier: 1024 +    units: B -  - key: kernel.uname.release +  - key: mem.util.used      applications: -    - Kernel -    value_type: string +    - Memory +    value_type: int +    description: "PCP: Used memory is the difference between mem.physmem and mem.freemem; used memory metric from /proc/meminfo" +    multiplier: 1024 +    units: B -  - key: proc.nprocs +  - key: mem.util.cached      applications: -    - Kernel +    - Memory      value_type: int +    description: "PCP: Memory used by the page cache, including buffered file data.  This is in-memory cache for files read from the disk (the pagecache) but doesn't include SwapCached.; page cache metric from /proc/meminfo" +    multiplier: 1024 +    units: B +  # Disk items    - key: filesys.full.xvda2      applications:      - Disk @@ -163,32 +192,33 @@ g_template_os_linux:      value_type: float    ztriggers: -  - description: 'Filesystem: / has less than 10% free on {HOST.NAME}' +  - name: 'Filesystem: / has less than 10% free on {HOST.NAME}'      expression: '{Template OS Linux:filesys.full.xvda2.last()}>90'      url: 'https://github.com/openshift/ops-sop/blob/master/V3/Alerts/check_filesys_full.asciidoc'      priority: warn -  - description: 'Filesystem: / has less than 5% free on {HOST.NAME}' +  - name: 'Filesystem: / has less than 5% free on {HOST.NAME}'      expression: '{Template OS Linux:filesys.full.xvda2.last()}>95'      url: 'https://github.com/openshift/ops-sop/blob/master/V3/Alerts/check_filesys_full.asciidoc'      priority: high -  - description: 'Filesystem: /var has less than 10% free on {HOST.NAME}' +  - name: 'Filesystem: /var has less than 10% free on {HOST.NAME}'      expression: '{Template OS Linux:filesys.full.xvda3.last()}>90'      url: 'https://github.com/openshift/ops-sop/blob/master/V3/Alerts/check_filesys_full.asciidoc'      priority: warn -  - description: 'Filesystem: /var has less than 5% free on {HOST.NAME}' +  - name: 'Filesystem: /var has less than 5% free on {HOST.NAME}'      expression: '{Template OS Linux:filesys.full.xvda3.last()}>95'      url: 'https://github.com/openshift/ops-sop/blob/master/V3/Alerts/check_filesys_full.asciidoc'      priority: high -  - description: 'Too many TOTAL processes on {HOST.NAME}' +  - name: 'Too many TOTAL processes on {HOST.NAME}'      expression: '{Template OS Linux:proc.nprocs.last()}>5000'      url: 'https://github.com/openshift/ops-sop/blob/master/V3/Alerts/check_proc.asciidoc'      priority: warn -  - description: 'Lack of available memory on {HOST.NAME}' -    expression: '{Template OS Linux:mem.freemem.last()}<3000' +  - name: 'Lack of available memory on {HOST.NAME}' +    expression: '{Template OS Linux:mem.freemem.last()}<30720000'      url: 'https://github.com/openshift/ops-sop/blob/master/V3/Alerts/check_memory.asciidoc'      priority: warn +    description: 'Alert on less than 30MegaBytes.  This is 30 Million Bytes.  30000 KB x 1024' | 
