diff --git a/resources/docker/actions/run.yml b/resources/docker/actions/run.yml index 63187d9..549c73b 100644 --- a/resources/docker/actions/run.yml +++ b/resources/docker/actions/run.yml @@ -1,5 +1,5 @@ -- hosts: [resource/docker] +- hosts: [{{ ip }}] sudo: yes tasks: - shell: docker --version diff --git a/resources/docker/meta.yaml b/resources/docker/meta.yaml index 9845a36..1185cd2 100644 --- a/resources/docker/meta.yaml +++ b/resources/docker/meta.yaml @@ -4,9 +4,13 @@ version: 1.0.0 input: ip: + schema: str! + value: ssh_user: + schema: str! + value: ssh_key: + schema: str! + value: -input-types: - -tags: [resource/docker] +tags: [resources/docker] diff --git a/resources/haproxy/actions/remove.yml b/resources/haproxy_config/actions/remove.yml similarity index 100% rename from resources/haproxy/actions/remove.yml rename to resources/haproxy_config/actions/remove.yml diff --git a/resources/haproxy/actions/run.yml b/resources/haproxy_config/actions/run.yml similarity index 100% rename from resources/haproxy/actions/run.yml rename to resources/haproxy_config/actions/run.yml diff --git a/resources/haproxy/meta.yaml b/resources/haproxy_config/meta.yaml similarity index 88% rename from resources/haproxy/meta.yaml rename to resources/haproxy_config/meta.yaml index 7e3125c..46a4623 100644 --- a/resources/haproxy/meta.yaml +++ b/resources/haproxy_config/meta.yaml @@ -1,4 +1,4 @@ -id: haproxy +id: haproxy_config handler: ansible version: 1.0.0 input: @@ -27,4 +27,4 @@ input: schema: str! value: -tags: [resources/haproxy] +tags: [resources/haproxy, resource/haproxy_config] diff --git a/resources/haproxy/templates/haproxy.cfg b/resources/haproxy_config/templates/haproxy.cfg similarity index 100% rename from resources/haproxy/templates/haproxy.cfg rename to resources/haproxy_config/templates/haproxy.cfg diff --git a/resources/haproxy_keystone_config/meta.yaml b/resources/haproxy_keystone_config/meta.yaml index 15bf930..139c18f 100644 --- a/resources/haproxy_keystone_config/meta.yaml +++ b/resources/haproxy_keystone_config/meta.yaml @@ -10,9 +10,9 @@ input: value: 9999 ports: schema: [{value: int}] - value: + value: [] servers: schema: [{value: str}] - value: + value: [] tags: [resources/haproxy, resource/haproxy_keystone_config] diff --git a/resources/haproxy_service/actions/remove.yml b/resources/haproxy_service/actions/remove.yml new file mode 100644 index 0000000..d3c3149 --- /dev/null +++ b/resources/haproxy_service/actions/remove.yml @@ -0,0 +1,6 @@ + +- hosts: [{{ ip }}] + sudo: yes + tasks: + - shell: docker stop {{ name }} + - shell: docker rm {{ name }} diff --git a/resources/haproxy_service/actions/run.yml b/resources/haproxy_service/actions/run.yml new file mode 100644 index 0000000..d052773 --- /dev/null +++ b/resources/haproxy_service/actions/run.yml @@ -0,0 +1,27 @@ + +- hosts: [{{ ip }}] + sudo: yes + tasks: + - docker: + name: {{ name }} + image: {{ image }} + state: running + net: host + {% if ports.value %} + ports: + {% for port in ports.value %} + {% for p in port['value'] %} + - {{ p['value'] }}:{{ p['value'] }} + {% endfor %} + {% endfor %} + {% endif %} + {% if host_binds.value %} + volumes: + # TODO: host_binds might need more work + # Currently it's not that trivial to pass custom src: dst here + # (when a config variable is passed here from other resource) + # so we mount it to the same directory as on host + {% for bind in host_binds.value %} + - {{ bind['value']['src'] }}:{{ bind['value']['dst'] }}:{{ bind['value'].get('mode', 'ro') }} + {% endfor %} + {% endif %} diff --git a/resources/haproxy_service/meta.yaml b/resources/haproxy_service/meta.yaml new file mode 100644 index 0000000..ebd1a79 --- /dev/null +++ b/resources/haproxy_service/meta.yaml @@ -0,0 +1,27 @@ +id: haproxy_service +handler: ansible +version: 1.0.0 +input: + ip: + schema: str! + value: + image: + schema: str! + value: tutum/haproxy + ports: + schema: [{value: [{value: int}]}] + value: [] + host_binds: + schema: [{value: {src: str, dst: str}}] + value: [] + volume_binds: + schema: [{src: str, dst: str}] + value: [] + ssh_user: + schema: str! + value: + ssh_key: + schema: str! + value: + +tags: [resources/haproxy, resource/haproxy_service] diff --git a/resources/keystone_config/meta.yaml b/resources/keystone_config/meta.yaml index b9b177f..4d39737 100644 --- a/resources/keystone_config/meta.yaml +++ b/resources/keystone_config/meta.yaml @@ -8,7 +8,7 @@ input: value: /etc/solar/keystone admin_token: schema: str! - value: + value: admin db_password: schema: str! value: password diff --git a/resources/keystone_role/meta.yaml b/resources/keystone_role/meta.yaml index 1d8fe6c..6f681ab 100644 --- a/resources/keystone_role/meta.yaml +++ b/resources/keystone_role/meta.yaml @@ -1,4 +1,4 @@ -id: keystone_user +id: keystone_role handler: ansible version: 1.0.0 input: @@ -13,13 +13,13 @@ input: value: user_name: schema: str! - value: + value: admin tenant_name: schema: str! value: role_name: schema: str! - value: + value: admin ip: schema: str! value: @@ -30,4 +30,4 @@ input: schema: str! value: -tags: [resource/keystone_user, resources/keystone] +tags: [resource/keystone_role, resources/keystone] diff --git a/resources/keystone_service/actions/run.yml b/resources/keystone_service/actions/run.yml index 305ff7e..9aca8f5 100644 --- a/resources/keystone_service/actions/run.yml +++ b/resources/keystone_service/actions/run.yml @@ -15,3 +15,6 @@ - {{ admin_port }}:35357 volumes: - {{ config_dir }}:/etc/keystone + + - name: wait for keystone + wait_for: host={{ip}} port={{port}} timeout=20 diff --git a/resources/keystone_service/meta.yaml b/resources/keystone_service/meta.yaml index 746c2d6..1afa7f4 100644 --- a/resources/keystone_service/meta.yaml +++ b/resources/keystone_service/meta.yaml @@ -1,4 +1,4 @@ -id: keystone +id: keystone_service handler: ansible version: 1.0.0 input: @@ -10,10 +10,10 @@ input: value: /etc/solar/keystone port: schema: int! - value: + value: 5000 admin_port: schema: int! - value: + value: 35357 ip: schema: str! value: diff --git a/resources/keystone_service_endpoint/meta.yaml b/resources/keystone_service_endpoint/meta.yaml index ce0b740..2639ebd 100644 --- a/resources/keystone_service_endpoint/meta.yaml +++ b/resources/keystone_service_endpoint/meta.yaml @@ -1,4 +1,4 @@ -id: keystone_user +id: keystone_service_endpoint handler: ansible version: 1.0.0 input: @@ -19,19 +19,22 @@ input: value: name: schema: str! - value: + value: keystone type: schema: str! - value: + value: identity description: schema: str! - value: + value: OpenStack Identity Service publicurl: schema: str! - value: + value: http://{{ip}}:{{port}}/v2.0 internalurl: schema: str! - value: + value: http://{{ip}}:{{port}}/v2.0 + adminurl: + schema: str! + value: http://{{ip}}:{{admin_port}}/v2.0 adminurl: schema: str! value: @@ -45,5 +48,4 @@ input: schema: str! value: -tags: [resource/keystone_tenant, resources/keystone] - +tags: [resource/keystone_service_endpoint, resources/keystone] diff --git a/resources/keystone_tenant/meta.yaml b/resources/keystone_tenant/meta.yaml index ac7e6d6..5c1fd43 100644 --- a/resources/keystone_tenant/meta.yaml +++ b/resources/keystone_tenant/meta.yaml @@ -1,4 +1,4 @@ -id: keystone_user +id: keystone_tenant handler: ansible version: 1.0.0 input: @@ -13,7 +13,7 @@ input: value: tenant_name: schema: str! - value: + value: admin ip: schema: str! value: diff --git a/resources/keystone_user/meta.yaml b/resources/keystone_user/meta.yaml index edaa75d..c087576 100644 --- a/resources/keystone_user/meta.yaml +++ b/resources/keystone_user/meta.yaml @@ -13,10 +13,10 @@ input: value: user_name: schema: str! - value: + value: admin user_password: schema: str! - value: + value: admin tenant_name: schema: str! value: diff --git a/resources/mariadb_db/meta.yaml b/resources/mariadb_db/meta.yaml index f95ece6..285aafd 100644 --- a/resources/mariadb_db/meta.yaml +++ b/resources/mariadb_db/meta.yaml @@ -1,4 +1,4 @@ -id: mariadb_table +id: mariadb_db handler: ansible version: 1.0.0 actions: @@ -8,15 +8,15 @@ input: db_name: schema: str! value: + login_user: + schema: str! + value: login_password: schema: str! value: login_port: schema: int! value: - login_user: - schema: str! - value: ip: schema: str! value: @@ -26,5 +26,3 @@ input: ssh_user: schema: str! value: - -tags: [resource/mariadb_table, resources/mariadb] diff --git a/resources/mariadb_keystone_db/actions/remove.yml b/resources/mariadb_keystone_db/actions/remove.yml new file mode 100644 index 0000000..594061a --- /dev/null +++ b/resources/mariadb_keystone_db/actions/remove.yml @@ -0,0 +1,11 @@ +- hosts: [{{ ip }}] + sudo: yes + tasks: + - name: mariadb db + mysql_db: + name: {{db_name}} + state: absent + login_user: root + login_password: {{login_password}} + login_port: {{login_port}} + login_host: 127.0.0.1 diff --git a/resources/mariadb_keystone_db/actions/run.yml b/resources/mariadb_keystone_db/actions/run.yml new file mode 100644 index 0000000..4b315b9 --- /dev/null +++ b/resources/mariadb_keystone_db/actions/run.yml @@ -0,0 +1,11 @@ +- hosts: [{{ ip }}] + sudo: yes + tasks: + - name: mariadb db + mysql_db: + name: {{ db_name }} + state: present + login_user: root + login_password: {{ login_password }} + login_port: {{ login_port }} + login_host: 127.0.0.1 diff --git a/resources/mariadb_keystone_db/meta.yaml b/resources/mariadb_keystone_db/meta.yaml new file mode 100644 index 0000000..a0ef1e7 --- /dev/null +++ b/resources/mariadb_keystone_db/meta.yaml @@ -0,0 +1,30 @@ +id: mariadb_keystone_db +handler: ansible +version: 1.0.0 +actions: + run: run.yml + remove: remove.yml +input: + db_name: + schema: str! + value: keystone_db + login_user: + schema: str! + value: root + login_password: + schema: str! + value: + login_port: + schema: int! + value: + ip: + schema: str! + value: + ssh_key: + schema: str! + value: + ssh_user: + schema: str! + value: + +tags: [resource/mariadb_keystone_db, resources/mariadb] diff --git a/resources/mariadb_keystone_user/actions/remove.yml b/resources/mariadb_keystone_user/actions/remove.yml new file mode 100644 index 0000000..7f6939d --- /dev/null +++ b/resources/mariadb_keystone_user/actions/remove.yml @@ -0,0 +1,11 @@ +- hosts: [{{ ip }}] + sudo: yes + tasks: + - name: mariadb user + mysql_user: + name: {{new_user_name}} + state: absent + login_user: root + login_password: {{login_password}} + login_port: {{login_port}} + login_host: 127.0.0.1 diff --git a/resources/mariadb_keystone_user/actions/run.yml b/resources/mariadb_keystone_user/actions/run.yml new file mode 100644 index 0000000..d600c13 --- /dev/null +++ b/resources/mariadb_keystone_user/actions/run.yml @@ -0,0 +1,14 @@ +- hosts: [{{ ip }}] + sudo: yes + tasks: + - name: mariadb user + mysql_user: + name: {{ new_user_name }} + password: {{ new_user_password }} + priv: {{ db_name }}.*:ALL + host: '%' + state: present + login_user: root + login_password: {{ login_password }} + login_port: {{ login_port }} + login_host: 127.0.0.1 diff --git a/resources/mariadb_keystone_user/meta.yaml b/resources/mariadb_keystone_user/meta.yaml new file mode 100644 index 0000000..73617ca --- /dev/null +++ b/resources/mariadb_keystone_user/meta.yaml @@ -0,0 +1,37 @@ +id: mariadb_keystone_user +handler: ansible +version: 1.0.0 +actions: + run: run.yml + remove: remove.yml +input: + new_user_password: + schema: str! + value: keystone + new_user_name: + schema: str! + value: keystone + db_name: + schema: str! + value: + login_password: + schema: str! + value: + login_port: + schema: int! + value: + login_user: + schema: str! + value: + ip: + schema: str! + value: + ssh_key: + schema: str! + value: + ssh_user: + schema: str! + value: + +tags: [resource/mariadb_keystone_user, resources/mariadb] + diff --git a/resources/mariadb_service/actions/run.yml b/resources/mariadb_service/actions/run.yml index 08fa7cd..da07bf3 100644 --- a/resources/mariadb_service/actions/run.yml +++ b/resources/mariadb_service/actions/run.yml @@ -10,8 +10,9 @@ - {{ port }}:3306 env: MYSQL_ROOT_PASSWORD: {{ root_password }} - - shell: docker exec -t {{ name }} mysql -p{{ root_password }} -uroot -e "select 1" + + - shell: docker exec -t {{ name }} mysql -p{{ root_password }} -uroot -e "SELECT 1" register: result until: result.rc == 0 - retries: 20 + retries: 30 delay: 0.5 diff --git a/resources/mariadb_service/meta.yaml b/resources/mariadb_service/meta.yaml index 1691da8..eb37d04 100644 --- a/resources/mariadb_service/meta.yaml +++ b/resources/mariadb_service/meta.yaml @@ -1,4 +1,4 @@ -id: mariadb +id: mariadb_service handler: ansible version: 1.0.0 input: @@ -21,4 +21,4 @@ input: schema: str! value: -tags: [resource/mariadb, resources/mariadb] +tags: [resource/mariadb_service, resources/mariadb] diff --git a/resources/mariadb_user/meta.yaml b/resources/mariadb_user/meta.yaml index adae4d7..b46d6e2 100644 --- a/resources/mariadb_user/meta.yaml +++ b/resources/mariadb_user/meta.yaml @@ -32,6 +32,3 @@ input: ssh_user: schema: str! value: - -tags: [resource/mariadb_user, resources/mariadb] - diff --git a/resources/rabbitmq_service/actions/run.yml b/resources/rabbitmq_service/actions/run.yml index 66d36c7..9e7e845 100644 --- a/resources/rabbitmq_service/actions/run.yml +++ b/resources/rabbitmq_service/actions/run.yml @@ -15,7 +15,7 @@ - {{ management_port }}:15672 env: RABBITMQ_NODENAME: {{container_name}} - - shell: docker exec -t {{ name }} rabbitmqctl list_users + - shell: docker exec -t {{ container_name }} rabbitmqctl list_users register: result until: result.rc == 0 retries: 20 diff --git a/resources/rabbitmq_service/meta.yaml b/resources/rabbitmq_service/meta.yaml index 50dc234..c97dd84 100644 --- a/resources/rabbitmq_service/meta.yaml +++ b/resources/rabbitmq_service/meta.yaml @@ -7,13 +7,13 @@ input: value: rabbitmq:3-management container_name: schema: str! - value: + value: rabbitmq_service management_port: schema: str! - value: + value: 15672 port: schema: str! - value: + value: 5672 ip: schema: str! value: @@ -23,3 +23,5 @@ input: ssh_user: schema: str! value: + +tags: [resources/rabbitmq, resource/rabbitmq_service] diff --git a/resources/rabbitmq_user/meta.yaml b/resources/rabbitmq_user/meta.yaml index 7a6b659..70a6f88 100644 --- a/resources/rabbitmq_user/meta.yaml +++ b/resources/rabbitmq_user/meta.yaml @@ -1,4 +1,4 @@ -id: keystone_user +id: rabbitmq_user handler: ansible version: 1.0.0 input: @@ -7,10 +7,10 @@ input: value: user_name: schema: str! - value: + value: openstack password: schema: str! - value: + value: openstack_password vhost_name: schema: str! value: @@ -23,3 +23,5 @@ input: ssh_user: schema: str! value: + +tags: [resources/rabbitmq, resource/rabbitmq_user] diff --git a/resources/rabbitmq_vhost/meta.yaml b/resources/rabbitmq_vhost/meta.yaml index f8ecf4f..c1a5689 100644 --- a/resources/rabbitmq_vhost/meta.yaml +++ b/resources/rabbitmq_vhost/meta.yaml @@ -7,7 +7,7 @@ input: value: vhost_name: schema: str! - value: + value: openstack ip: schema: str! value: @@ -18,4 +18,4 @@ input: schema: str! value: -tags: [resource/rabbitmq] +tags: [resources/rabbitmq, resource/rabbitmq_vhost] diff --git a/templates/profile.yml b/templates/profile.yml index 91b1343..6e30836 100644 --- a/templates/profile.yml +++ b/templates/profile.yml @@ -10,33 +10,103 @@ extensions: tags: {{tags}} connections: - - for_resources: [resource/keystone_config] - filter_resources: [resource/mariadb] + # keystone + - for_resources: [resource/mariadb_service] + filter_resources: [resource/mariadb_keystone_db, resource/mariadb_keystone_user] + mapping: + root_password: login_password + port: login_port + + - for_resources: [resource/mariadb_keystone_db] + filter_resources: [resource/mariadb_keystone_user] + mapping: + db_name: db_name + + - for_resources: [resource/mariadb_service] + filter_resources: [resource/keystone_config] mapping: ip: db_host - root_password: db_password port: db_port - - for_resources: [resource/keystone_service] - filter_resources: [resources/haproxy] + - for_resources: [resource/mariadb_keystone_user] + filter_resources: [resource/keystone_config] mapping: - servers: ip - ports: admin_port + db_name: db_name + new_user_name: db_user + new_user_password: db_password -# NOTE(dshulyak) it is mandatory for some profiles to user graph based -# api to provide order of execution for different events -run: - - containers.actions.clean_list - - docker.actions.run - - mariadb.actions.run - - mariadb.actions.wait - - mariadb.actions.users - - keystone.actions.run - - haproxy.actions.run - - containers.actions.ensure + - for_resources: [resource/keystone_config] + filter_resources: [resource/keystone_service] + mapping: + config_dir: config_dir -remove: - - haproxy.actions.remove - - keystone.actions.remove - - mariadb.actions.remove - - docker.actions.remove + # haproxy + - for_resources: [resource/keystone_service] + filter_resources: [resource/haproxy_keystone_config] + mapping: + ip: servers + port: ports + + - for_resources: [resource/haproxy_keystone_config] + filter_resources: [resource/haproxy_config] + mapping: + listen_port: listen_ports + name: configs_names + ports: configs_ports + servers: configs + + - for_resources: [resource/haproxy_config] + filter_resources: [resource/haproxy_service] + mapping: + listen_ports: ports + config_dir: host_binds + + # keystone data + - for_resources: [resource/keystone_config] + filter_resources: [resource/keystone_tenant] + mapping: {} + + - for_resources: [resource/keystone_service] + filter_resources: [resource/keystone_tenant] + mapping: + admin_port: keystone_port + ip: keystone_host + + - for_resources: [resource/keystone_tenant] + filter_resources: [resource/keystone_user] + mapping: {} + + - for_resources: [resource/keystone_user] + filter_resources: [resource/keystone_role] + mapping: {} + + - for_resources: [resource/keystone_service] + filter_resources: [resource/keystone_service_endpoint] + mapping: + admin_port: admin_port + ip: keystone_host + port: port + + - for_resources: [resource/keystone_config] + filter_resources: [resource/keystone_service_endpoint] + mapping: + admin_token: admin_token + + - for_resources: [resource/keystone_service] + filter_resources: [resource/keystone_service_endpoint] + mapping: + admin_port: keystone_port + + # rabbitmq + - for_resources: [resource/rabbitmq_service] + filter_resources: [resource/rabbitmq_vhost] + mapping: {} + + - for_resources: [resource/rabbitmq_service] + filter_resources: [resource/rabbitmq_user] + mapping: {} + + - for_resources: [resource/rabbitmq_vhost] + filter_resources: [resource/rabbitmq_user] + mapping: + vhost_name: vhost_name