[tripleo] tripleo-operator-ansible start and request for input
Sagi Shnaidman
sshnaidm at redhat.com
Thu Jan 9 10:20:02 UTC 2020
Thanks for bringing this up, Alex
I was thinking if we can the third option - to have small "single
responsibility" roles for every action. For example:
tripleo-undercloud-install
tripleo-undercloud-backup
tripleo-undercloud-upgrade
And then no one needs to dig into roles to check what actions are
supported, but just "ls roles/". Also these roles usually have nothing in
common but name, and if they are quite isolated, I think it's better to
have them defined separately.
>From cons I can count: more roles and might be some level of duplication in
variables.
For pros it's more readable playbook and clear actions:
- hosts: undercloud
gather_facts: true
collections:
- tripleo.operator
vars:
tripleo_undercloud_debug: true
tasks:
- name: Install undercloud
import_role:
name: undercloud-install
- name: Upgrade undercloud
import_role:
name: undercloud-upgrade
Thanks
On Thu, Jan 9, 2020 at 12:22 AM Alex Schultz <aschultz at redhat.com> wrote:
> [Hello folks,
>
> I've begun the basic start of the tripleo-operator-ansible collection
> work[0]. At the start of this work, I've chosen the undercloud
> installation[1] as the first role to use to figure out how we the end
> user's to consume these roles. I wanted to bring up this initial
> implementation so that we can discuss how folks will include these
> roles. The initial implementation is a wrapper around the
> tripleoclient command as run via openstackclient. This means that the
> 'tripleo-undercloud' role provides implementations for 'openstack
> undercloud backup', 'openstack undercloud install', and 'openstack
> undercloud upgrade'.
>
> In terms of naming conventions, I'm proposing that we would name the
> roles "tripleo-<command-base>" with the last part of the command
> action being an "action". Examples:
>
> "openstack undercloud *" ->
> role: tripleo-undercloud
> action: (backup|install|upgrade)
>
> "openstack undercloud minion *" ->
> role: tripleo-undercloud-minion
> action: (install|upgrade)
>
> "openstack overcloud *" ->
> role: tripleo-overcloud
> action: (deploy|delete|export)
>
> "openstack overcloud node *" ->
> role: tripleo-overcloud-node
> action: (import|introspect|provision|unprovision)
>
> In terms of end user interface, I've got two proposals out in terms of
> possible implementations.
>
> Tasks from method:
> The initial commit propose that we would require the end user to use
> an include_role/tasks_from call to perform the desired action. For
> example:
>
> - hosts: undercloud
> gather_facts: true
> tasks:
> - name: Install undercloud
> collections:
> - tripleo.operator
> import_role:
> name: tripleo-undercloud
> tasks_from: install
> vars:
> tripleo_undercloud_debug: true
>
> Variable switch method:
> I've also proposed an alternative implementation[2] that would use
> include_role but require the end user to set a specific variable to
> change if the role runs 'install', 'backup' or 'upgrade'. With this
> patch the playbook would look something like:
>
> - hosts: undercloud
> gather_facts: true
> tasks:
> - name: Install undercloud
> collections:
> - tripleo.operator
> import_role:
> name: tripleo-undercloud
> vars:
> tripleo_undercloud_action: install
> tripleo_undercloud_debug: true
>
> I would like to solicit feedback on which one of these is the
> preferred integration method when calling these roles. I have two
> patches up in tripleo-quickstart-extras to show how these calls could
> be run. The "Tasks from method" can be viewed here[3]. The "Variable
> switch method" can be viewed here[4]. I can see pros and cons for
> both methods.
>
> My take would be:
>
> Tasks from method:
> Pros:
> - action is a bit more explicit
> - dynamic logic left up to the playbook/consumer.
> - May not have a 'default' action (as main.yml is empty, though it
> could be implemented).
> - tasks_from would be a global implementation across all roles rather
> than having a changing variable name.
>
> Cons:
> - internal task file names must be known by the consumer (though IMHO
> this is no different than the variable name + values in the other
> implementation)
> - role/action inclusions is not dynamic in the role (it can be in the
> playbook)
>
> Variable switch method:
> Pros:
> - inclusion of the role by default runs an install
> - action can be dynamically changed from the calling playbook via an
> ansible var
> - structure of the task files is internal to the role and the user of
> the role need not know the filenames/structure.
>
> Cons:
> - calling playbook is not explicit in that the action can be switched
> dynamically (e.g. intentionally or accidentally because it is dynamic)
> - implementer must know to configure a variable called
> `tripleo_undercloud_action` to switch between install/backup/upgrade
> actions
> - variable names are likely different depending on the role
>
> My personal preference might be to use the "Tasks from method" because
> it would lend itself to the same implementation across all roles and
> the dynamic logic is left to the playbook rather than internally in
> the role. For example, we'd end up with something like:
>
> - hosts: undercloud
> gather_facts: true
> collections:
> - tripleo.operator
> tasks:
> - name: Install undercloud
> import_role:
> name: tripleo-undercloud
> tasks_from: install
> vars:
> tripleo_undercloud_debug: true
> - name: Upload images
> import_role:
> name: tripleo-overcloud-images
> tasks_from: upload
> vars:
> tripleo_overcloud_images_debug: true
> - name: Import nodes
> import_role:
> name: tripleo-overcloud-node
> tasks_from: import
> vars:
> tripleo_overcloud_node_debug: true
> tripleo_overcloud_node_import_file: instack.json
> - name: Introspect nodes
> import_role:
> name: tripleo-overcloud-node
> tasks_from: introspect
> vars:
> tripleo_overcloud_node_debug: true
> tripleo_overcloud_node_introspect_all_manageable: True
> tripleo_overcloud_node_introspect_provide: True
> - name: Overcloud deploy
> import_role:
> name: tripleo-overcloud
> tasks_from: deploy
> vars:
> tripleo_overcloud_debug: true
> tripleo_overcloud_deploy_environment_files:
> - /home/stack/params.yaml
>
> The same general tasks performed via the "Variable switch method"
> would look something like:
>
> - hosts: undercloud
> gather_facts: true
> collections:
> - tripleo.operator
> tasks:
> - name: Install undercloud
> import_role:
> name: tripleo-undercloud
> vars:
> tripleo_undercloud_action: install
> tripleo_undercloud_debug: true
> - name: Upload images
> import_role:
> name: tripleo-overcloud-images
> vars:
> tripleo_overcloud_images_action: upload
> tripleo_overcloud_images_debug: true
> - name: Import nodes
> import_role:
> name: tripleo-overcloud-node
> vars:
> tripleo_overcloud_node_action: import
> tripleo_overcloud_node_debug: true
> tripleo_overcloud_node_import_file: instack.json
> - name: Introspect nodes
> import_role:
> name: tripleo-overcloud-node
> vars:
> tripleo_overcloud_node_action: introspect
> tripleo_overcloud_node_debug: true
> tripleo_overcloud_node_introspect_all_manageable: True
> tripleo_overcloud_node_introspect_provide: True
> - name: Overcloud deploy
> import_role:
> name: tripleo-overcloud
> vars:
> tripleo_overcloud_action: deploy
> tripleo_overcloud_debug: true
> tripleo_overcloud_deploy_environment_files:
> - /home/stack/params.yaml
>
> Thoughts?
>
> Thanks,
> -Alex
>
> [0]
> https://blueprints.launchpad.net/tripleo/+spec/tripleo-operator-ansible
> [1] https://review.opendev.org/#/c/699311/
> [2] https://review.opendev.org/#/c/701628/
> [3] https://review.opendev.org/#/c/701034/
> [4] https://review.opendev.org/#/c/701628/
>
>
>
--
Best regards
Sagi Shnaidman
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-discuss/attachments/20200109/1f850382/attachment-0001.html>
More information about the openstack-discuss
mailing list