foreman-rake db:migrate fails.
I am not sure when I started to see this. It could have started with 1.19 or 1.20.0. I was running 1.20.1 and am trying to get to 1.21.2 but I need to get to 1.20.2 first.
I was also playing with /etc/foreman-installer/custom-hiera.yaml to try and make security happy with turning off TLSv1 and TLSv1.1
# Apache
apache::mod::ssl::ssl_protocol: [ 'ALL' , '-SSLv2' , '-SSLv3' , '-TLSv1' , '-TLSv1.1' , '+TLSv1.2' ]
I would like foreman-rake db:migrate to run and return 0
# foreman-rake db:migrate --trace
** Invoke db:migrate (first_time)
** Invoke db:load_config (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:load_config
** Invoke plugin:refresh_migrations (first_time)
** Invoke environment
** Execute plugin:refresh_migrations
** Execute db:migrate
== 20141107091416 CreateDiscoveryRules: migrating =============================
-- adapter_name()
-> 0.0000s
-- adapter_name()
-> 0.0000s
-- adapter_name()
-> 0.0000s
-- create_table(:discovery_rules, {:id=>:integer})
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:
PG::DuplicateTable: ERROR: relation "discovery_rules" already exists
: CREATE TABLE "discovery_rules" ("id" serial NOT NULL PRIMARY KEY, "name" character varying, "search" character varying, "hostgroup_id" integer NOT NULL, "hostname" character varying DEFAULT '', "max_count" integer DEFAULT 0, "priority" integer DEFAULT 0, "enabled" boolean DEFAULT TRUE NOT NULL, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)
/opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:75:in `async_exec'
/opt/theforeman/tfm-ror52/root/usr/share/gems/gems/activerecord-5.2.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:75:in `block (2 levels) in execute'
The installer seems to run okay and it seems to be working okay.
# foreman-installer --foreman-configure-epel-repo false
Installing Done [100%] [........................................]
Success!
# rpm -qa|grep foreman
foreman-selinux-1.20.2-1.el7.noarch
foreman-release-1.20.2-1.el7.noarch
tfm-rubygem-hammer_cli_foreman-0.15.1-1.el7.noarch
foreman-postgresql-1.20.2-1.el7.noarch
foreman-release-scl-7-2.el7.noarch
foreman-debug-1.20.2-1.el7.noarch
tfm-rubygem-foreman_discovery-14.0.1-1.fm1_20.el7.noarch
foreman-proxy-1.20.2-1.el7.noarch
foreman-installer-1.20.2-1.el7.noarch
foreman-1.20.2-1.el7.noarch
foreman-cli-1.20.2-1.el7.noarch
tfm-rubygem-foreman_bootdisk-14.0.0-1.fm1_20.el7.noarch
tfm-rubygem-foreman_templates-6.0.3-2.fm1_20.el7.noarch
I tried to run foreman-rake db:migrate and it still doesn’t like the discovery_rules table.
I decided to try and look at discovery_rules and it looks like it is empty.
foreman=# select * from discovery_rules;
id | name | search | hostgroup_id | hostname | max_count | priority | enabled | created_at | updated_at
----+------+--------+--------------+----------+-----------+----------+---------+------------+------------
(0 rows)
Maybe I could just remove it?
I dumped the data base and removed the table and it just gives me another error.
PG::DuplicateColumn: ERROR: column "discovery_rule_id" of relation "hosts" already exists
I tried to remove that as well, since i have a backup.
foreman=# ALTER TABLE hosts
foreman-# DROP COLUMN discovery_rule_id;
ALTER TABLE
foreman=# \q
Now it complains:
PG::DuplicateTable: ERROR: relation "discovery_attribute_sets" already exists
I ended up restoring the database because it was like I picked up some changes and I wasn’t sure how to get those back.
Once I restored the database I removed the column and the 2 tables and it ran and returned 0.
foreman=# alter table hosts
foreman-# drop column discovery_rule_id;
ALTER TABLE
foreman=# drop table discovery_rules, discovery_attribute_sets;
DROP TABLE
foreman=# \q
Does this seem okay? Is there a better way to deal with this?
I am not a dba.
Thanks for any help!