Re: patches to review to prepare our ansible scripts for fedora-messaging

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Nov 09, 2019 at 01:38:32AM +0100, karsten@xxxxxxxxxxxxxxxxx wrote:
> Hello,
> 
> 
> There is work in progress to migrate our applications from the current
> message bus 'fedmsg' to the AMPG based 'fedora-messaging'.
> 
> Attached are a couple of patches that prepare our ansible scripts for this.
> 
> Please review those patches and comment, thanks !
> 
>    Karsten
> 

> From 538f112bc17a511b0117ccac31f6c2e5ff0ee97a Mon Sep 17 00:00:00 2001
> From: Karsten Hopp <karsten@xxxxxxxxxx>
> Date: Fri, 8 Nov 2019 22:34:47 +0100
> Subject: [PATCH 14/14] add callbacks for fedora-messaging
> 

The subject here doesn't reflect at all what is in the patch, which is
pure style changes.

> Signed-off-by: Karsten Hopp <karsten@xxxxxxxxxx>
> ---
>  callback_plugins/fedora_messaging_callback.py  | 16 ++++++----------
>  callback_plugins/fedora_messaging_callback2.py | 17 +++++++----------
>  2 files changed, 13 insertions(+), 20 deletions(-)
> 
> diff --git a/callback_plugins/fedora_messaging_callback.py b/callback_plugins/fedora_messaging_callback.py
> index c83785e9b..31e918dde 100644
> --- a/callback_plugins/fedora_messaging_callback.py
> +++ b/callback_plugins/fedora_messaging_callback.py
> @@ -29,10 +29,11 @@ except ImportError:
>      # Ansible v1 compat
>      CallbackBase = object
>  
> +
>  def getlogin():
>      try:
>          user = os.getlogin()
> -    except OSError, e:
> +    except OSError as e:
>          user = pwd.getpwuid(os.geteuid())[0]
>      return user
>  
> @@ -45,11 +46,10 @@ class CallbackModule(CallbackBase):
>      def __init__(self):
>          pass
>  
> -
>      def playbook_on_play_start(self, pattern):
>          # This gets called once for each play.. but we just issue a message once
>          # for the first one.  One per "playbook"
> -        play = getattr(self, 'play', None)
> +        play = getattr(self, "play", None)
>          if play:
>              # figure out where the playbook FILE is
>              path = os.path.abspath(play.playbook.filename)
> @@ -60,7 +60,7 @@ class CallbackModule(CallbackBase):
>  
>              if not self.playbook_path:
>                  msg = Message(
> -                    topic='ansible.playbook.start',
> +                    topic="ansible.playbook.start",
>                      body=dict(
>                          playbook=path,
>                          userid=getlogin(),
> @@ -79,11 +79,7 @@ class CallbackModule(CallbackBase):
>  
>          results = dict([(h, stats.summarize(h)) for h in stats.processed])
>          msg = Message(
> -            topic='ansible.playbook.complete',
> -            body=dict(
> -                playbook=self.playbook_path,
> -                userid=getlogin(),
> -                results=results,
> -            ),
> +            topic="ansible.playbook.complete",
> +            body=dict(playbook=self.playbook_path, userid=getlogin(), results=results),
>          )
>          publish(msg)
> diff --git a/callback_plugins/fedora_messaging_callback2.py b/callback_plugins/fedora_messaging_callback2.py
> index 733e159a7..3d1e357ac 100644
> --- a/callback_plugins/fedora_messaging_callback2.py
> +++ b/callback_plugins/fedora_messaging_callback2.py
> @@ -34,10 +34,11 @@ try:
>  except ImportError:
>      from ansible.utils import md5 as secure_hash
>  
> +
>  def getlogin():
>      try:
>          user = os.getlogin()
> -    except OSError, e:
> +    except OSError as e:
>          user = pwd.getpwuid(os.geteuid())[0]
>      return user
>  
> @@ -45,8 +46,8 @@ def getlogin():
>  class CallbackModule(CallbackBase):
>      """ Publish playbook starts and stops to fedora_messaging. """
>  
> -    CALLBACK_NAME = 'fedora_messaging_callback2'
> -    CALLBACK_TYPE = 'notification'
> +    CALLBACK_NAME = "fedora_messaging_callback2"
> +    CALLBACK_TYPE = "notification"
>      CALLBACK_VERSION = 2.0
>      CALLBACK_NEEDS_WHITELIST = True
>  
> @@ -77,7 +78,7 @@ class CallbackModule(CallbackBase):
>  
>              if not self.playbook_path:
>                  msg = Message(
> -                    topic='ansible.playbook.start',
> +                    topic="ansible.playbook.start",
>                      body=dict(
>                          playbook=path,
>                          userid=getlogin(),
> @@ -96,11 +97,7 @@ class CallbackModule(CallbackBase):
>  
>          results = dict([(h, stats.summarize(h)) for h in stats.processed])
>          msg = Message(
> -            topic='ansible.playbook.complete',
> -            body=dict(
> -                playbook=self.playbook_path,
> -                userid=getlogin(),
> -                results=results,
> -            ),
> +            topic="ansible.playbook.complete",
> +            body=dict(playbook=self.playbook_path, userid=getlogin(), results=results),
>          )
>          publish(msg)
> -- 
> 2.21.0
> 

> From 1563b45d15092cd86a636fd32e90a2f02f952169 Mon Sep 17 00:00:00 2001
> From: Karsten Hopp <karsten@xxxxxxxxxx>
> Date: Fri, 8 Nov 2019 22:34:47 +0100
> Subject: [PATCH 13/14] add callbacks for fedora-messaging
> 
> Signed-off-by: Karsten Hopp <karsten@xxxxxxxxxx>
> ---
>  callback_plugins/fedora_messaging_callback.py |  89 +++++++++++++++
>  .../fedora_messaging_callback2.py             | 106 ++++++++++++++++++
>  2 files changed, 195 insertions(+)
>  create mode 100644 callback_plugins/fedora_messaging_callback.py
>  create mode 100644 callback_plugins/fedora_messaging_callback2.py
> 
> diff --git a/callback_plugins/fedora_messaging_callback.py b/callback_plugins/fedora_messaging_callback.py
> new file mode 100644
> index 000000000..c83785e9b
> --- /dev/null
> +++ b/callback_plugins/fedora_messaging_callback.py
> @@ -0,0 +1,89 @@
> +# (C) 2012, Michael DeHaan, <michael.dehaan@xxxxxxxxx>
> +# based on the log_plays example
> +# skvidal@xxxxxxxxxxxxxxxxx
> +# rbean@xxxxxxxxxx
> +# karsten@xxxxxxxxxx  changes for fedora-messaging
> +
> +# Ansible is free software: you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation, either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# Ansible is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with Ansible.  If not, see <http://www.gnu.org/licenses/>.
> +
> +import os
> +import pwd
> +
> +from fedora_messaging.api import Message, publish
> +from fedora_messaging.exceptions import PublishReturned, ConnectionException
> +
> +try:
> +    from ansible.plugins.callback import CallbackBase
> +except ImportError:
> +    # Ansible v1 compat
> +    CallbackBase = object
> +
> +def getlogin():
> +    try:
> +        user = os.getlogin()
> +    except OSError, e:
> +        user = pwd.getpwuid(os.geteuid())[0]
> +    return user
> +
> +
> +class CallbackModule(CallbackBase):
> +    """ Publish playbook starts and stops to fedora-messaging. """
> +
> +    playbook_path = None
> +
> +    def __init__(self):
> +        pass
> +
> +
> +    def playbook_on_play_start(self, pattern):
> +        # This gets called once for each play.. but we just issue a message once
> +        # for the first one.  One per "playbook"
> +        play = getattr(self, 'play', None)
> +        if play:
> +            # figure out where the playbook FILE is
> +            path = os.path.abspath(play.playbook.filename)
> +
> +            # Bail out early without publishing if we're in --check mode
> +            if play.playbook.check:
> +                return
> +
> +            if not self.playbook_path:
> +                msg = Message(
> +                    topic='ansible.playbook.start',
> +                    body=dict(
> +                        playbook=path,
> +                        userid=getlogin(),
> +                        extra_vars=play.playbook.extra_vars,
> +                        inventory=play.playbook.inventory.host_list,
> +                        playbook_checksum=play.playbook.check,
> +                        check=play.playbook.check,
> +                    ),
> +                )
> +                publish(msg)

You're importing the exceptions, but not actually handling them here.

> +                self.playbook_path = path
> +
> +    def playbook_on_stats(self, stats):
> +        if not self.playbook_path:
> +            return
> +
> +        results = dict([(h, stats.summarize(h)) for h in stats.processed])
> +        msg = Message(
> +            topic='ansible.playbook.complete',
> +            body=dict(
> +                playbook=self.playbook_path,
> +                userid=getlogin(),
> +                results=results,
> +            ),
> +        )
> +        publish(msg)
> diff --git a/callback_plugins/fedora_messaging_callback2.py b/callback_plugins/fedora_messaging_callback2.py
> new file mode 100644
> index 000000000..733e159a7
> --- /dev/null
> +++ b/callback_plugins/fedora_messaging_callback2.py
> @@ -0,0 +1,106 @@
> +# (C) 2012, Michael DeHaan, <michael.dehaan@xxxxxxxxx>
> +# based on the log_plays example
> +# skvidal@xxxxxxxxxxxxxxxxx
> +# rbean@xxxxxxxxxx
> +# karsten@xxxxxxxxxx  changes for fedora-messaging
> +
> +# Ansible is free software: you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation, either version 3 of the License, or
> +# (at your option) any later version.
> +#
> +# Ansible is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with Ansible.  If not, see <http://www.gnu.org/licenses/>.
> +
> +import os
> +import pwd
> +
> +from fedora_messaging.api import Message, publish
> +from fedora_messaging.exceptions import PublishReturned, ConnectionException
> +
> +try:
> +    from ansible.plugins.callback import CallbackBase
> +except ImportError:
> +    # Ansible v1 compat
> +    CallbackBase = object
> +
> +try:
> +    from ansible.utils.hashing import secure_hash
> +except ImportError:
> +    from ansible.utils import md5 as secure_hash
> +
> +def getlogin():
> +    try:
> +        user = os.getlogin()
> +    except OSError, e:
> +        user = pwd.getpwuid(os.geteuid())[0]
> +    return user
> +
> +
> +class CallbackModule(CallbackBase):
> +    """ Publish playbook starts and stops to fedora_messaging. """
> +
> +    CALLBACK_NAME = 'fedora_messaging_callback2'
> +    CALLBACK_TYPE = 'notification'
> +    CALLBACK_VERSION = 2.0
> +    CALLBACK_NEEDS_WHITELIST = True
> +
> +    playbook_path = None
> +
> +    def __init__(self):
> +        self.play = None
> +        self.playbook = None
> +
> +        super(CallbackModule, self).__init__()
> +
> +    def set_play_context(self, play_context):
> +        self.play_context = play_context
> +
> +    def v2_playbook_on_start(self, playbook):
> +        self.playbook = playbook
> +
> +    def v2_playbook_on_play_start(self, play):
> +        # This gets called once for each play.. but we just issue a message once
> +        # for the first one.  One per "playbook"
> +        if self.playbook:
> +            # figure out where the playbook FILE is
> +            path = os.path.abspath(self.playbook._file_name)
> +
> +            # Bail out early without publishing if we're in --check mode
> +            if self.play_context.check_mode:
> +                return
> +
> +            if not self.playbook_path:
> +                msg = Message(
> +                    topic='ansible.playbook.start',
> +                    body=dict(
> +                        playbook=path,
> +                        userid=getlogin(),
> +                        extra_vars=play._variable_manager.extra_vars,
> +                        inventory=play._variable_manager._inventory._sources,
> +                        playbook_checksum=secure_hash(path),
> +                        check=self.play_context.check_mode,
> +                    ),
> +                )
> +                publish(msg)

Same deal here as above with the exceptions.

> +                self.playbook_path = path
> +
> +    def v2_playbook_on_stats(self, stats):
> +        if not self.playbook_path:
> +            return
> +
> +        results = dict([(h, stats.summarize(h)) for h in stats.processed])
> +        msg = Message(
> +            topic='ansible.playbook.complete',
> +            body=dict(
> +                playbook=self.playbook_path,
> +                userid=getlogin(),
> +                results=results,
> +            ),
> +        )
> +        publish(msg)
> -- 
> 2.21.0
> 

I have no comments on the Ansible side of things.
_______________________________________________
infrastructure mailing list -- infrastructure@xxxxxxxxxxxxxxxxxxxxxxx
To unsubscribe send an email to infrastructure-leave@xxxxxxxxxxxxxxxxxxxxxxx
Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: https://lists.fedoraproject.org/archives/list/infrastructure@xxxxxxxxxxxxxxxxxxxxxxx




[Index of Archives]     [Fedora Development]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]

  Powered by Linux