]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
cephadm: separate out require files in config-json
authorSage Weil <sage@redhat.com>
Sat, 15 Feb 2020 17:40:08 +0000 (11:40 -0600)
committerSage Weil <sage@redhat.com>
Sat, 15 Feb 2020 17:48:10 +0000 (11:48 -0600)
- Put files in a subsection of the config-json.
- Also, consolidate the sanity checks into one place (command_deploy)
instead of duplicating them in create_daemon_dirs.

Signed-off-by: Sage Weil <sage@redhat.com>
src/cephadm/cephadm
src/cephadm/samples/grafana.json
src/cephadm/samples/prometheus.json
src/pybind/mgr/cephadm/module.py

index bdfc281c0b8dcb445eace3cc08a9dd76eaae57b9..8af3a6e455a686ee496bb7e3ab8721fe8dd52e43 100755 (executable)
@@ -113,7 +113,7 @@ class Monitoring(object):
                 "--storage.tsdb.path=/prometheus",
                 "--web.listen-address=:{}".format(port_map['prometheus'][0]),
             ],
-            "config-json": [
+            "config-json-files": [
                 "prometheus.yml",
             ],
         },
@@ -130,7 +130,7 @@ class Monitoring(object):
             "cpus": "2",
             "memory": "4GB",
             "args": [],
-            "config-json": [
+            "config-json-files": [
                 "grafana.ini",
                 "provisioning/datasources/ceph-dashboard.yml",
                 "certs/cert_file",
@@ -142,13 +142,14 @@ class Monitoring(object):
             "cpus": "2",
             "memory": "2GB",
             "args": [],
-            "config-json": [
+            "config-json-files": [
                 "alertmanager.yml",
-                "_peers",
+            ],
+            "config-json-args": [
+                "peers",
             ],
         },
-        }
-    }  # type: Dict[str, dict]
+    }  # type: ignore
 
 def attempt_bind(s, address, port):
     # type (str) -> None
@@ -907,7 +908,7 @@ def get_daemon_args(fsid, daemon_type, daemon_id):
         r += metadata.get('args', list())
         if daemon_type == 'alertmanager':
             config = get_parm(args.config_json)
-            peers = config.get('_peers', list())  # type: ignore
+            peers = config.get('peers', list())  # type: ignore
             for peer in peers:
                 r += ["--cluster.peer={}".format(peer)]
     return r
@@ -931,13 +932,8 @@ def create_daemon_dirs(fsid, daemon_type, daemon_id, uid, gid,
             f.write(keyring)
 
     if daemon_type in Monitoring.components.keys():
-
-        received_config = get_parm(args.config_json)
-        required_config = Monitoring.components[daemon_type].get('config-json', list())
-        if required_config:
-            if not received_config or not all(c in received_config.keys() for c in required_config):
-                raise Error("{} deployment requires config-json which must "
-                            "contain settings for {}".format(daemon_type.capitalize(), ', '.join(required_config)))
+        config = get_parm(args.config_json) # type: ignore
+        required_files = Monitoring.components[daemon_type].get('config-json-files', list())
 
         # Set up directories specific to the monitoring component
         config_dir = ''
@@ -962,14 +958,11 @@ def create_daemon_dirs(fsid, daemon_type, daemon_id, uid, gid,
 
 
         # populate the config directory for the component from the config-json
-        for fname in required_config:
-            # config entries prefixed by '_' denote a setting not a config file
-            if fname.startswith('_'):
-                continue
-            if isinstance(received_config[fname], list):
-                content = '\n'.join(received_config[fname])
+        for fname in required_files:
+            if isinstance(config['files'][fname], list):  # type: ignore
+                content = '\n'.join(config['files'][fname])  # type: ignore
             else:
-                content = received_config[fname]
+                content = config['files'][fname]  # type: ignore
 
             with open(os.path.join(data_dir_root, config_dir, fname), 'w') as f:
                 os.fchown(f.fileno(), uid, gid)
@@ -2000,15 +1993,18 @@ def command_deploy():
         elif args.image == DEFAULT_IMAGE:
             raise Error("--image parameter must be supplied for {}".format(daemon_type))
 
-        if daemon_type in ['prometheus', 'grafana', 'alertmanager']:
-            if not args.config_json:
-                raise Error("config-json parameter is needed when deploying {} service".format(daemon_type))
-            metadata = Monitoring.components[daemon_type]  # type: ignore
-            required_keys = metadata.get('config_json', list())  # type: ignore
-            received = get_parm(args.config_json)
-            if not all([req in received.keys()
-                        for req in required_keys]):
-                raise Error("config-json must contain {} section(s)".format(','.join(required_keys)))
+        # make sure provided config-json is sufficient
+        config = get_parm(args.config_json) # type: ignore
+        required_files = Monitoring.components[daemon_type].get('config-json-files', list())
+        required_args = Monitoring.components[daemon_type].get('config-json-args', list())
+        if required_files:
+            if not config or not all(c in config.get('files', {}).keys() for c in required_files):  # type: ignore
+                raise Error("{} deployment requires config-json which must "
+                            "contain file content for {}".format(daemon_type.capitalize(), ', '.join(required_files)))
+        if required_args:
+            if not config or not all(c in config.keys() for c in required_args):  # type: ignore
+                raise Error("{} deployment requires config-json which must "
+                            "contain arg for {}".format(daemon_type.capitalize(), ', '.join(required_args)))
 
         if daemon_type == 'prometheus':
             uid, gid = extract_uid_gid(file_path='/etc/prometheus')
index bda4887cdbfee27336da132cfe3cfd1350ae8a53..0e0689b7e3bc160c78bb3efea80ad6f7b46b17d3 100644 (file)
@@ -1,5 +1,6 @@
 {
-    "grafana.ini": [
+    "files": {
+       "grafana.ini": [
             "[users]",
             "  default_theme = light",
             "[auth.anonymous]",
@@ -17,8 +18,8 @@
             "  admin_user = admin",
             "  admin_password = admin",
             "  allow_embedding = true"
-    ],
-    "provisioning/datasources/ceph-dashboard.yml": [
+       ],
+       "provisioning/datasources/ceph-dashboard.yml": [
             "deleteDatasources:",
             "  - name: 'Dashboard'",
             "    orgId: 1",
             "    basicAuth: false",
             "    isDefault: true",
             "    editable: false"
-    ],
-    "certs/cert_file": [
-        "-----BEGIN CERTIFICATE-----",
-        "MIIDLTCCAhWgAwIBAgIUEH0mq6u93LKsWlNXst5pxWcuqkQwDQYJKoZIhvcNAQEL",
-        "BQAwJjELMAkGA1UECgwCSVQxFzAVBgNVBAMMDmNlcGgtZGFzaGJvYXJkMB4XDTIw",
-        "MDEwNTIyNDYyMFoXDTMwMDEwMjIyNDYyMFowJjELMAkGA1UECgwCSVQxFzAVBgNV",
-        "BAMMDmNlcGgtZGFzaGJvYXJkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC",
-        "AQEAqxh6eO0NTZJe+DoKZG/kozJCf+83eB3gWzwXoNinRmV/49f5WPR20DIxAe0R",
-        "saO6XynJXTrhvXT1bsARUq+LSmjWNFoYXopFuOJhGdWn4dmpuHwtpcFv2kjzNOKj",
-        "U2EG8j6bsRp1jFAzn7kdbSWT0UHySRXp9DPAjDiF3LjykMXiJMReccFXrB1pRi93",
-        "nJxED8d6oT5GazGB44svb+Zi6ABamZu5SDJC1Fr/O5rWFNQkH4hQEqDPj1817H9O",
-        "sm0mZiNy77ZQuAzOgZN153L3QOsyJismwNHfAMGMH9mzPKOjyhc13VlZyeEzml8p",
-        "ZpWQ2gi8P2r/FAr8bFL3MFnHKwIDAQABo1MwUTAdBgNVHQ4EFgQUZg3v7MX4J+hx",
-        "w3HENCrUkMK8tbwwHwYDVR0jBBgwFoAUZg3v7MX4J+hxw3HENCrUkMK8tbwwDwYD",
-        "VR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAaR/XPGKwUgVwH3KXAb6+",
-        "s9NTAt6lCmFdQz1ngoqFSizW7KGSXnOgd6xTiUCR0Tjjo2zKCwhIINaI6mwqMbrg",
-        "BOjb7diaqwFaitRs27AtdmaqMGndUqEBUn/k64Ld3VPGL4p0W2W+tXsyzZg1qQIn",
-        "JXb7c4+oWzXny7gHFheYQTwnHzDcNOf9vJiMGyYYvU1xTOGucu6dwtOVDDe1Z4Nq",
-        "AyIYWDScRr2FeAOXyx4aW2v5bjpTxvP+79/OOBbQ+p4y5F4PDrPeOSweGoo6huTR",
-        "+T+YI9Jfw2XCgV7NHWhfdt3fHHwUQzO6WszWU557pmCODLvXWsQ8P+GRiG7Nywm3",
-        "uA==",
-        "-----END CERTIFICATE-----"
-    ],
-    "certs/cert_key": [
-        "-----BEGIN PRIVATE KEY-----",
-        "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCrGHp47Q1Nkl74",
-        "Ogpkb+SjMkJ/7zd4HeBbPBeg2KdGZX/j1/lY9HbQMjEB7RGxo7pfKcldOuG9dPVu",
-        "wBFSr4tKaNY0WhheikW44mEZ1afh2am4fC2lwW/aSPM04qNTYQbyPpuxGnWMUDOf",
-        "uR1tJZPRQfJJFen0M8CMOIXcuPKQxeIkxF5xwVesHWlGL3ecnEQPx3qhPkZrMYHj",
-        "iy9v5mLoAFqZm7lIMkLUWv87mtYU1CQfiFASoM+PXzXsf06ybSZmI3LvtlC4DM6B",
-        "k3XncvdA6zImKybA0d8AwYwf2bM8o6PKFzXdWVnJ4TOaXylmlZDaCLw/av8UCvxs",
-        "UvcwWccrAgMBAAECggEAeBv0BiYrm5QwdUORfhaKxAIJavRM1Vbr5EBYOgM90o54",
-        "bEN2ePsM2XUSsE5ziGfu8tVL1dX7GNwdW8UbpBc1ymO0VAYXa27YKUVKcy9o7oS1",
-        "v5v1E5Kq6esiSLL9gw/vJ2nKNFblxD2dL/hs7u1dSp5n7uSiW1tlRUp8toljRzts",
-        "1Cenp0J/a82HwWDE8j/H9NvitTOZ2cdwJ76V8GkBynlvr2ARjRfZGx0WXEJmoZYD",
-        "YUQVU303DB6Q2tkFco4LbPofkuhhMPhXsz3fZ/blHj/c78tqP9L5sQ29oqoPE1pS",
-        "DBOwKC/eoi5FY34RdLNL0dKq9MzbuYqEcCfZOJgxoQKBgQDf+5XF+aXQz2OmSaj6",
-        "1Yr+3KAKdfX/AYp22X1Wy4zWcZlgujgwQ1FG0zay8HVBM0/xn4UgOtcKCoXibePh",
-        "ag1t8aZINdRE1JcMzKmZoSvU9Xk30CNvygizuJVEKsJFPDbPzCpauDSplzcQb4pZ",
-        "wepucPuowkPMBx0iU3x0qSThWwKBgQDDjYs7d30xxSqWWXyCOZshy7UtHMNfqP15",
-        "kDfTXIZzuHvDf6ZNci10VY1eDZbpZfHgc6x1ElbKv2H4dYsgkENJZUi1YQDpVPKq",
-        "4N5teNykgAuagiR7dRFltSju3S7hIE6HInTv3hShaFPymlEE7zuBMuEUcuvYz5YN",
-        "RjxsvypKcQKBgCuuV+Y1KqZPW8K5SNAqRyIvCrMfkCr8NPG6tpvvtHa5zsyzZHPd",
-        "HQOv+1HoXSWrCSM5FfBUKU3XAYdIIRH76cSQRPp+LPiDcTXY0Baa/P5aJRrCZ7bM",
-        "cugBznJt2FdCR/o8eeIZXIPabq2w4w1gKQUC2cFuqWQn2wGvwGzL89pTAoGAAfpx",
-        "mSVpT9KVzrWTC+I3To04BP/QfixAfDVYSzwZZBxOrDijXw8zpISlDHmIuE2+t62T",
-        "5g9Mb3qmLBRMVwT+mUR8CtGzZ6jjV5U0yti5KrTc6TA93D3f8i51/oygR8jC4p0X",
-        "n8GYZdWfW8nx3eHpsTHpkwJinmvjMbkvLU51yBECgYAnUAMyhNOWjbYS5QWd8i1W",
-        "SFQansVDeeT98RebrzmGwlgrCImHItJz0Tz8gkNB3+S2B2balqT0WHaDxQ8vCtwX",
-        "xB4wd+gMomgdYtHGRnRwj1UyRXDk0c1TgGdRjOn3URaezBMibHTQSbFgPciJgAuU",
-        "mEl75h1ToBX9yvnH39o50g==",
-        "-----END PRIVATE KEY-----"
-    ]
+       ],
+       "certs/cert_file": [
+            "-----BEGIN CERTIFICATE-----",
+            "MIIDLTCCAhWgAwIBAgIUEH0mq6u93LKsWlNXst5pxWcuqkQwDQYJKoZIhvcNAQEL",
+            "BQAwJjELMAkGA1UECgwCSVQxFzAVBgNVBAMMDmNlcGgtZGFzaGJvYXJkMB4XDTIw",
+            "MDEwNTIyNDYyMFoXDTMwMDEwMjIyNDYyMFowJjELMAkGA1UECgwCSVQxFzAVBgNV",
+            "BAMMDmNlcGgtZGFzaGJvYXJkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC",
+            "AQEAqxh6eO0NTZJe+DoKZG/kozJCf+83eB3gWzwXoNinRmV/49f5WPR20DIxAe0R",
+            "saO6XynJXTrhvXT1bsARUq+LSmjWNFoYXopFuOJhGdWn4dmpuHwtpcFv2kjzNOKj",
+            "U2EG8j6bsRp1jFAzn7kdbSWT0UHySRXp9DPAjDiF3LjykMXiJMReccFXrB1pRi93",
+            "nJxED8d6oT5GazGB44svb+Zi6ABamZu5SDJC1Fr/O5rWFNQkH4hQEqDPj1817H9O",
+            "sm0mZiNy77ZQuAzOgZN153L3QOsyJismwNHfAMGMH9mzPKOjyhc13VlZyeEzml8p",
+            "ZpWQ2gi8P2r/FAr8bFL3MFnHKwIDAQABo1MwUTAdBgNVHQ4EFgQUZg3v7MX4J+hx",
+            "w3HENCrUkMK8tbwwHwYDVR0jBBgwFoAUZg3v7MX4J+hxw3HENCrUkMK8tbwwDwYD",
+            "VR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAaR/XPGKwUgVwH3KXAb6+",
+            "s9NTAt6lCmFdQz1ngoqFSizW7KGSXnOgd6xTiUCR0Tjjo2zKCwhIINaI6mwqMbrg",
+            "BOjb7diaqwFaitRs27AtdmaqMGndUqEBUn/k64Ld3VPGL4p0W2W+tXsyzZg1qQIn",
+            "JXb7c4+oWzXny7gHFheYQTwnHzDcNOf9vJiMGyYYvU1xTOGucu6dwtOVDDe1Z4Nq",
+            "AyIYWDScRr2FeAOXyx4aW2v5bjpTxvP+79/OOBbQ+p4y5F4PDrPeOSweGoo6huTR",
+            "+T+YI9Jfw2XCgV7NHWhfdt3fHHwUQzO6WszWU557pmCODLvXWsQ8P+GRiG7Nywm3",
+            "uA==",
+            "-----END CERTIFICATE-----"
+       ],
+       "certs/cert_key": [
+            "-----BEGIN PRIVATE KEY-----",
+            "MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCrGHp47Q1Nkl74",
+            "Ogpkb+SjMkJ/7zd4HeBbPBeg2KdGZX/j1/lY9HbQMjEB7RGxo7pfKcldOuG9dPVu",
+            "wBFSr4tKaNY0WhheikW44mEZ1afh2am4fC2lwW/aSPM04qNTYQbyPpuxGnWMUDOf",
+            "uR1tJZPRQfJJFen0M8CMOIXcuPKQxeIkxF5xwVesHWlGL3ecnEQPx3qhPkZrMYHj",
+            "iy9v5mLoAFqZm7lIMkLUWv87mtYU1CQfiFASoM+PXzXsf06ybSZmI3LvtlC4DM6B",
+            "k3XncvdA6zImKybA0d8AwYwf2bM8o6PKFzXdWVnJ4TOaXylmlZDaCLw/av8UCvxs",
+            "UvcwWccrAgMBAAECggEAeBv0BiYrm5QwdUORfhaKxAIJavRM1Vbr5EBYOgM90o54",
+            "bEN2ePsM2XUSsE5ziGfu8tVL1dX7GNwdW8UbpBc1ymO0VAYXa27YKUVKcy9o7oS1",
+            "v5v1E5Kq6esiSLL9gw/vJ2nKNFblxD2dL/hs7u1dSp5n7uSiW1tlRUp8toljRzts",
+            "1Cenp0J/a82HwWDE8j/H9NvitTOZ2cdwJ76V8GkBynlvr2ARjRfZGx0WXEJmoZYD",
+            "YUQVU303DB6Q2tkFco4LbPofkuhhMPhXsz3fZ/blHj/c78tqP9L5sQ29oqoPE1pS",
+            "DBOwKC/eoi5FY34RdLNL0dKq9MzbuYqEcCfZOJgxoQKBgQDf+5XF+aXQz2OmSaj6",
+            "1Yr+3KAKdfX/AYp22X1Wy4zWcZlgujgwQ1FG0zay8HVBM0/xn4UgOtcKCoXibePh",
+            "ag1t8aZINdRE1JcMzKmZoSvU9Xk30CNvygizuJVEKsJFPDbPzCpauDSplzcQb4pZ",
+            "wepucPuowkPMBx0iU3x0qSThWwKBgQDDjYs7d30xxSqWWXyCOZshy7UtHMNfqP15",
+            "kDfTXIZzuHvDf6ZNci10VY1eDZbpZfHgc6x1ElbKv2H4dYsgkENJZUi1YQDpVPKq",
+            "4N5teNykgAuagiR7dRFltSju3S7hIE6HInTv3hShaFPymlEE7zuBMuEUcuvYz5YN",
+            "RjxsvypKcQKBgCuuV+Y1KqZPW8K5SNAqRyIvCrMfkCr8NPG6tpvvtHa5zsyzZHPd",
+            "HQOv+1HoXSWrCSM5FfBUKU3XAYdIIRH76cSQRPp+LPiDcTXY0Baa/P5aJRrCZ7bM",
+            "cugBznJt2FdCR/o8eeIZXIPabq2w4w1gKQUC2cFuqWQn2wGvwGzL89pTAoGAAfpx",
+            "mSVpT9KVzrWTC+I3To04BP/QfixAfDVYSzwZZBxOrDijXw8zpISlDHmIuE2+t62T",
+            "5g9Mb3qmLBRMVwT+mUR8CtGzZ6jjV5U0yti5KrTc6TA93D3f8i51/oygR8jC4p0X",
+            "n8GYZdWfW8nx3eHpsTHpkwJinmvjMbkvLU51yBECgYAnUAMyhNOWjbYS5QWd8i1W",
+            "SFQansVDeeT98RebrzmGwlgrCImHItJz0Tz8gkNB3+S2B2balqT0WHaDxQ8vCtwX",
+            "xB4wd+gMomgdYtHGRnRwj1UyRXDk0c1TgGdRjOn3URaezBMibHTQSbFgPciJgAuU",
+            "mEl75h1ToBX9yvnH39o50g==",
+            "-----END PRIVATE KEY-----"
+       ]
+    }
 }
index e4c8cb80fec2b007d8ed5269dd815a025e9c2f35..64727fb591e76b4540f03d0a57fd0d1853ef4bed 100644 (file)
@@ -1,15 +1,17 @@
 {
-"prometheus.yml": [
-"global:",
-"  scrape_interval: 5s",
-"  evaluation_interval: 10s",
-"",
-"rule_files: ",
-"  - '/etc/prometheus/alerting/*'",
-"",
-"scrape_configs:",
-"  - job_name: 'prometheus'",
-"    static_configs:",
-"      - targets: ['localhost:9095']"
-]
-}
\ No newline at end of file
+    "files": {
+       "prometheus.yml": [
+           "global:",
+           "  scrape_interval: 5s",
+           "  evaluation_interval: 10s",
+           "",
+           "rule_files: ",
+           "  - '/etc/prometheus/alerting/*'",
+           "",
+           "scrape_configs:",
+           "  - job_name: 'prometheus'",
+           "    static_configs:",
+           "      - targets: ['localhost:9095']"
+       ]
+    }
+}
index 66d9ccad1988accdd975c7436a2895fcb1d97be9..75a2ca024f43b2e47b08e04c71e98d904b93b26d 100644 (file)
@@ -2151,7 +2151,8 @@ class CephadmOrchestrator(MgrModule, orchestrator.OrchestratorClientMixin):
             t = t.split('/')[2]
             mgr_scrape_list = [t]
         j = json.dumps({
-            'prometheus.yml': """# generated by cephadm
+            'files': {
+                'prometheus.yml': """# generated by cephadm
 global:
   scrape_interval: 5s
   evaluation_interval: 10s
@@ -2163,7 +2164,8 @@ scrape_configs:
     - targets: {mgr_scrape_list}
 """.format(
     mgr_scrape_list=str(mgr_scrape_list)
-    )
+    ),
+            },
         })
         return j