]> git.apps.os.sepia.ceph.com Git - ceph-ansible.git/log
ceph-ansible.git
4 years agorgw: multisite refact guits-multisite
Guillaume Abrioux [Thu, 14 Jan 2021 16:52:39 +0000 (17:52 +0100)]
rgw: multisite refact

wip

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agofs2bs: skip migration when a mix of fs and bs is detected v6.0.0alpha5
Guillaume Abrioux [Tue, 15 Dec 2020 16:49:32 +0000 (17:49 +0100)]
fs2bs: skip migration when a mix of fs and bs is detected

Since the default of `osd_objectstore` has changed as of 3.2, some
deployments might have a mix of filestore and bluestore OSDs on a same
node. In some specific cases, there's a possibility that a filestore OSD
shares a journal/db device with a bluestore OSD. We shouldn't try to
redeploy in this context because ceph-volume will complain. (either
because in lvm batch you can't pass partition or about gpt header).
The safest option is to skip the migration on the node when such a mix
is detected or force all osds including those already using bluestore
(option `force_filestore_to_bluestore=True` has to be passed as an extra var).
If all OSDs are using filestore, then they will be migrated to
bluestore.

Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1875777
Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agovalidate: check virtual_ips variable
Guillaume Abrioux [Mon, 11 Jan 2021 09:06:08 +0000 (10:06 +0100)]
validate: check virtual_ips variable

This commit checks the length of `virtual_ips` doesn't exceed the length
of `groups[rgwloadbalancer_group_name]`.
It also ensure this variable is defined when
`groups[rgwloadbalancer_group_name]` contains at least one node.

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agoceph-rgw-loadbalancer: Fix keepalived master selection
Benoît Knecht [Mon, 1 Jun 2020 15:09:18 +0000 (17:09 +0200)]
ceph-rgw-loadbalancer: Fix keepalived master selection

While 2ca33641 fixed a bug in the way the `keepalived.conf.j2` template matched
hostnames to set the VRRP `MASTER`/`BACKUP` states, it also introduced a
regression in the case where `virtual_ips` is a list of more than one IP
address.

The previous behavior would result in each host in the `rgwloadbalancers` group
to be `MASTER` for one of the `virtual_ips`, but the new behavior caused the
first host to be `MASTER` for all the IP address in `virtual_ips`.

This commit restores the original behavior.

Signed-off-by: Benoît Knecht <bknecht@protonmail.ch>
4 years agoswitch2container: fix mon quorum check
Guillaume Abrioux [Fri, 18 Dec 2020 09:33:44 +0000 (10:33 +0100)]
switch2container: fix mon quorum check

The current check makes no sense because it checks any of other monitor
than the one being played (either a previous one already converted or a
next that isn't yet converted) is present on the quorum.

Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1909011
Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agoRevert "tests: temporarily use david's flavor"
Guillaume Abrioux [Fri, 8 Jan 2021 05:28:01 +0000 (06:28 +0100)]
Revert "tests: temporarily use david's flavor"

This reverts commit ed9f0641eee3da314a66f5ed7c2722ac973481d3.

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agoceph-osd: replace sysctl command task by slurp
Dimitri Savineau [Fri, 8 Jan 2021 22:31:03 +0000 (17:31 -0500)]
ceph-osd: replace sysctl command task by slurp

Instead of using the command module for retrieving a sysctl value then
we can use the slurp module and read the value directly from /proc.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agotests: temporarily use david's flavor
Guillaume Abrioux [Thu, 7 Jan 2021 13:17:01 +0000 (14:17 +0100)]
tests: temporarily use david's flavor

master nfs ganesha builds are broken, let's use this flavor instead for
now.

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agodashboard: configure passwords via stdin
Guillaume Abrioux [Thu, 7 Jan 2021 11:40:18 +0000 (12:40 +0100)]
dashboard: configure passwords via stdin

Due to recent changes in ceph, the few dashboard passwors
must be passed via `-i`

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agolibrary: refact ceph_dashboard_user
Guillaume Abrioux [Wed, 6 Jan 2021 13:07:38 +0000 (14:07 +0100)]
library: refact ceph_dashboard_user

refact this module due to recent changes in ceph pacific.
The password must be passed with `-i` option.

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agospec: add module_utils directory v6.0.0alpha4
Dimitri Savineau [Wed, 6 Jan 2021 19:22:04 +0000 (14:22 -0500)]
spec: add module_utils directory

Since d7fd468 the ansible modules are using the common code shared in
the module_utils directory but that one wasn't added to the spec file.

Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1910214
Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agoPath for ceph config missing in crash template
Mike Currin [Thu, 24 Dec 2020 07:25:24 +0000 (09:25 +0200)]
Path for ceph config missing in crash template

The path where ceph.conf is located (/etc/ceph) missing in the Docker container bind mounts, this throws errors

Signed-off-by: Mike Currin <currin@gmail.com>
4 years agorgw: support switching from single-site to multisite
Guillaume Abrioux [Wed, 6 Jan 2021 09:37:12 +0000 (10:37 +0100)]
rgw: support switching from single-site to multisite

When collocating rgw with either a mon, mgr or osd, switching from
single site to a multisite rgw setup failed because of the handlers
triggered between the ansible play of the collocated daemon and the play
of the rgw. Since the multisite changes are not yet applied the handlers
fail.
The idea here is to ensure we run the multisite configuration from the
ceph-handler role before the restart happens, this way it won't complain
because of non existing multisite configuration.

(Note: this is also valid when simply changing a multisite configuration)

Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1888630
Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agolibrary: remove containerized parameter from cv
Dimitri Savineau [Fri, 18 Dec 2020 15:25:54 +0000 (10:25 -0500)]
library: remove containerized parameter from cv

The ceph-volume module relies on environment variables to determine if
the command should be executed within a container or not.
The containerized parameter isn't used anymore and we can remove it.

Fixes: #6153
Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agolibrary: add no_log to {access,secret}_key params
Dimitri Savineau [Tue, 5 Jan 2021 22:24:35 +0000 (17:24 -0500)]
library: add no_log to {access,secret}_key params

This sets the no_log parameter on both the access and the secret
RGW key variables.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agocephadm: remove loop on host add tasks
Dimitri Savineau [Wed, 9 Dec 2020 22:05:25 +0000 (17:05 -0500)]
cephadm: remove loop on host add tasks

Instead of iterate over the host list for adding the node/label to the
host orchestrator configuration then we can do it parallelly.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agolibrary: add missing `target_size_ratio` parameter support in ceph_pool module
Fabien Brachere [Wed, 16 Dec 2020 06:33:36 +0000 (07:33 +0100)]
library: add missing `target_size_ratio` parameter support in ceph_pool module

When creating a new pool, target_size_ratio was ignored by ansible module ceph_pool.py.
target_size_ratio is now used when pg_autoscale_mode is on.
Tests added to library tests.
This adds too the use in the role ceph-rgw.

Signed-off-by: Fabien Brachere <fabien.brachere@celeste.fr>
4 years agoceph-config: fix ceph-volume lvm batch report
Dimitri Savineau [Tue, 15 Dec 2020 18:52:43 +0000 (13:52 -0500)]
ceph-config: fix ceph-volume lvm batch report

Since the major ceph-volume lvm batch refactoring, the report value
is different.
Before the refact, the report was a dict with the OSDs list to be created
under the "osds" key.
After the refact, the report is a list of dict.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agoRevert "mergify: add configuration for 4.2z1 branch"
Guillaume Abrioux [Tue, 15 Dec 2020 16:25:40 +0000 (17:25 +0100)]
Revert "mergify: add configuration for 4.2z1 branch"

This reverts commit fb7dced59869cc8cd5d0f7920f86ea5d836b5ec7.

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agomergify: add configuration for 4.2z1 branch
Guillaume Abrioux [Tue, 15 Dec 2020 08:55:23 +0000 (09:55 +0100)]
mergify: add configuration for 4.2z1 branch

So we get backports against 4.2z1 branch (downstream related) automatically
created by mergify

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agotests: force box removal
Guillaume Abrioux [Mon, 14 Dec 2020 09:03:33 +0000 (10:03 +0100)]
tests: force box removal

This avoids interactive mode for `vagrant box remove`.
This can happen for some reason when there's leftover from previous
deployment (VMs not destroyed as expected)

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agotests: rgw_multisite playbook test refactor
Guillaume Abrioux [Fri, 11 Dec 2020 13:36:00 +0000 (14:36 +0100)]
tests: rgw_multisite playbook test refactor

Currently we create an object from the primary sites but we try to read
that object still from the master which doesn't make sense, we should
try to read it from a secondary site.

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agofix broken ceph-fetch-keys role
Karl-Heinz Preuß [Thu, 26 Nov 2020 09:48:49 +0000 (10:48 +0100)]
fix broken ceph-fetch-keys role

set fetch_directory variable in default/main.yml instead of using the
defaults jinja filter in tasks/main.yml.

Fixes: #6072
Signed-off-by: Karl-Heinz Preuß <karl-heinz.preuss@cms.hu-berlin.de>
4 years agoceph-osd: use global crush_device_class in lvm_volumes v6.0.0alpha3
Seena Fallah [Sat, 5 Dec 2020 21:55:46 +0000 (01:25 +0330)]
ceph-osd: use global crush_device_class in lvm_volumes

Use global crush_device_class variable if it's not set per OSD

Signed-off-by: Seena Fallah <seenafallah@gmail.com>
4 years agoRevert "config: Always use osd_memory_target if set"
Dimitri Savineau [Wed, 9 Dec 2020 19:02:45 +0000 (14:02 -0500)]
Revert "config: Always use osd_memory_target if set"

This reverts commit 4d1fdd2b05d55f8028fb5593d41fa61dbddd7095.

This breaks the backward compatibility with previous osd_memory_target
calculation and we could have a value lower than the minimum value allowed
(896M) which causes some ceph commands to fail (like ceph assimilate-conf).

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agomonitoring: use config_template module for config
Dimitri Savineau [Fri, 11 Dec 2020 18:07:04 +0000 (13:07 -0500)]
monitoring: use config_template module for config

The alertmanager, grafana and prometheus configuration file are
generated with the template module which doesn't allow for using
config overrides.
Instead we could use the config_template plugin action and add a
new variable for overrides (one for each component).

With this patch, one should be able to add configuration to
prometheus with the following:

---
alertmanager_conf_overrides:
  global:
    smtp_smarthost: 'localhost:25'
...

Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1902999
Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agoceph-rgw: add cluster parameter on ceph_ec_profile
Dimitri Savineau [Fri, 11 Dec 2020 19:18:51 +0000 (14:18 -0500)]
ceph-rgw: add cluster parameter on ceph_ec_profile

81233dd introduced a regression with the ceph_ec_profile module call in
the ceph-rgw role due the missing cluster module parameter.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agoceph-facts: fix grafana group conversion
Dimitri Savineau [Mon, 7 Dec 2020 17:11:54 +0000 (12:11 -0500)]
ceph-facts: fix grafana group conversion

The conversion fact task was only executed when the grafana_server_group_name
variable was explicitly set in the user configuration. If an user was using
the default value then the conversion wasn't executed.

This also adds back the default grafana_server_group_name value in case user
was using the default value and to avoid undefined variable error.

Instead of hardcoding the "monitoring" group name then we can reuse the
monitoring_group_name variable.

There's no need to override the monitoring_group_name variable, it's either
using the default value or the one defined by the user.

Finally removing the delegate_to statement on the add_host task since it's
always executed on the ansible controller.

Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1903732
Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agotests: remove pyyaml workaround on OSD nodes
Dimitri Savineau [Wed, 9 Dec 2020 16:08:11 +0000 (11:08 -0500)]
tests: remove pyyaml workaround on OSD nodes

Since [1] has been resolved then we don't need to apply this workaround
anymore.

[1] https://tracker.ceph.com/issues/46759

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agopurge-container-cluster: always prune force
Dimitri Savineau [Wed, 9 Dec 2020 15:38:42 +0000 (10:38 -0500)]
purge-container-cluster: always prune force

Since podman 2.x, there's now a confirmation when running podman
container prune command.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agotests/vagrant: update box version to CentOS 8.3
Dimitri Savineau [Mon, 7 Dec 2020 20:48:38 +0000 (15:48 -0500)]
tests/vagrant: update box version to CentOS 8.3

This updates the CentOS libvirt box version to 8.3

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agorhcs: drop fetch_directory override
Dimitri Savineau [Wed, 2 Dec 2020 22:45:18 +0000 (17:45 -0500)]
rhcs: drop fetch_directory override

Since the fetch_directory variable has been dropped then we don't need
the override in rhcs file.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agoceph-mon: No become during gen mon initial keyring
Jukka Nousiainen [Wed, 2 Dec 2020 09:07:25 +0000 (11:07 +0200)]
ceph-mon: No become during gen mon initial keyring

Since the backing generate_secret() just hands out urandom output,
running as privileged doesn't seem to be required. It's not
desireable to provide sudo in some Ansible runner environments.

Signed-off-by: Jukka Nousiainen <jukka.nousiainen@csc.fi>
4 years agolibrary: add cephadm_adopt module
Dimitri Savineau [Mon, 30 Nov 2020 19:32:54 +0000 (14:32 -0500)]
library: add cephadm_adopt module

This adds cephadm_adopt ansible module for replacing the command module
usage with the cephadm adopt command.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agocommon: do not use pipefail when not needed
Guillaume Abrioux [Mon, 30 Nov 2020 16:08:18 +0000 (17:08 +0100)]
common: do not use pipefail when not needed

Let's discard the ansible lint error 306 and add a "# noqa 306" on tasks
where we don't need `set -o pipefail`

Fixes: #6090
Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agoconsume ceph_volume module when possible
Dimitri Savineau [Wed, 18 Nov 2020 22:20:45 +0000 (17:20 -0500)]
consume ceph_volume module when possible

We should always use the ceph_volume ansible module when possible.
This patch replace the ceph-volume inventory and lvm {list,zap} commands
called via the command/shell modules by the corresponding call with the
ceph_volume module.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agolibrary: add ceph_crush_rule module
Dimitri Savineau [Mon, 9 Nov 2020 17:16:41 +0000 (12:16 -0500)]
library: add ceph_crush_rule module

This adds ceph_crush_rule ansible module for replacing the command
module usage with the ceph osd crush rule commands.
This module can manage both erasure and replicated crush rules.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agoosd: add tag on 'wait for all osd to be up' task
Guillaume Abrioux [Thu, 26 Nov 2020 08:53:04 +0000 (09:53 +0100)]
osd: add tag on 'wait for all osd to be up' task

This allows skipping this task if really desired.
Use it carefully. Use it at your own risk.

Fixes: #6073
Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agoceph-client: use group_by instead of add_host
Dimitri Savineau [Mon, 30 Nov 2020 17:15:48 +0000 (12:15 -0500)]
ceph-client: use group_by instead of add_host

Instead of iterate over all client nodes with a loop sequentially, we
can use the group_by ansible buildin.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agolibrary: add cephadm_bootstrap module
Dimitri Savineau [Fri, 16 Oct 2020 00:42:00 +0000 (20:42 -0400)]
library: add cephadm_bootstrap module

This adds cephadm_bootstrap ansible module for replacing the command module
usage with the cephadm bootstrap command.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agolibrary: add ceph_osd_flag module
Dimitri Savineau [Tue, 3 Nov 2020 21:44:58 +0000 (16:44 -0500)]
library: add ceph_osd_flag module

This adds ceph_osd_flag ansible module for replacing the command module
usage with the ceph osd set/unset commands.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agoiscsigw: remove `--cap-add=all` from `podman run` cmd
Guillaume Abrioux [Mon, 30 Nov 2020 13:55:16 +0000 (14:55 +0100)]
iscsigw: remove `--cap-add=all` from `podman run` cmd

As of podman `2.0.5`, `--cap-add` and `--privileged` are exclusive
options.

```
Nov 30 13:56:30 magna089 podman[171677]: Error: invalid config provided: CapAdd and privileged are mutually exclusive options
```

Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1902149
Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agocontainer: remove `--ignore` from `podman rm` command
Guillaume Abrioux [Mon, 30 Nov 2020 13:52:47 +0000 (14:52 +0100)]
container: remove `--ignore` from `podman rm` command

As of podman 2.0.5, `--ignore` param conflicts with `--storage`.
```
Nov 30 13:53:10 magna089 podman[164443]: Error: --storage conflicts with --volumes, --all, --latest, --ignore and --cidfile
```

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agolibrary: add ceph_osd module
Dimitri Savineau [Fri, 20 Nov 2020 22:50:59 +0000 (17:50 -0500)]
library: add ceph_osd module

This adds ceph_osd ansible module for replacing the command module
usage with the ceph osd destroy/down/in/out/purge/rm commands.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agolibrary: add ceph_mgr_module module
Dimitri Savineau [Mon, 16 Nov 2020 15:11:20 +0000 (10:11 -0500)]
library: add ceph_mgr_module module

This adds ceph_mgr_module ansible module for replacing the command module
usage with the ceph mgr module enable/disable commands.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agotests: use ca_test_common with ceph_volume_simple
Dimitri Savineau [Fri, 27 Nov 2020 20:21:13 +0000 (15:21 -0500)]
tests: use ca_test_common with ceph_volume_simple

To avoid duplicate code.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agoimprove plugins/filter testing
Dimitri Savineau [Fri, 27 Nov 2020 17:25:11 +0000 (12:25 -0500)]
improve plugins/filter testing

- The plugins/filter directory wasn't present in the flake8 workflow
configuration.
- Fix the flake8 syntax.
- Add the directory to PYTHONPATH environment variable for pytest
to avoid importing the plugin filter via sys.
- Add unittest on missing netaddr module import.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agoswitch2containers: do not stop ceph.target in osd play
Guillaume Abrioux [Thu, 26 Nov 2020 09:11:36 +0000 (10:11 +0100)]
switch2containers: do not stop ceph.target in osd play

`ceph.target` should be disabled only. Otherwise, in collocation
scenario you stop other collocated services in the OSD play which isn't
what we want to do. Each daemon has its corresponding play for managing
the transition to container.

Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1901865
Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agoalertmanager/prometheus: fix owner/group
Dimitri Savineau [Wed, 25 Nov 2020 17:00:38 +0000 (12:00 -0500)]
alertmanager/prometheus: fix owner/group

Set the owner/group on alertmanager and prometheus directories and
files to nobody and nogroup (uid and gid 65534) to avoid permission
issues.

Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1901543
Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agotests: add module_utils directory to flake8/pytest
Dimitri Savineau [Thu, 26 Nov 2020 19:59:29 +0000 (14:59 -0500)]
tests: add module_utils directory to flake8/pytest

This adds the module_utils and associated test directory into the flake8
and pytest workflow configuration.
It also moves the ca_common module_utils test file from tests/library to
it's own directory tests/module_utils.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agomodule_utils: refactor
Guillaume Abrioux [Wed, 25 Nov 2020 19:51:09 +0000 (20:51 +0100)]
module_utils: refactor

- update `generate_ceph_cmd()` so `user_key` is automatically built from
`cluster` and `user` params.

- update and add testing.

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agolibrary: use exit_module from ca_common
Guillaume Abrioux [Wed, 25 Nov 2020 09:18:56 +0000 (10:18 +0100)]
library: use exit_module from ca_common

pr #6054 got merged but could have been updated to use `ca_common` for
`exit_module()`

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agorhcs: default to containerized deployment
Dimitri Savineau [Fri, 10 Jul 2020 14:36:02 +0000 (10:36 -0400)]
rhcs: default to containerized deployment

Starting RHCS 5, only containerized deployment is available.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agolibrary: remove useless condition in ceph_volume
Dimitri Savineau [Tue, 24 Nov 2020 20:14:52 +0000 (15:14 -0500)]
library: remove useless condition in ceph_volume

Since the action values are already defined as a list of choices in
ansible then we will never enter into this condition.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agolibrary: add ceph_volume_simple_{activate,scan}
Dimitri Savineau [Tue, 17 Nov 2020 14:22:34 +0000 (09:22 -0500)]
library: add ceph_volume_simple_{activate,scan}

This adds ceph_volume_simple_{activate,scan} ansible modules for replacing
the command module usage with the ceph-volume simple activate/scan commands.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agomon: refact initial keyring generation
Guillaume Abrioux [Tue, 24 Nov 2020 10:33:46 +0000 (11:33 +0100)]
mon: refact initial keyring generation

adding monitor is no longer possible because we generate a new mon
keyring each time the playbook is run.

Fixes: #5864
Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agomon: replace `command` task by `copy`
Guillaume Abrioux [Tue, 24 Nov 2020 11:56:04 +0000 (12:56 +0100)]
mon: replace `command` task by `copy`

We can achieve this task using `copy` module.

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agoceph-iscsi: set the pool name in the config file
Dimitri Savineau [Tue, 24 Nov 2020 17:35:23 +0000 (12:35 -0500)]
ceph-iscsi: set the pool name in the config file

When using a custom pool for iSCSI gateway then we need to set the pool
name in the configuration otherwise the default rbd pool name will be
used.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agotests: update pytest workflow
Guillaume Abrioux [Mon, 23 Nov 2020 08:00:01 +0000 (09:00 +0100)]
tests: update pytest workflow

This sets the `PYTHONPATH` environment variable so we can run pytest
with the recent module refactor (module_utils introduction)

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agolibrary: import ca_test_common in test_ceph_key
Guillaume Abrioux [Mon, 9 Nov 2020 14:57:14 +0000 (15:57 +0100)]
library: import ca_test_common in test_ceph_key

since we added `ca_test_common.py` let's use it in `test_ceph_key.py`

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agorgw: call `ceph_ec_profile` when needed
Guillaume Abrioux [Thu, 5 Nov 2020 13:59:33 +0000 (14:59 +0100)]
rgw: call `ceph_ec_profile` when needed

Let's replace `command` tasks with `ceph_ec_profile` calls

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agolibrary: add ec_profile module
Guillaume Abrioux [Thu, 5 Nov 2020 13:52:47 +0000 (14:52 +0100)]
library: add ec_profile module

This commit adds a new module `ceph_ec_profile` to manage erasure code
profiles.

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agolibrary: add module_utils namespace
Guillaume Abrioux [Thu, 5 Nov 2020 10:05:34 +0000 (11:05 +0100)]
library: add module_utils namespace

This adds a new `module_utils` namespace in order to avoid defining same
functions in each module.

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agotests: use github workflow for nbsp char check
Guillaume Abrioux [Thu, 19 Nov 2020 08:13:28 +0000 (09:13 +0100)]
tests: use github workflow for nbsp char check

Let's use a github workflow instead of travis for this.

With this commit we can get rid of Travis.

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agolint: ignore 302,303,505 errors
Guillaume Abrioux [Wed, 18 Nov 2020 09:13:45 +0000 (10:13 +0100)]
lint: ignore 302,303,505 errors

ignore 302,303 and 505 errors

[302] Using command rather than an argument to e.g. file
[303] Using command rather than module
[505] referenced files must exist

they aren't relevant on these tasks.

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agolint: do not use 'local_action'
Guillaume Abrioux [Fri, 2 Oct 2020 11:43:47 +0000 (13:43 +0200)]
lint: do not use 'local_action'

Fix ansible-lint 504 error:

[504] Do not use 'local_action', use 'delegate_to: localhost'

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agolint: trailing whitespace
Guillaume Abrioux [Fri, 2 Oct 2020 11:40:31 +0000 (13:40 +0200)]
lint: trailing whitespace

Fix ansible-lint 201 error:

[201] Trailing whitespace

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agolint: all tasks should be named
Guillaume Abrioux [Fri, 2 Oct 2020 11:38:04 +0000 (13:38 +0200)]
lint: all tasks should be named

Fix ansible-lint 502 error:

[502] All tasks should be named

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agolint: use shell only when shell functionality is required
Guillaume Abrioux [Fri, 2 Oct 2020 11:35:39 +0000 (13:35 +0200)]
lint: use shell only when shell functionality is required

Fix ansible-lint 305 error:

[305] Use shell only when shell functionality is required

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agolint: don't compare to literal true/false
Guillaume Abrioux [Fri, 2 Oct 2020 11:32:51 +0000 (13:32 +0200)]
lint: don't compare to literal true/false

Fix ansible lint 601 error:

[601] Don't compare to literal True/False

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agolint: variables should have spaces before and after
Guillaume Abrioux [Fri, 2 Oct 2020 11:05:01 +0000 (13:05 +0200)]
lint: variables should have spaces before and after

Fix ansible lint 206 error:

[206] Variables should have spaces before and after: {{ var_name }}

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agolint: commands should not change things
Guillaume Abrioux [Fri, 2 Oct 2020 10:55:53 +0000 (12:55 +0200)]
lint: commands should not change things

Fix ansible lint 301 error:

[301] Commands should not change things if nothing needs doing

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agolint: set pipefail on shell tasks
Guillaume Abrioux [Fri, 2 Oct 2020 09:23:42 +0000 (11:23 +0200)]
lint: set pipefail on shell tasks

Fix ansible lint 306 error:

[306] Shells that use pipes should set the pipefail option

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agotests: use github workflow for ansible-lint
Guillaume Abrioux [Thu, 1 Oct 2020 08:23:22 +0000 (10:23 +0200)]
tests: use github workflow for ansible-lint

let's use github workflow instead of travis.

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agoosd: ensure /var/lib/ceph/osd/{cluster}-{id} is present
Guillaume Abrioux [Tue, 17 Nov 2020 09:45:14 +0000 (10:45 +0100)]
osd: ensure /var/lib/ceph/osd/{cluster}-{id} is present

This commit ensures that the `/var/lib/ceph/osd/{{ cluster }}-{{ osd_id }}` is
present before starting OSDs.

This is needed specificly when redeploying an OSD in case of OS upgrade
failure.
Since ceph data are still present on its devices then the node can be
redeployed, however those directories aren't present since they are
initially created by ceph-volume. We could recreate them manually but
for better user experience we can ask ceph-ansible to recreate them.

NOTE:
this only works for OSDs that were deployed with ceph-volume.
ceph-disk deployed OSDs would have to get those directories recreated
manually.

Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1898486
Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agoceph-facts: fix read osd pool default crush fact
Dimitri Savineau [Wed, 18 Nov 2020 15:43:57 +0000 (10:43 -0500)]
ceph-facts: fix read osd pool default crush fact

We don't need to use run_once on that task when having running monitors
otherwise the read task could be skip and the set task will fail.

The conditional check 'crush_rule_variable.rc == 0' failed. The error
was: error while evaluating conditional (crush_rule_variable.rc == 0):
'dict object' has no attribute 'rc'

Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1898856
Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agotests: use github workflow for pytest
Dimitri Savineau [Fri, 23 Oct 2020 14:24:50 +0000 (10:24 -0400)]
tests: use github workflow for pytest

Move the pytest testing from TravisCI to Github workflow.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agocontainers: modify bindmount option
Guillaume Abrioux [Tue, 17 Nov 2020 03:35:27 +0000 (04:35 +0100)]
containers: modify bindmount option

This commit changes the bind mount option for the mount point
`/var/lib/ceph` in the systemd template for mon and mgr containers. This
is needed in case of collocating mon/mgr with osds using dmcrypt
scenario.
Once mon/mgr got converted to containers, the dmcrypt layer sub mount is
still seen in `/var/lib/ceph`. For some reason it makes the
corresponding devices busy so any other container can't open/close it.
As a result, it prevents osds from starting properly.

Since it only happens on the nodes converted before the OSD play, the idea is
to bind mount `/var/lib/ceph` on mon and mgr with the `rshared` option
so once the sub mount is unmounted, it is propagated inside the
container so it doesn't see that mount point.

Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1896392
Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agoswitch2container: chown symlink in mon/mgr plays
Dimitri Savineau [Mon, 16 Nov 2020 15:31:11 +0000 (10:31 -0500)]
switch2container: chown symlink in mon/mgr plays

fa2bb3a only fix the symlink owner/group issue in the OSD play. If the
OSDs are collocated with other services like MONs and MGRs then the
chown command will fail.

$ find /var/lib/ceph/osd/ceph-0 -not -user 167 -execdir chown 167:167 {} +
chown: cannot dereference './block': Permission denied

Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1896448
Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agocontainer: force rm --storage on ExecStartPre
Guillaume Abrioux [Thu, 12 Nov 2020 10:34:41 +0000 (11:34 +0100)]
container: force rm --storage on ExecStartPre

This is a workaround to avoid error like following:
```
Error: error creating container storage: the container name "ceph-mgr-magna022" is already in use by "4a5f674e113f837a0cc561dea5d2cd55d16ca159a647b7794ab06c4c276ef701"
```

that doesn't seem to be 100% reproducible but it shows up after a
reboot. The only workaround we came up with at the moment is to run
`podman rm --storage <container>` before starting it.

Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1887716
Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agoceph-facts: Fix osd_pool_default_crush_rule fact
Benoît Knecht [Wed, 7 Oct 2020 07:44:29 +0000 (09:44 +0200)]
ceph-facts: Fix osd_pool_default_crush_rule fact

The `osd_pool_default_crush_rule` is set based on `crush_rule_variable`, which
is the output of a `grep` command.

However, two consecutive tasks can set that variable, and if the second task is
skipped, it still overwrites the `crush_rule_variable`, leading the
`osd_pool_default_crush_rule` to be set to `ceph_osd_pool_default_crush_rule`
instead of the output of the first task.

This commit ensures that the fact is set right after the `crush_rule_variable`
is assigned, before it can be overwritten.

Closes #5912

Signed-off-by: Benoît Knecht <bknecht@protonmail.ch>
4 years agoconfig: Always use osd_memory_target if set
Gaudenz Steinlin [Mon, 28 Oct 2019 09:41:26 +0000 (10:41 +0100)]
config: Always use osd_memory_target if set

The osd_memory_target variable was only used if it was higher than the
calculated value based on the number of OSDs. This is changed to always
use the value if it is set in the configuration. This allows this value
to be intentionally set lower so that it does not have to be changed
when more OSDs are added later.

Signed-off-by: Gaudenz Steinlin <gaudenz.steinlin@cloudscale.ch>
4 years agomain: followup on pr 6012
Guillaume Abrioux [Thu, 12 Nov 2020 14:19:42 +0000 (15:19 +0100)]
main: followup on pr 6012

This tag can be set at the play level.

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agoswitch2container: disable ceph-osd enabled-runtime
Dimitri Savineau [Mon, 19 Oct 2020 21:22:31 +0000 (17:22 -0400)]
switch2container: disable ceph-osd enabled-runtime

When deploying the ceph OSD via the packages then the ceph-osd@.service
unit is configured as enabled-runtime.
This means that each ceph-osd service will inherit from that state.
The enabled-runtime systemd state doesn't survive after a reboot.
For non containerized deployment the OSD are still starting after a
reboot because there's the ceph-volume@.service and/or ceph-osd.target
units that are doing the job.

$ systemctl list-unit-files|egrep '^ceph-(volume|osd)'|column -t
ceph-osd@.service     enabled-runtime
ceph-volume@.service  enabled
ceph-osd.target       enabled

When switching to containerized deployment we are stopping/disabling
ceph-osd@XX.servive, ceph-volume and ceph.target and then removing the
systemd unit files.
But the new systemd units for containerized ceph-osd service will still
inherit from ceph-osd@.service unit file.

As a consequence, if an OSD host is rebooting after the playbook execution
then the ceph-osd service won't come back because they aren't enabled at
boot.

This patch also adds a reboot and testinfra run after running the switch
to container playbook.

Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1881288
Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agoAdd ceph_client tag to execute or skip the playbook
Francesco Pantano [Mon, 9 Nov 2020 16:25:17 +0000 (17:25 +0100)]
Add ceph_client tag to execute or skip the playbook

There are some use cases where there's a need to skip the execution
of the ceph-ansible client role even though the client section of the
inventory isn't empty.
This can happen in contexts where the services are colocated or when
a all-in-one deployment is performed.
The purpose of this change is adding a 'ceph_client' tag to avoid
altering the ceph-ansible execution flow but at the same time be able
to include or exclude a set of tasks using this tag.

Signed-off-by: Francesco Pantano <fpantano@redhat.com>
4 years agorolling_update: always run cv simple scan/activate
Dimitri Savineau [Mon, 9 Nov 2020 22:02:17 +0000 (17:02 -0500)]
rolling_update: always run cv simple scan/activate

There's no need to use a condition on the ceph release for the
ceph-volume simple commands.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agodashboard: change dashboard_grafana_api_no_ssl_verify default value
Guillaume Abrioux [Tue, 3 Nov 2020 15:32:17 +0000 (16:32 +0100)]
dashboard: change dashboard_grafana_api_no_ssl_verify default value

This sets the `dashboard_grafana_api_no_ssl_verify` default value
according to the length of `dashboard_crt` and `dashboard_key`.

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agodashboard: enable https by default
Guillaume Abrioux [Tue, 3 Nov 2020 12:49:59 +0000 (13:49 +0100)]
dashboard: enable https by default

see linked bz for details

Closes: https://bugzilla.redhat.com/show_bug.cgi?id=1889426
Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agoosd: Fix number of OSD calculation
Gaudenz Steinlin [Tue, 27 Aug 2019 13:15:35 +0000 (15:15 +0200)]
osd: Fix number of OSD calculation

If some OSDs are to be created and others already exist the calculation
only counted the to be created OSDs. This changes the calculation to
take all OSDs into account.

Signed-off-by: Gaudenz Steinlin <gaudenz.steinlin@cloudscale.ch>
4 years agorolling_update: fix mgr start with mon collocation
Dimitri Savineau [Fri, 30 Oct 2020 14:54:16 +0000 (10:54 -0400)]
rolling_update: fix mgr start with mon collocation

cec994b introduced a regression when a mgr is collocated with a mon.
During the mon upgrade, the mgr service is masked to avoid to be
restarted on packages update.
Then the start mgr task is failing because the service is still masked.
Instead we should unmask it.

Fixes: #5983
Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agoinfrastructure: consume ceph_fs module
Dimitri Savineau [Fri, 23 Oct 2020 15:46:30 +0000 (11:46 -0400)]
infrastructure: consume ceph_fs module

bd611a7 introduced the new ceph_fs module but missed some tasks in
rolling_update and shrink-mds playbooks.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agorolling_update: use ceph health instead of ceph -s
Dimitri Savineau [Mon, 26 Oct 2020 23:35:06 +0000 (19:35 -0400)]
rolling_update: use ceph health instead of ceph -s

The ceph status command returns a lot of information stored in variables
and/or facts which could consume resources for nothing.
When checking the cluster health, we're using the health structure in the
ceph status output.
To optimize this, we could use the ceph health command which contains
the same needed information.

$ ceph status -f json | wc -c
2001
$ ceph health -f json | wc -c
46

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agorgw/rbdmirror: use service dump instead of ceph -s
Dimitri Savineau [Mon, 26 Oct 2020 21:49:47 +0000 (17:49 -0400)]
rgw/rbdmirror: use service dump instead of ceph -s

The ceph status command returns a lot of information stored in variables
and/or facts which could consume resources for nothing.
When checking the rgw/rbdmirror services status, we're only using the
servicmap structure in the ceph status output.
To optimize this, we could use the ceph service dump command which contains
the same needed information.
This command returns less information and is slightly faster than the ceph
status command.

$ ceph status -f json | wc -c
2001
$ ceph service dump -f json | wc -c
1105
$ time ceph status -f json > /dev/null

real 0m0.557s
user 0m0.516s
sys 0m0.040s
$ time ceph service dump -f json > /dev/null

real 0m0.454s
user 0m0.434s
sys 0m0.020s

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agomonitor: use quorum_status instead of ceph status
Dimitri Savineau [Mon, 26 Oct 2020 21:33:45 +0000 (17:33 -0400)]
monitor: use quorum_status instead of ceph status

The ceph status command returns a lot of information stored in variables
and/or facts which could consume resources for nothing.
When checking the quorum status, we're only using the quorum_names
structure in the ceph status output.
To optimize this, we could use the ceph quorum_status command which contains
the same needed information.
This command returns less information.

$ ceph status -f json  | wc -c
2001
$ ceph quorum_status -f json  | wc -c
957
$ time ceph status -f json > /dev/null

real 0m0.577s
user 0m0.538s
sys 0m0.029s
$ time ceph quorum_status -f json > /dev/null

real 0m0.544s
user 0m0.527s
sys 0m0.016s

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agoosds: use pg stat command instead of ceph status
Dimitri Savineau [Mon, 26 Oct 2020 15:23:01 +0000 (11:23 -0400)]
osds: use pg stat command instead of ceph status

The ceph status command returns a lot of information stored in variables
and/or facts which could consume resources for nothing.
When checking the pgs state, we're using the pgmap structure in the ceph
status output.
To optimize this, we could use the ceph pg stat command which contains
the same needed information.
This command returns less information (only about pgs) and is slightly
faster than the ceph status command.

$ ceph status -f json | wc -c
2000
$ ceph pg stat -f json | wc -c
240
$ time ceph status -f json > /dev/null

real 0m0.529s
user 0m0.503s
sys 0m0.024s
$ time ceph pg stat -f json > /dev/null

real 0m0.426s
user 0m0.409s
sys 0m0.016s

The data returned by the ceph status is even bigger when using the
nautilus release.

$ ceph status -f json | wc -c
35005
$ ceph pg stat -f json | wc -c
240

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agoosds: use ceph osd stat instead of ceph status
wangxiaotong [Sat, 24 Oct 2020 13:59:17 +0000 (21:59 +0800)]
osds: use ceph osd stat instead of ceph status

Improve the checked way of the OSD created checking process.
This replaces the ceph status command by the ceph osd stat command.
The osdmap structure isn't needed anymore.

$ ceph status -f json | wc -c
2001
$ ceph osd stat -f json | wc -c
132
$ time ceph status -f json > /dev/null

real    0m0.563s
user    0m0.526s
sys     0m0.036s
$ time ceph osd stat -f json > /dev/null

real 0m0.457s
user 0m0.411s
sys 0m0.045s

Signed-off-by: wangxiaotong <wangxiaotong@fiberhome.com>
4 years agocommon: follow up on #5948
Guillaume Abrioux [Mon, 2 Nov 2020 14:56:28 +0000 (15:56 +0100)]
common: follow up on #5948

In addition to f7e2b2c608eef4bbba47586f1e24d6ade1572758

Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
4 years agoceph-mon: Don't set monitor directory mode recursively
Benoît Knecht [Wed, 28 Oct 2020 15:09:58 +0000 (16:09 +0100)]
ceph-mon: Don't set monitor directory mode recursively

After rolling updates performed with
`infrastructure-playbooks/rolling_updates.yml`, files located in
`/var/lib/ceph/mon/{{ cluster }}-{{ monitor_name }}` had mode 0755 (including
the keyring), making them world-readable.

This commit separates the task that configured permissions recursively on
`/var/lib/ceph/mon/{{ cluster }}-{{ monitor_name }}` into two separate tasks:

1. Set the ownership and mode of the directory itself;
2. Recursively set ownership in the directory, but don't modify the mode.

Signed-off-by: Benoît Knecht <bknecht@protonmail.ch>
4 years agolibrary: remove unused module import
Dimitri Savineau [Tue, 27 Oct 2020 16:14:19 +0000 (12:14 -0400)]
library: remove unused module import

Move the import at the top of the file and remove unused module import.

- E402 module level import not at top of file
- F401 'xxxx' imported but unused

This also removes the '# noqa E402' statement from the code.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>
4 years agokeyring: use ceph_key module for get-or-create cmd
Dimitri Savineau [Fri, 23 Oct 2020 22:03:49 +0000 (18:03 -0400)]
keyring: use ceph_key module for get-or-create cmd

Instead of using ceph auth get-or-create command via the ansible command
module then we can use the ceph_key module.

Signed-off-by: Dimitri Savineau <dsavinea@redhat.com>