diff --git a/filter_plugins/openstack.py b/filter_plugins/openstack.py index 80c4617159..1545bf1e5f 100644 --- a/filter_plugins/openstack.py +++ b/filter_plugins/openstack.py @@ -49,30 +49,52 @@ def image_name_to_id(host_vars, user, password, tenant, auth_url): raise errors.AnsibleFilterError('There is no image of name {0} accessible for tenant {1}'.format(host_vars, tenant)) def network_name_to_id(host_vars, user, password, tenant, auth_url): + """ Accept one name of network or list of names of networks and return the same + structure, but names replaced by ids of the network(s). """ auth = identity.Password(auth_url=auth_url, username=user, password=password, tenant_name=tenant) sess = session.Session(auth=auth) token = auth.get_token(sess) endpoint = auth.get_endpoint(sess, service_name='neutron', service_type='network') neutron = NeutronClient('2.0', endpoint_url=endpoint, token=token) - networks = neutron.list_networks(name=host_vars, fields='id')["networks"] - if networks: - return networks[0]['id'] + result_as_list = isinstance(host_vars, list) + if not result_as_list: + host_vars = [host_vars] + result = [] + for net in host_vars: + networks = neutron.list_networks(name=net, fields='name')["networks"] + if networks: + result += [networks[0]['id']] + else: + raise errors.AnsibleFilterError('There is no network of name {0} accessible for tenant {1}'.format(host_vars, tenant)) + if result_as_list: + return result else: - raise errors.AnsibleFilterError('There is no network of name {0} accessible for tenant {1}'.format(host_vars, tenant)) + return result[0] def network_id_to_name(host_vars, user, password, tenant, auth_url): + """ Accept one id of network or list of ids of networks and return the same + structure, but ids replaced by name of the network(s). """ auth = identity.Password(auth_url=auth_url, username=user, password=password, tenant_name=tenant) sess = session.Session(auth=auth) token = auth.get_token(sess) endpoint = auth.get_endpoint(sess, service_name='neutron', service_type='network') neutron = NeutronClient('2.0', endpoint_url=endpoint, token=token) - networks = neutron.list_networks(id=host_vars, fields='name')["networks"] - if networks: - return networks[0]['name'] + result_as_list = isinstance(host_vars, list) + if not result_as_list: + host_vars = [host_vars] + result = [] + for net in host_vars: + networks = neutron.list_networks(id=net, fields='name')["networks"] + if networks: + result += [networks[0]['name']] + else: + raise errors.AnsibleFilterError('There is no network of id {0} accessible for tenant {1}'.format(host_vars, tenant)) + if result_as_list: + return result else: - raise errors.AnsibleFilterError('There is no network of id {0} accessible for tenant {1}'.format(host_vars, tenant)) + return result[0] class FilterModule (object): def filters(self): diff --git a/inventory/host_vars/copr-be-dev.cloud.fedoraproject.org b/inventory/host_vars/copr-be-dev.cloud.fedoraproject.org index 507a9064cd..0804c7eb1b 100644 --- a/inventory/host_vars/copr-be-dev.cloud.fedoraproject.org +++ b/inventory/host_vars/copr-be-dev.cloud.fedoraproject.org @@ -1,11 +1,12 @@ --- instance_type: m1.xlarge -image: "{{ f20_qcow_id }}" -keypair: fedora-admin-20130801 +#image: "{{ f20_qcow_id }}" +image: "Fedora-Cloud-Base-20141203-21" +keypair: msuchy security_group: web-80-anywhere-persistent,web-443-anywhere-persistent,ssh-anywhere-persistent,default zone: nova hostbase: copr-be-dev- -public_ip: 209.132.184.179 +public_ip: 209.132.184.53 root_auth_users: bkabrda msuchy tradej pingou vgologuz description: copr dispatcher and repo server - dev instance tcp_ports: ['22', '80', '443'] @@ -14,6 +15,9 @@ volumes: [ {volume_id: 'b41e4d70-8f76-44b5-ab24-d91f02ae0afa', device: '/dev/vdc inventory_tenant: persistent # name of machine in OpenStack inventory_instance_name: copr-be-dev +cloud_networks: + - net-id: persistent-net + - net-id: copr-net # Copr vars copr_hostbase: copr-be-dev diff --git a/inventory/inventory b/inventory/inventory index 0a777117db..3ff1d5fc30 100644 --- a/inventory/inventory +++ b/inventory/inventory @@ -190,13 +190,14 @@ rawhide-composer.phx2.fedoraproject.org [composers-stg] composer.stg.phx2.fedoraproject.org -# sign servers don't listen to ssh by default. [sign-bridge] sign-bridge01.phx2.fedoraproject.org # +# sign vault servers don't listen to ssh by default. +# [sign-vault] -#sign-vault03.phx2.fedoraproject.org -sign-vault04.phx2.fedoraproject.org +sign-vault03.phx2.fedoraproject.org +#sign-vault04.phx2.fedoraproject.org [autosign] autosign01.phx2.fedoraproject.org @@ -750,6 +751,10 @@ koschei.cloud.fedoraproject.org # copr keygen instance copr-keygen.cloud.fedoraproject.org +[new-cloud-experiments] +209.132.184.53 +copr-be-dev.cloud.fedoraproject.org + [jenkins-slaves] # EL-6 builder 209.132.184.165 diff --git a/playbooks/groups/copr-backend.yml b/playbooks/groups/copr-backend.yml index 3c0251d877..d2c99ae2e9 100644 --- a/playbooks/groups/copr-backend.yml +++ b/playbooks/groups/copr-backend.yml @@ -1,12 +1,12 @@ - name: check/create instance - hosts: 209.132.184.49 + hosts: copr-be-dev.cloud.fedoraproject.org #hosts: copr-be-dev2.cloud.fedoraproject.org #hosts: copr-back:copr-back-stg #hosts: copr-back-stg user: fedora sudo: True #user: root - gather_facts: True + gather_facts: False # gather_facts: False vars_files: @@ -32,12 +32,12 @@ # - include: "{{ tasks }}/persistent_cloud.yml" # DEBUG OTHER - #- include: "{{ tasks }}/persistent_cloud_new.yml" + - include: "{{ tasks }}/persistent_cloud_new.yml" - include: "{{ tasks }}/growroot_cloud.yml" - debug: msg="root auth users {{root_auth_users}}" - name: cloud basic setup - hosts: 209.132.184.49 + hosts: 209.132.184.53 #hosts: copr-be-dev2.cloud.fedoraproject.org #hosts: copr-back:copr-back-stg #hosts: copr-back-stg @@ -56,7 +56,7 @@ shell: "hostname {{copr_hostbase}}.cloud.fedoraproject.org" - name: provision instance - hosts: 209.132.184.49 + hosts: 209.132.184.53 #hosts: copr-be-dev2.cloud.fedoraproject.org #hosts: copr-back:copr-back-stg #hosts: copr-back-stg diff --git a/roles/taskotron/taskotron-client/templates/taskotron.yaml.j2 b/roles/taskotron/taskotron-client/templates/taskotron.yaml.j2 index a4155321e6..90f1d0037f 100644 --- a/roles/taskotron/taskotron-client/templates/taskotron.yaml.j2 +++ b/roles/taskotron/taskotron-client/templates/taskotron.yaml.j2 @@ -55,8 +55,10 @@ bodhi_server: {{ bodhi_server }} ## URL of ResultsDB server API interface, which can store all test results resultsdb_server: {{ resultsdb_server }} +{% if deployment_type == 'dev' %} ## URL of ExecDB server API interface, which tracks task execution status execdb_server: {{ execdb_server }} +{% endif %} ## URL of taskotron buildmaster taskotron_master: {{ taskotron_master }} diff --git a/tasks/persistent_cloud_new.yml b/tasks/persistent_cloud_new.yml index 52b893fca2..2c7bff5f95 100644 --- a/tasks/persistent_cloud_new.yml +++ b/tasks/persistent_cloud_new.yml @@ -8,7 +8,7 @@ # OS_TENANT_ID # OS_TENANT_NAME -- debug: msg="Auth {{OS_AUTH_URL}} {{OS_TENANT_NAME}} {{OS_USERNAME}}" +#- debug: msg="Auth {{OS_AUTH_URL}} {{OS_TENANT_NAME}} {{OS_USERNAME}}" # To use direct `nova` commands construct _OS_AUTH_OPTS as: # --os-auth-url {{OS_AUTH_URL}} --os-username {{OS_USERNAME}} --os-password {{OS_PASSWORD}} --os-tenant-name {{OS_TENANT_NAME}} --os-tenant-id {{OS_TENANT_ID}} @@ -40,12 +40,12 @@ login_password: "{{ADMIN_PASS}}" login_tenant_name: "{{inventory_tenant}}" name: "{{inventory_instance_name}}" - image_id: "{{ image }}" + image_id: "{{ image|image_name_to_id('admin', ADMIN_PASS, inventory_tenant, os_auth_url) }}" wait_for: 300 - flavor_id: "{{ instance_type|flavor_name_to_id('admin', ADMIN_PASS, inventory_tenant, os_auth_url) }} + flavor_id: "{{ instance_type|flavor_name_to_id('admin', ADMIN_PASS, inventory_tenant, os_auth_url) }}" security_groups: "{{security_group}}" key_name: "{{ keypair }}" - nics: "{{ cloud_networks }}" + nics: "{{ cloud_networks|network_name_to_id('admin', ADMIN_PASS, inventory_tenant, os_auth_url) }}" # floating_ip_pools: "{{ floating_ip_pools }}" floating_ips: - "{{public_ip}}"